Ada Lovelace के प्रोग्राम का वास्तविक काम (2018)
(twobithistory.org)- 1843 में Ada Lovelace ने अभी तक पूरी न हुई Analytical Engine के लिए Bernoulli संख्याएँ निकालने की प्रक्रिया प्रकाशित की, और इसी वजह से वह “पहले computer program” पर बहस के केंद्र में आ गईं
- प्रकाशित तालिका Bernoulli श्रेणी पूरी की गणना करने की विधि का एक चरण दिखाती है, और Lovelace ने जिसे B7 कहा, वह आधुनिक notation में आठवीं Bernoulli संख्या के बराबर है
- Note G का program 25 operations, nested repetition, और variable values को track करने की notation तक शामिल करता था, इसलिए यह Menabrea के 11-operation वाले बिना-repeat उदाहरण से कहीं अधिक refined था
- C translation के दौरान पता चला कि मूल table में चौथा operation
v5 / v4नहीं, बल्किv4 / v5होना चाहिए; यह शायद typesetting error था, लेकिन computing history का सबसे पुराना bug माना जा सकता है - Lovelace की खास बात “first programmer” कहलाने से अधिक इसमें थी कि उन्होंने card creation को सिर्फ algebraic expressions का translation नहीं, बल्कि ऐसा programming task समझा जिसे अच्छे या खराब ढंग से किया जा सकता है
1843 का वह program जो चल नहीं सका
- Microsoft की founding story के उलट, Ada Lovelace के program को वास्तविक machine पर चलने का मौका नहीं मिला
- Paul Allen और Bill Gates ने Altair न होने पर Intel 8080 specification आधारित emulator में BASIC interpreter को test किया, और उसे असली Altair पर भी चला दिया
- Lovelace ने भी ऐसे computer के लिए program लिखा जिसका केवल description मौजूद था, लेकिन Analytical Engine बनी ही नहीं, इसलिए उसे run नहीं किया जा सका
- Lovelace के program को अक्सर दुनिया का पहला computer program कहा जाता है, लेकिन उसके status पर बहस अब भी बाकी है
- Lovelace के contribution की सीमा और मूल्य पर विवाद इतना चला कि Walter Isaacson ने उसे “minor academic specialty” कहा
- यहाँ अहम सवाल व्यक्ति के मूल्यांकन से ज्यादा यह है कि 1843 में लिखा गया program कैसे काम करने के लिए design किया गया था
- Program केवल formulas की list से आगे जाता है
- इसने repeat किए जा सकने वाले operation groups बनाकर loop जैसी structure का इस्तेमाल किया
- variable state changes को track करने की notation introduce की
- इसमें आज के software writing experience से मिलते-जुलते हिस्से हैं
Bernoulli संख्याएँ और powers के sum की समस्या
- Lovelace का program Bernoulli numbers calculate करने के लिए design किया गया था
- Bernoulli numbers के पीछे powers के sum की गणना नाम की पुरानी mathematical problem है
- Pythagorean school ने
1 + 2 + 3 + ... + nको सीधे जोड़ने के बजाय calculate करने का तरीका खोजा, और दो triangles को rectangle में fit करने की विधि सेn(n+1)/2formula पाया - Archimedes को
1² + 2² + 3² + ... + n²जैसे sums में रुचि थी, और उन्होंने geometrically interpret की जा सकने वाली solution छोड़ी - Aryabhata ने 499 में cube-sum formula सहित Aryabhatiya प्रकाशित की
- Pythagorean school ने
- अधिक general problem
1^k + 2^k + ... + n^kजैसे sum निकालने की method थी- Johann Faulhaber ने 1631 में 17th powers तक के formulas calculate करके प्रकाशित किए, लेकिन general solution नहीं दिया
- Blaise Pascal ने 1665 में general method बनाई, लेकिन उसके लिए पहले सभी lower power sums की calculation method जाननी पड़ती थी
- Jakob Bernoulli ने अधिक practical general solution छोड़ा
- Pascal’s triangle का उपयोग करके polynomial coefficients के patterns पहचाने
- coefficients के कुछ हिस्से Pascal’s triangle से, और बाकी इस property से निकाले कि coefficient sum हमेशा 1 होता है
- coefficients का यही दूसरा factor Bernoulli numbers के नाम से जानी जाने वाली sequence बना
- Bernoulli की discovery ने arbitrary power sums की calculation को तुरंत आसान समस्या नहीं बना दिया
kth power sum calculate करने के लिएkth तक Bernoulli numbers पता होने चाहिए- हर Bernoulli number पिछले Bernoulli numbers के आधार पर calculate होता है
- फिर भी हर power-sum formula को क्रम से derive करने की तुलना में लंबी Bernoulli sequence calculate करना कहीं आसान था
Babbage की दो calculating machines
- Charles Babbage ने दो तरह की mechanical calculators design कीं
- पहली Difference Engine थी
- दूसरी Analytical Engine, जिसे आज mechanical computer के रूप में जाना जाता है
- Difference Engine computer नहीं, बल्कि केवल addition और subtraction करने वाली machine थी
- Babbage को उस समय logarithm tables में कई errors होने से शिकायत थी, और वे tables को mechanically तैयार करना चाहते थे
- Gaspard de Prony की method of divided differences ने logarithm tables बनाने की प्रक्रिया को ऐसे छोटे steps में बाँट दिया जिनमें केवल addition और subtraction चाहिए था
- Polynomials का उपयोग logarithmic functions और trigonometric functions के approximation में किया जा सकता है
- Difference Engine difference table के हर column को physical gear columns से match करती थी
- हर gear decimal digit का एक स्थान था, और पूरा column एक decimal number दर्शाता था
- इसमें 8 columns होने थे, जिससे 7th-degree polynomials तक tables बनाई जा सकती थीं
- इंसान initial values set करने के बाद crank घुमाता था ताकि constant differences अगले column में propagate हों
- Babbage ने Difference Engine का एक हिस्सा बनाकर demonstrate किया, लेकिन पूरी machine पूरी नहीं कर पाए
- उन्हें ऐसा manufacturer नहीं मिला जो जरूरी संख्या में gears पर्याप्त precision से बना सके
- Working Difference Engine 1990s में ही बनी, जब precision machining संभव हो चुकी थी
- Analytical Engine को कहीं अधिक powerful और flexible machine के रूप में सोचा गया था
- Difference Engine जैसे gear columns इस्तेमाल करने थे, लेकिन इसमें सैकड़ों या अधिक columns होने थे
- Jacquard Loom की तरह punched cards से program किया जा सकता था
- यह addition और subtraction के साथ multiplication और division भी कर सकती थी
- “mill” नाम का हिस्सा operation के अनुसार rearrange होता, storage columns से operands पढ़ता और result को किसी दूसरे column में record करता
Menabrea paper और Lovelace के notes
- Babbage ने Turin में Italian engineer और बाद में Prime Minister बनने वाले Luigi Menabrea से मुलाकात की, और Menabrea ने 1842 में Analytical Engine की possibilities समझाने वाला French paper प्रकाशित किया
- Lovelace ने 1843 में Menabrea के paper का English में translation किया
- Lovelace पहली बार 1833 में 17 साल की उम्र में Babbage से मिलीं और उनकी Difference Engine से बहुत प्रभावित हुईं
- बचपन से उन्हें काफी mathematical education मिली थी, और शादी व तीन बच्चों के जन्म के बाद भी उन्होंने Augustus de Morgan से mathematics सीखी
- Menabrea का paper Difference Engine के working method और Analytical Engine की superiority को संक्षेप में बताता है
- Analytical Engine को ऐसी machine के रूप में introduce किया गया जो 20-digit numbers के दो numbers का product 3 minutes के अंदर निकाल सकती थी
- linear equations के एक simple system और दो binomials के product के expansion को example बनाते हुए “diagrams of development” का उपयोग किया गया
- ये tables भी Lovelace के program वाली sense में programs थे, लेकिन branching या repetition के बिना simple examples थे
- Lovelace के translation में original से लंबी notes जोड़ी गईं, और यहीं उनके प्रमुख contributions दिखते हैं
- Note A Analytical Engine की arbitrary mathematical operations करने वाली machine के रूप में possibility पर विस्तार से बात करता है
- उन्होंने माना कि यह केवल numbers पर ही नहीं, बल्कि उन objects पर भी operate कर सकती है जिनके mutual fundamental relations को operations के abstract science में express किया जा सके
- उदाहरण के लिए, उन्होंने कहा कि यह किसी दिन music compose भी कर सकती है
- Note G दो वजहों से प्रसिद्ध है
- Lovelace का यह तर्क कि Analytical Engine को “think” करता हुआ नहीं कहा जा सकता, बाद में Alan Turing ने “Lady Lovelace’s Objection” कहा
- साथ ही, यह दिखाने के लिए कि machine बहुत complex problems handle कर सकती है, इसमें Bernoulli numbers calculate करने का program शामिल था
Note G program की वास्तविक structure
- Lovelace की पूरी table एक extended “diagram of development” format में है, और original image यहाँ देखी जा सकती है
- Program सामान्य mathematical symbols से specified operations list के करीब है
- ऐसा लगता है कि Babbage या Lovelace Analytical Engine के लिए opcode set जैसा कुछ बनाने के stage तक नहीं पहुँचे थे
- Lovelace ने Bernoulli sequence को किसी limit तक calculate करने की method समझाई, लेकिन table में दिया गया program उसके एक step का example है
- calculation target वह value है जिसे Lovelace ने B7 कहा
- आधुनिक mathematical notation में यह आठवीं Bernoulli number है
- formula
B7 = -1(A0 + B1A1 + B3A3 + B5A5)के रूप में है
- इस formula का हर term किसी specific power-sum polynomial के coefficient को दर्शाता है
- संबंधित power 8 है, और positive integers के 8th power sum formula में ही आठवीं Bernoulli number पहली बार आती है
B1सेB7तक Lovelace की indexing के अनुसार अलग-अलग Bernoulli numbers हैंA0सेA5तक वे coefficient factors हैं जिन्हें Bernoulli Pascal’s triangle से calculate कर सकते थे- Lovelace का program
n = 4का उपयोग करता है
- C translation gist के रूप में उपलब्ध है
- पहले
A0औरB1A1calculate किए जाते हैं - इसके बाद दो बार repeat होने वाले loop में जाकर
B3A3औरB5A5calculate किए जाते हैं - हर product calculate करने के बाद उसे पिछले products से जोड़कर अंत में total sum प्राप्त किया जाता है
- पहले
Loops, variable state, और पुराना bug
- C translation Lovelace program की foresight अच्छी तरह दिखाता है
- original program में बिल्कुल
whileloop नहीं था, लेकिन Lovelace ने operation groups बनाए और notes में specify किया कि उन्हें कब repeat करना है - C translation में दो
whileloops हैं, जिनमें एक दूसरे के अंदर nested है - original और C translation का
v10हर repetition में घटने वाले counter variable की तरह काम करता है
- original program में बिल्कुल
- Lovelace की table में Menabrea की table की तुलना में state changes follow करना आसान है
- इसमें “Indication of change in the value on any Variable” नाम का column है
- हर variable पर superscript index लगाया गया है, जो program execution के दौरान उस variable के पास रहे successive values दिखाता है
- superscript 2 का मतलब program start के बाद assigned दूसरी value है
- C में port करके चलाने पर शुरुआत में गलत result आया, और वजह translation code नहीं बल्कि original table थी
- Lovelace के “diagram of development” में चौथा operation
v5 / v4लिखा है - सही order
v4 / v5है - यह Lovelace द्वारा बनाए गए program की error नहीं, बल्कि शायद typesetting error थी
- Lovelace के “diagram of development” में चौथा operation
- Jim Randall ने भी Lovelace program को Python में translate किया और उसी division bug के साथ दो अन्य issues बताए
- original program का छोटा bug इस interpretation से जुड़ता है कि Lovelace कोई simple demo नहीं, बल्कि वास्तविक program जैसी चीज लिखने की कोशिश कर रही थीं
First programmer कहलाने की सीमाएँ
- यह कहना पूरी तरह accurate नहीं कि Lovelace ने “first program” लिखा या publish किया
- Menabrea ने Lovelace translation से एक साल पहले “diagrams of development” publish किए थे
- Babbage ने भी 20 से अधिक unpublished programs लिखे थे
- Program किसे माना जाए, इस पर बहस की गुंजाइश है
- Lovelace का published program उससे पहले publish हुए examples से बहुत आगे था
- Menabrea का सबसे लंबा program 11 operations का था
- Menabrea के examples में loop या branch नहीं था
- Lovelace के program में 25 operations और nested loops, यानी branching structure शामिल थे
- Menabrea ने माना कि machine पूरी होने पर कठिनाई card creation तक सीमित रह जाएगी, और cards केवल algebraic expressions का translation हैं, इसलिए simple notation से operators को execution सौंपना आसान होगा
- Babbage और Menabrea ने Analytical Engine को मुख्य रूप से अपनी रुचि वाली mathematical calculation problems पर लागू करने पर focus किया
- Lovelace ने देखा कि Analytical Engine, Babbage या Menabrea की कल्पना से अधिक काम कर सकती है, और समझा कि “card creation” कोई simple side task नहीं, बल्कि ऐसा programming task है जिसे अच्छा या खराब किया जा सकता है
1 टिप्पणियां
Hacker News की राय
किसी non-trivial program की असली निशानी यह है कि वह पहली कोशिश में काम नहीं करता
यह हैरान करने वाला है कि Babbage, एक साधारण इंजन बनाने के लिए ज़रूरी precision mass manufacturing तकनीक न होने से निराश होने के बाद, एक digit ज़्यादा जटिल नया system design कर बैठे और अधिक advanced manufacturing capability ढूँढने Italy तक गए
जब वह कुछ करने में अटकता, तो पहले अपने tools बनाता था; एक बार तो बहुत छोटे point size पर built-in font पसंद नहीं आया, इसलिए उसने अपना font खुद बना लिया
वह मेरे जानने वालों में सबसे अच्छा engineer था, लेकिन उसे rabbit hole में जाने से रोकने के लिए लगातार नज़र रखनी पड़ती थी
Tim Robinson ने भी कहा था, “अगर 1920s का Meccano 100 साल पहले होता, तो Babbage पूरी तरह सफल हो जाते,” और मुझे लगता है कि वे hardware में फेंके गए software व्यक्ति जैसे थे, जिनके ideas practical reality से आगे निकल गए थे
business और project planning की समझ की कमी के कारण scope घटा नहीं पाए या 10-digit precision छोड़ नहीं पाए; इसके अलावा वे लगातार बेहतर ideas सोचते और उनके पीछे rabbit hole में उतरते रहे, और young age में Difference Engine proposal भर से कई awards मिल जाने के कारण दशकों बाद भी छोड़ना उनके लिए कठिन रहा होगा
सरकार से उलझना भी इस त्रासदी का बड़ा पहलू था। aristocracy सरकार और राजनीति को नीचा समझकर उस पर भरोसा नहीं करती थी, lower class को सरकार से कभी खास मदद नहीं मिली इसलिए वे भी अविश्वासी थे, लेकिन Babbage उस middle class से थे जहाँ patriotic view of government बनना आसान था; लगता है वे अपना invention “राष्ट्र” को समर्पित करना और सरकार से उसका compensation पाना चाहते थे
वे Difference Engine पूरा नहीं कर पाए, लेकिन उन्होंने सरकार से पूछा कि क्या अतिरिक्त funding से वे बेहतर Analytical Engine बना सकते हैं; सरकार 20 साल तक indecisive रही। जब सरकार ने invention वापस करने की बात कही, तब भी उन्होंने मना कर दिया
शायद कई awards के असर से वे अपनी “smart person” identity से भी चिपके रहे; एक किस्सा है कि Faraday के साथ award judge करने का प्रस्ताव उन्होंने यह कहते हुए ठुकरा दिया कि वे अकेले judge होने चाहिए। ऐसे रवैये ने भी उन्हें practical execution के बजाय अव्यावहारिक genius-type ideas की ओर मोड़ा होगा
Sydney Padua की The Thrilling Adventures of Lovelace and Babbage बहुत well-researched किताब लगती है; main text मैंने ज़्यादा नहीं पढ़ा, लेकिन appendices ध्यान से पढ़े हैं और recommend करने लायक हैं
सच में शानदार लेख है। शुरुआत में यह प्रभावशाली लगा कि Lovelace ने computations को repeatable groups में organize करने के तरीके पर गहराई से सोचा और loops का आविष्कार किया, और यह समझा कि variables बदलते समय state को track करना ज़रूरी है, इसलिए उस बदलाव को दिखाने के लिए notation बनाया
programmer के नज़रिए से, Lovelace जो कर रही थीं वह आज software लिखने के experience से कितना मिलता-जुलता है, यह हैरान करता है; और Bernoulli numbers calculate करने के लिए design किया था, यह समझाने वाला विवरण भी उनके काम को समझने के लिए काफी detail में है
अगर वे आज जीवित होतीं, तो लगता है corridor के अंत में Rust में किसी समस्या से जूझ रही होतीं, और strongly static typed languages को बहुत पसंद करतीं
मुख्य बात यह है कि उन्होंने देखा कि Analytical Engine सिर्फ numbers पर नहीं, बल्कि abstract operations के science के संबंधों के रूप में व्यक्त की जा सकने वाली दूसरी चीज़ों पर भी काम कर सकता है; उदाहरण के लिए अगर harmony और composition के मूल संबंध इस तरह express किए जाएँ, तो किसी भी complexity और length का sophisticated music बनाया जा सकता है
वास्तविक programmable computers आने से एक सदी पहले, 1842 में, mechanical computer prototype के description भर से ऐसा सोचना जबरदस्त hacking था
https://en.wikipedia.org/wiki/Static_single-assignment_form#Benefits
आज भी यह modern techniques के करीब है, और उनके पास यह 180 साल पहले ही था
यह हिस्सा दिलचस्प है कि Paul Allen और Bill Gates ने Altair के लिए BASIC interpreter को actual Altair के बिना, Harvard computer पर Intel 8080 specs देखकर बनाए emulator से test किया, और जब पहली बार actual Altair के सामने चलाया तो वह सही चला
तो यहाँ असली छिपे हुए hero शायद वे Intel engineers हैं, जिन्होंने specs भर से बने emulator पर चलने वाला software actual hardware पर भी बिना समस्या चले, इतनी accurate specification लिखी
यह काम इसलिए था ताकि plotter के लिए 8080 firmware लिख रहा दूसरा programmer code debug कर सके; मुझे याद है उस emulator source की जड़ Intel के INTERP/8 8008 नाम की चीज़ में थी। online posts देखकर लगता है Allen और Gates ने भी वही इस्तेमाल किया था
मुझे सबसे शानदार हिस्सा वह actual work लगता है जो उन्होंने translation में जोड़े “notes” में किया था
संदर्भ: https://upload.wikimedia.org/wikipedia/commons/c/cf/Diagram_for_the_computation_of_Bernoulli_numbers.jpg
और https://en.wikipedia.org/wiki/Note_G
लेख में उनके काम को Python में port करने वाली यह सामग्री भी refer की गई है: https://enigmaticcode.wordpress.com/tag/bernoulli-numbers/
Lovelace के प्रोग्राम को C में पोर्ट करने वाला हिस्सा पढ़कर—कि मदद न करने वाले नामों वाले variables की भरमार को छोड़ दें तो वह इतना अजनबी नहीं लगता—मुझे लगा लेखक ने पक्का मेरे सहकर्मियों से कभी मुलाकात नहीं की
मैं कोई खास रूढ़िवादी नहीं था, लेकिन वह स्वाभाविक रूप से हर बार याद नहीं रख पाता था कि “butts” किस variable के लिए था, और अपने code की वजह से वह लगातार क्यों उलझता है, यह भी आखिर तक नहीं समझ पाया
मेरे पिता chemical engineer थे और उन्होंने FORTRAN में programming सीखी थी; उस समय variable names में 1 अक्षर और अधिकतम 2 अंक होने चाहिए थे। बाद में उन्होंने Basic सीखी, लेकिन code अब भी मानसिक रूप से FORTRAN ही था, इसलिए वह आदत बनी रही
शुरू में मुझे लगा सिर्फ मेरे पिता ऐसे हैं, लेकिन काफी बाद में Wall St में काम करते हुए जब Numerical Recipes code copy-paste करने वाले quants के साथ काम किया, तो C में भी बिल्कुल वही हाल देखा
Menabrea ने Analytical Engine को मुख्यतः “लंबी और सूखी calculations” को automate करके श्रेष्ठ वैज्ञानिकों की बौद्धिक क्षमता को ज्यादा उच्च-स्तरीय सोच में लगाने वाला tool माना था—यह देखकर मजेदार लगता है कि automation discourse कितना लंबे समय से चला आ रहा है
आज भी LLMs के बारे में बिल्कुल यही बात कही जाती है
सोच रहा हूँ क्या किसी ने Babbage के instruction set पर virtual machine बनाई है और Ada का program चलाकर देखा है
हालांकि लगता है Ada का program example के रूप में शामिल नहीं है, इसलिए शायद खुद input करना पड़ेगा
मजेदार बात यह है कि मेरे compiler class project में इसी emulator को target करने वाला C compiler बनाना था: https://github.com/Christopher-Chianelli/ccpa code भयानक है, सावधान
https://github.com/MarquisdeGeek/Ada-Origins
https://pairdebuggingwithlovelace.hashnode.dev/
जब यह article पोस्ट हुआ था, उस समय भी इस पर चर्चा हुई थी
What Did Ada Lovelace’s Program Actually Do? - https://news.ycombinator.com/item?id=17797003 - Aug 2018, 52 comments
उस समय 35 comments वाली चर्चा यहां है: https://news.ycombinator.com/item?id=10709730
थोड़ा अलग विषय है, लेकिन मैं सोच रहा था कि उस समय लोग उन्हें क्या कहकर बुलाते थे
उनका नाम Augusta Ada King था और वे Countess of Lovelace थीं; क्या तब भी title को छोटा करके surname की तरह बुलाना आम था, या यह हाल के समय में ऐसा होने लगा है, यह जानने की उत्सुकता है
William King-Noel के Earl of Lovelace बनने के बाद उन्हें “Lovelace” कहा जाता था, और social circles में उन्हें “Lady Lovelace” तथा official contexts में “Countess of Lovelace” कहा गया होगा
अच्छा लेख है। Ada किस अर्थ में innovative थीं और उन्हें recognition क्यों मिलना चाहिए, इस पर अब तक पढ़ी चीजों में यह सबसे स्पष्ट explanation था