COBOL के लंबे समय तक “मृत” बने रहने पर दादा का रिकॉर्ड
(wumpus-cave.net)- जून 1992 में Technical Support पत्रिका में प्रकाशित लेख ने पहले ही COBOL की मृत्यु की घोषणा कर दी थी, लेकिन मुख्य बात यह है कि 30 साल बाद भी यह भाषा पूरी तरह गायब नहीं हुई
- उस समय के 4GL जैसे buzzwords में से ज़्यादातर लंबे समय तक नहीं टिके, लेकिन COBOL कई बाद के विकल्पों से ज़्यादा समय तक टिका रहा
- COBOL को चलते रहने देने वाला निर्णायक मोड़ Y2K समस्या थी, और वास्तविक प्रतिक्रिया में COBOL programmers की एक नई पीढ़ी को train करना पड़ा
- जिस भाषा का installed base कभी बड़ा रहा हो, वह अचानक गायब होने के बजाय नए learners के घटने के साथ एक long tail छोड़ते हुए बनी रह सकती है
- लेखक के दादा का 1 सितंबर 2024 को 91 वर्ष की उम्र में निधन हुआ, और यह लेख निजी स्मरणों और पुराने तकनीकी पूर्वानुमानों को साथ-साथ रखता है
1992 में ही आ चुकी “मृत COBOL” की घोषणा
- लेखक के दादा ने जून 1992 में Technical Support पत्रिका में COBOL की मृत्यु घोषित करने वाला लेख प्रकाशित किया
- उस लेख में 4GL जैसे उस दौर के शब्द आते हैं, और लेखक जोड़ता है कि Wikipedia की 4GL उदाहरण सूची में मौजूद कई चीज़ों से ज़्यादा लंबे समय तक COBOL जीवित रहा
- मूल टेक्स्ट NaSPA archive में उपलब्ध है: http://www.naspa.net/magazine/1992/t9206003.txt
- 1992 का लेख “dead” शब्द के अर्थों को अलग-अलग समझाते हुए COBOL को मृत लेकिन गायब न हुई Zombie जैसी चीज़ के रूप में देखता है
- Autocoder को भी COBOL के पूर्वज के रूप में पेश किया गया है, और उसकी तुलना ऐसे उदाहरण से की गई है जिसे मृत भाषा माना जाता है लेकिन जिसके कुछ निशान अब भी बचे हो सकते हैं
Y2K ने COBOL को लंबी उम्र दी
- COBOL zombie को चलते रहने देने वाला बड़ा कारण Y2K समस्या थी
- उस समय खबरों में इसे बहुत उछाला गया था और बाद में ऐसा लगा जैसे कुछ हुआ ही नहीं, लेकिन असल में यह एक बहुत बड़ा मुद्दा था
- इससे निपटने की प्रक्रिया में COBOL programmers की नई पीढ़ी को train करना पड़ा
- इस प्रक्रिया ने COBOL को और लंबे समय तक बनाए रखने में योगदान दिया हो सकता है
- लेखक अब programming languages के लिए dead शब्द का इस्तेमाल ज़्यादा नहीं करता
- जिस भाषा का कभी बड़ा installed base रहा हो, उसका पूरी तरह मरना मुश्किल है
- इसके बजाय, जब नए programmers उसे सीखना बंद कर देते हैं, तो वह धीरे-धीरे धुंधली पड़ती हुई एक long tail छोड़ती है
निजी स्मरण से जुड़ता तकनीकी इतिहास का एक दृश्य
- लेखक के दादा का 1 सितंबर 2024 को 91 वर्ष की उम्र में निधन हुआ
- आधिकारिक मृत्यु-कारण pneumonia था
- दादी का उसी साल अप्रैल में निधन हुआ था, और दादा ने इलाज न लेने का अनुरोध किया था
1 टिप्पणियां
Hacker News की राय
लेख में 4GL का ज़िक्र है, और यह शब्द वाकई बहुत लंबे समय बाद सुनने को मिला
COBOL ने भी यह वादा किया था कि “यह इंसानों द्वारा पढ़े जाने वाले वाक्यों जैसा दिखता है, इसलिए अब programmers की ज़रूरत नहीं रहेगी”, और यह आज के low-code platforms या LLM-generated code जैसा लगता है
समस्या यह है कि आम तौर पर लोग किसी काम करने वाले समाधान तक पहुँचने लायक पर्याप्त विस्तार से समस्या को समझा और छोटे हिस्सों में बाँट नहीं पाते। अगर कोई यह प्रक्रिया कर लेता है, तो वह आखिरकार programmer ही बन जाता है, और COBOL का मुख्य सबक यह है कि programmers की ज़रूरत की वजह सिर्फ़ computer interface या language नहीं है
यह ज़्यादा इस दिशा में था कि जो व्यक्ति business processes को अच्छी तरह समझता है, वह computers के काम करने का तरीका बहुत अधिक सीखे बिना उन्हें COBOL में लिख सके; कुछ-कुछ वैसा ही जैसे analysts या data लोग SQL के ज़रिए database से बात करते हैं
COBOL और 4GL का मुख्य उद्देश्य payroll, banking, HR, inventory जैसे business applications बनाना था, और खासकर settlement जैसे दोहराए जाने वाले बड़े पैमाने के कामों को घटाने वाली batch processing पर फोकस था
यह उस दौर की उपज था जब dedicated DBMS नहीं थे, इसलिए file organization और files से जुड़े verbs बहुत विकसित थे, और इसमें आज के SQL जैसी कुछ बातें भी दिखती हैं
भले ही LLM जादू की तरह समाधान बना दे, समस्या को संक्षिप्त और सटीक रूप से व्यक्त करने की ज़िम्मेदारी बस ऊपर की ओर चली जाती है
आखिरकार आप prompt के ज़रिए “programming” करते हैं, और LLM द्वारा सुझाए गए औपचारिक output, यानी code, की समीक्षा करते हैं। Programming का स्वरूप prompt engineering में बदल सकता है, लेकिन code नाम की formal language को समझने का काम बना रहता है
लेख कहता है कि 1990 के शुरुआती दशक में 4GL बहुत popular था, लेकिन मुझे शक है कि mainframe के बाहर भी ऐसा था या नहीं। 4GL movement शुरुआत से ही काफ़ी mainframe-oriented था, और Wikipedia भी इसके शुरुआती लक्ष्य के रूप में program के लिए ज़रूरी punched cards की संख्या घटाने का ज़िक्र करता है
1992 तक Linux आ चुका था, Python पर भी काम चल रहा था, Perl लोकप्रिय हो रहा था और Haskell का शुरुआती version भी आ चुका था। Technology का front महंगे workstations से consumer PCs की ओर जा रहा था, और language designers ने dBase, HyperTalk, AppleScript जैसी चीज़ें बनाते समय—जिन्हें नतीजे के तौर पर 4GL माना जा सकता है—4GL concept को बहुत ज़्यादा ध्यान में रखा हो, ऐसा नहीं लगता
मैं इस बात से सहमत हूँ कि natural language जैसा text ज़्यादातर programming उपयोगों के लिए खराब idea है, लेकिन मुझे नहीं लगता कि 4GL movement की असफलता की वजह सिर्फ़ यही थी। ज़्यादातर 4GL, 3GL COBOL से भी ज़्यादा natural language जैसे नहीं थे
बड़ी समस्या यह थी कि 4GL movement ठीक से परिभाषित नहीं कर पाया कि नई generation क्या है और क्या उपयोगी है। 2GL ने assembly से machine code में translation, और 3GL ने compilation जैसा क्रांतिकारी बदलाव लाया, लेकिन 4GL में जो बदलाव कुछ हद तक परिभाषित किया जा सकता था, वह बस इतना था कि “जो capabilities external routines या libraries में थीं, उन्हें language के अंदर और डालें”
यह approach domain-specific languages में अच्छा चला, इसलिए SQL, R, MATLAB जैसे सफल 4GL निकले। दूसरी ओर, general-purpose 4GL का concept अंततः बहुत ज़्यादा फूली हुई language में बदलना तय था
आज ऐसे लोग बहुत कम हैं जो ऐसा कर सकते हैं या जिन्हें ऐसा करना चाहिए
इस संदर्भ में Scala याद आता है। लेख में जिस तरह COBOL का वर्णन किया गया है, उसे देखते हुए मुझे लगता है कि Scala भी असल में लगभग मृत अवस्था के करीब है
अभी भी कई कंपनियों और सेवाओं में Scala से लिखे core components हैं, लेकिन नए projects में इसकी दिलचस्पी काफी कम हो चुकी है
2012~2014 में HN पर “Scala में X करना” जैसे लेख लगातार दिखते थे, अब लगभग नहीं दिखते। यह स्वाभाविक और टाला न जा सकने वाला बदलाव हो सकता है, लेकिन अफसोस इस बात का है कि Scala में ऐसी अच्छी बातें थीं जिन्हें दूसरी mainstream languages अभी भी ठीक से नहीं अपना पाई हैं
testing systems जैसे कंपनी के ecosystem के लिए काफी अहम projects भी हैं, और पहले ऐसे systems बनाने वाले engineers अब ज्यादातर senior managers बन गए हैं
कुछ लोग उस समय की tech choice का अब भी समर्थन करते हैं, लेकिन अगर उन्हें पीछे मुड़कर देखने का मौका दिया जाए तो कुछ लोग ज्यादा खुले रुख में दिखते हैं। कुल मिलाकर माहौल यह है कि अगर उस समय Kotlin मौजूद होता या Swift backend services के लिए इस्तेमाल करने लायक होता, तो शायद Scala नहीं चुना जाता
https://redmonk.com/sogrady/2024/09/12/language-rankings-6-2...
शुरुआती hype ठंडा पड़ गया है, लेकिन यह ठीक है। हर language का एक hype cycle होता है, और predictions भी ज्यादातर गलत निकलते हैं। mainstream programming languages अब COBOL की तरह आसानी से मरना मुश्किल हैं
Java को 2001 से मृत घोषित किया जा रहा था, लेकिन उसने dot-com bubble, .NET, LAMP का P, Ruby, JS और Go सब झेल लिए। Python के बारे में भी version 3 transition के समय कहा गया कि लोग Ruby में चले जाएंगे और यह मर जाएगा
Scala दुनिया की सबसे लोकप्रिय functional programming language है, इसके tools और libraries अच्छे हैं, और मेरी नजर में Scala 3 एक शानदार upgrade है
कभी यह बेहद बड़ा था और हर जगह मौजूद लगता था, लेकिन अब धीरे-धीरे niche में सिमटता जा रहा है। COBOL की तरह, वास्तविक production environments में अब भी काफी Perl code बचा हुआ है
Jack Henry, SiriusXM, Starbucks, Disney streaming services, Capitol One ने भी पिछले 5 साल से अब तक data science नहीं, बल्कि services वाले हिस्से में Scala के नए projects बनाए हैं
बेशक और भी बहुत सी teams हैं, लेकिन तुरंत याद आने वाले मशहूर नाम ही इतने हैं कि इसे मृत कहना मुश्किल है
हालांकि Play, Akka-केंद्रित framework jobs और Airflow नहीं बल्कि pure Spark काम घटते दिखते हैं। मेरी नजर में ये Scala ecosystem से निकली framework jobs थीं, और कई मामलों में Scala खुद secondary था
मुझे Scala पसंद है, लेकिन यह हमेशा एक हाशिये की language रहा है, जबकि COBOL सचमुच हर जगह था
कभी न कभी Fortran, COBOL, Ada, APL जैसी legacy languages को बैठकर खुद आजमाना चाहिए, ऐसा सोचता हूं
इनकी लोकप्रियता जरूर घटी है, लेकिन ये अब भी अहम जगहों पर इस्तेमाल होती हैं
साथ ही Java code की विशाल मात्रा भी याद आती है। अच्छा हो या बुरा, Java ने enterprise क्षेत्र को लगभग निगल लिया था, लेकिन सोचता हूं कि 30~40 साल बाद सिर्फ retired लोग पुराने banking systems maintain करने के लिए Java इस्तेमाल करते दिखेंगे, ऐसा होने की कोई खास वजह है क्या
शायद विशाल monolithic codebase या platform होना भी एक कारण है। language कोई बहुत रहस्यमयी या कठिन नहीं है, बस बहुत सारा ऐसा code है जिसकी structure साफ नजर नहीं आती
लगता है अगले 100 साल तक market का लगभग 0.05% हिस्सा तो इसके पास रहेगा
हालांकि पिछले कुछ सालों में नया code ज्यादातर Kotlin में लिखा गया है
निजी तौर पर भी इससे लगाव है; 90s में कंपनी में इसे PC पर सचमुच इस्तेमाल किया था। काम यह पता लगाने का था कि data कैसे डाला जाए, और आखिर में floating-point numbers को 1 और 0 के vector की तरह treat करते हुए bits बदलकर Microsoft format से IEEE format में convert करने वाला routine लिखा था
बेशक, यह उस जमाने की बात है जब मैं बेल्ट में प्याज बांधता था
pure numerical simulation करनी हो तो मैं C++ या Python से ज्यादा Fortran पसंद करूंगा। NumPy को छोड़कर, क्योंकि NumPy खुद भी आखिरकार Fortran और C++ पर निर्भर है
2025 Carolina Code Conference में अब भी COBOL speakers की तलाश है
खासकर GnuCOBOL हाल में update हुआ है, इसलिए मैं कुछ समय से COBOL talk शामिल करना चाहता था
https://gnucobol.sourceforge.io/
https://carolina.codes
“मुझे नहीं पता कि साल 2000 की language कैसी दिखेगी, लेकिन उसका नाम Fortran होगा।” —Tony Hoare
COBOL को जिंदा माना जा सकता है, क्योंकि यह हर दौर में बदलता रहा है। modern COBOL, लोगों के नाम सुनते ही सहज रूप से दिमाग में आने वाले 1950s के COBOL से काफी अलग है
यह कुछ वैसा है जैसे Java को Algol-94 जैसा नाम दिया गया होता, और इसलिए हम कहते कि हम अब भी Algol में programming करते हैं
MULTIPLY A BY B GIVING C ON SIZE ERROR STOP RUN.जैसी शैली में नहीं लिखता<https://dtss.dartmouth.edu/sciencearticle/index.html>
COBOL मरा नहीं है, लेकिन उस तक पहुँचना मुश्किल है। वजह यह है कि Linux पर इस्तेमाल किए जा सकने वाले open source tools बहुत कम हैं
OCamlPro ने GnuCOBOL open source compiler को केंद्र में रखकर open source environment बनाने के लिए SuperBOL नाम का एक project शुरू किया है। GnuCOBOL पहले से mature है और कंपनियों में भी इस्तेमाल हो रहा है
वे पहले ही COBOL के लिए LSP वाला VSCode extension जारी कर चुके हैं, जिससे आधुनिक IDE experience मिलता है, और ग्राहक मांगों के हिसाब से दूसरे tools पर भी काम कर रहे हैं
COBOL एक-दो दिन में सीखा जा सकता है और मैं “बोरिंग” COBOL काम आज़माना चाहता हूँ, लेकिन मेरे पास mainframe experience नहीं है
https://gnucobol.sourceforge.io/
https://cobolworx.com/pages/cobforgcc.html
हमेशा की तरह, ऐसी चर्चा इस बात पर निर्भर करती है कि “मरा हुआ” और “ज़िंदा” को कैसे define किया जाता है
अगर किसी technology पर नए business अब नहीं बनते, तो उसे मरा हुआ कहा जा सकता है—ऐसा मानें तो COBOL को मरा हुआ कहना गलत नहीं होगा। यही बात IBM 390x, यानी Z/OS platform, पर भी लागू होती है, जिसे आम तौर पर COBOL के proxy की तरह इस्तेमाल किया जाता है
उल्टा, अगर operational environments में अभी भी इस्तेमाल होना ज़िंदा होने की कसौटी है, तो COBOL निश्चित रूप से ज़िंदा है, और अपने से युवा कई technologies से कहीं ज्यादा ज़िंदा है
हालांकि इसे COBOL या mainframe ecosystem की खूबी मानने की जरूरत नहीं है। Organizations की प्रवृत्ति होती है कि जो चीज़ शुरुआत में अच्छी तरह काम करती है, उसे पकड़े रहें; और शुरुआती digitization के मुख्य खिलाड़ी रहे government, banks, airlines जैसी जगहों पर वह पहली पसंद अक्सर IBM mainframe और उसके ऊपर का software ही था
हमारा mainframe प्रति घंटे 10 करोड़ transactions आराम से process करता है। ऊपर से ज्यादातर synchronous हैं, और हर transaction कई SQL transactions में बदलता है
eventual consistency भी एक तरीका है, लेकिन finance sector के लिए यह बिल्कुल fit नहीं बैठती, और military, insurance, medical और healthcare में भी शायद ऐसा ही है। काम को partitions में बाँटा जा सकता है, लेकिन shard boundaries पार करते समय consistency issues पैदा होते हैं
COBOL अभी मरा नहीं है, लेकिन धीरे-धीरे उसी दिशा में जा रहा है। मुझे ऐसा कोई bank नहीं पता जो mainframe से बाहर निकलने के लिए actively काम न कर रहा हो। फिर भी, देखे गए estimates कहते हैं कि mainframe और COBOL कम-से-कम 2050 तक बने रहेंगे
यानी अगले 26 साल तक COBOL code लिखा जाएगा। COBOL programmers की demand भी ऊँची है और pay भी अच्छा है, इसलिए अभी COBOL programmer के तौर पर career शुरू करने पर भी लगभग पूरी working life जितना समय भरा जा सकता है
entry barrier हमेशा बेहद ऊँचा था, और उस समय के मुख्य customers भी पुरानी insurance companies, banks, governments जैसी जगहें थीं। नई companies के लिए computing करना संभव होना minicomputers के बाद के दौर के ज्यादा करीब है
इस मायने में बहुत कुछ बदला नहीं है, और product के target market को देखते हुए platform के जिंदा या मृत होने की कसौटी के रूप में “क्या नए business इसे इस्तेमाल करते हैं” मुझे उचित नहीं लगता
कोई नया business unit या internal startup team—मसलन नई insurance product category—भी अगर bank के बाकी systems के साथ integrate करना चाहे, तो उसका कुछ हिस्सा COBOL में लिखा जा सकता है
कम-से-कम, सीधे COBOL में न लिखें तब भी, नए x86 racks और उन्हें manage करने वाले लोगों के लिए budget न होने के कारण उसे मौजूदा COBOL execution infrastructure, यानी Z/OS, पर चढ़ाया जा सकता है
Cloud नया mainframe है, लेकिन और खराब version। इसमें सारी कमियाँ हैं, पर सबसे बड़ा फायदा नहीं है
पहले CICS से बेहद stable और high-performance services बनाई जा सकती थीं, और उसी transaction के अंदर दूसरी services को call किया जा सकता था। platform data integrity बनाए रखने जैसे जटिल काम संभाल लेता था
एक बार उसी transaction के अंदर एक-दूसरे को call करने वाली AWS Lambda लिखकर देखें, फर्क साफ दिख जाएगा
और मुझे समझ नहीं आता कि तुलना “उसी transaction के अंदर एक-दूसरे को call करने वाली AWS Lambda” से क्यों है। क्या mainframe deployment भी developer को access दिए गए API पर code वाला
.zipफेंकने जितना आसान था?कुछ लोग इसे ऐसे समझकर आलोचना कर रहे हैं कि मैं आधुनिक भाषाओं की जगह COBOL चुनता या उसे पसंद करता हूं, लेकिन मेरा मतलब वह नहीं है। मैंने बस दायरे से बाहर जाकर devil's advocate वाली एक observation रखी थी
विडंबना यह है कि Rust से ज्यादा पढ़ने और समझने में आसान, memory-safe और स्थिर भाषा COBOL के रूप में पहले से मौजूद थी। लेकिन कोई भी उसे इस्तेमाल करना नहीं चाहता, इसलिए वह “मरी हुई” भाषा बन गई, जबकि आधुनिक दौर को संभव बनाने वाले सिस्टम उसी पर चलते हैं
उदाहरण के तौर पर, कोई संख्या input लेकर even/odd output करने वाले Rust code और COBOL code की तुलना करें, तो COBOL वाला ज्यादा सीधे तौर पर पढ़ा जाता है
क्या यह उसी स्तर की performance देता है, क्या यह दूसरी भाषाओं के native code के साथ उसी तरह interoperate करता है, क्या composition और backward compatibility में मदद करने वाले module system के ऊपर इस्तेमाल लायक package manager है, क्या Rust के algebraic data types की तरह data और errors के आकार को सुविधाजनक ढंग से व्यक्त कर सकता है—पता नहीं
जैसे COBOL के अब भी इस्तेमाल होने की वजहें हैं, वैसे ही नई भाषाओं के बनाए जाने की भी अच्छी वजहें हैं
असल में जरूरी boilerplate जोड़कर executable COBOL program बनाया जाए, तो
abcinput पर “even” और12input पर “odd” output करता हैRust syntax को खास तौर पर मुद्दा बनाना भी अजीब है। आजकल की ज्यादातर भाषाओं की तरह Rust भी broadly C-family syntax है, बस थोड़ा OCaml का असर मिला हुआ है। syntax से अलग, Rust और COBOL के लक्ष्य बहुत अलग हैं, इसलिए “बस COBOL इस्तेमाल कर लो” कहने से Rust के अस्तित्व की वजह खत्म नहीं होती
https://www.ibm.com/docs/en/cobol-zos/6.2?topic=statement-ex...
ALLOCATE, pointer address सेट करना,FREEजैसे code दिखाई देते हैंयह tweet अजीब तरह से अच्छा लगा
https://x.com/grauhut/status/1000017084435312642
अनुवाद करें तो मतलब है: “customer site पर COBOL मिला। ठीक है। mainframe है। कोई खास बात नहीं। आखिरी comment 1985 का था। author मेरी मां थीं।”