2 पॉइंट द्वारा GN⁺ 2024-12-17 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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)/2 formula पाया
    • Archimedes को 1² + 2² + 3² + ... + n² जैसे sums में रुचि थी, और उन्होंने geometrically interpret की जा सकने वाली solution छोड़ी
    • Aryabhata ने 499 में cube-sum formula सहित Aryabhatiya प्रकाशित की
  • अधिक 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 और B1A1 calculate किए जाते हैं
    • इसके बाद दो बार repeat होने वाले loop में जाकर B3A3 और B5A5 calculate किए जाते हैं
    • हर product calculate करने के बाद उसे पिछले products से जोड़कर अंत में total sum प्राप्त किया जाता है

Loops, variable state, और पुराना bug

  • C translation Lovelace program की foresight अच्छी तरह दिखाता है
    • original program में बिल्कुल while loop नहीं था, लेकिन Lovelace ने operation groups बनाए और notes में specify किया कि उन्हें कब repeat करना है
    • C translation में दो while loops हैं, जिनमें एक दूसरे के अंदर nested है
    • original और C translation का v10 हर repetition में घटने वाले counter variable की तरह काम करता है
  • 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 थी
  • 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 टिप्पणियां

 
GN⁺ 2024-12-17
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 में जाने से रोकने के लिए लगातार नज़र रखनी पड़ती थी
    • Babbage/Lovelace history के लिए +1, लेकिन भले ही दोनों बातें अलग-अलग सही हों, यह कहना मुश्किल है कि precision machining की कमी के कारण Babbage ने ज़्यादा complex system और Italy जाने को “सबसे अच्छा रास्ता” चुना
      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 करने लायक हैं
    • “non-trivial program पहली कोशिश में काम नहीं करता” वाली बात सच नहीं है
  • सच में शानदार लेख है। शुरुआत में यह प्रभावशाली लगा कि 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 को बहुत पसंद करतीं

    • Ada को programming techniques के लिए जितना भी credit मिलना चाहिए, सबसे ज़्यादा prominent हमेशा उनकी computation की big picture देखने की क्षमता लगती है
      मुख्य बात यह है कि उन्होंने देखा कि Analytical Engine सिर्फ numbers पर नहीं, बल्कि abstract operations के science के संबंधों के रूप में व्यक्त की जा सकने वाली दूसरी चीज़ों पर भी काम कर सकता है; उदाहरण के लिए अगर harmony और composition के मूल संबंध इस तरह express किए जाएँ, तो किसी भी complexity और length का sophisticated music बनाया जा सकता है
      वास्तविक programmable computers आने से एक सदी पहले, 1842 में, mechanical computer prototype के description भर से ऐसा सोचना जबरदस्त hacking था
    • variables बदलते समय state track करने के लिए notation static single-assignment form से बहुत मिलता-जुलता दिखा, इसलिए खास तौर पर ध्यान खींचा
      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 लिखी

    • 1976 में अपनी पहली commercial programming job में, Fortran में लिखे 8008 emulator को Data General minicomputer पर 8080 emulator की तरह चलने के लिए बदला था
      यह काम इसलिए था ताकि 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/

    • लेख का आधा हिस्सा Note A और Note G के बारे में है
  • Lovelace के प्रोग्राम को C में पोर्ट करने वाला हिस्सा पढ़कर—कि मदद न करने वाले नामों वाले variables की भरमार को छोड़ दें तो वह इतना अजनबी नहीं लगता—मुझे लगा लेखक ने पक्का मेरे सहकर्मियों से कभी मुलाकात नहीं की

    • हाई स्कूल की programming class में मेरा project partner variables के नाम जो भी सबसे भद्दे और अश्लील शब्द दिमाग में आते, उनसे रखता था, यह याद आ गया
      मैं कोई खास रूढ़िवादी नहीं था, लेकिन वह स्वाभाविक रूप से हर बार याद नहीं रख पाता था कि “butts” किस variable के लिए था, और अपने code की वजह से वह लगातार क्यों उलझता है, यह भी आखिर तक नहीं समझ पाया
    • या फिर लगता है उसने programming करने वाले mathematicians, physicists और engineers के साथ कभी काम नहीं किया। वह वाक्य देखते ही मैंने सोचा, “typical quant
      मेरे पिता 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 के बारे में बिल्कुल यही बात कही जाती है

    • tool के रूप में computer को consumer device से अलग करने वाली मुख्य बात आखिरकार “लंबी और सूखी calculations” की automation ही लगती है
  • सोच रहा हूँ क्या किसी ने Babbage के instruction set पर virtual machine बनाई है और Ada का program चलाकर देखा है

    • John Walker ने Babbage के instruction set के लिए virtual machine बनाई थी और web emulator भी है: https://fourmilab.ch/babbage/emulator.html
      हालांकि लगता है Ada का program example के रूप में शामिल नहीं है, इसलिए शायद खुद input करना पड़ेगा
      मजेदार बात यह है कि मेरे compiler class project में इसी emulator को target करने वाला C compiler बनाना था: https://github.com/Christopher-Chianelli/ccpa code भयानक है, सावधान
    • ठीक-ठीक virtual machine तो नहीं, लेकिन इसमें उनके program को emulate किया गया है
      https://github.com/MarquisdeGeek/Ada-Origins
    • एक blog series है जिसमें उनके program का सीधा C translation करके उसे modern computer पर चलाया गया है
      https://pairdebuggingwithlovelace.hashnode.dev/
  • जब यह article पोस्ट हुआ था, उस समय भी इस पर चर्चा हुई थी
    What Did Ada Lovelace’s Program Actually Do? - https://news.ycombinator.com/item?id=17797003 - Aug 2018, 52 comments

  • थोड़ा अलग विषय है, लेकिन मैं सोच रहा था कि उस समय लोग उन्हें क्या कहकर बुलाते थे
    उनका नाम Augusta Ada King था और वे Countess of Lovelace थीं; क्या तब भी title को छोटा करके surname की तरह बुलाना आम था, या यह हाल के समय में ऐसा होने लगा है, यह जानने की उत्सुकता है

    • title holder Earl of Lovelace के मामले में आम तौर पर सिर्फ स्थान-नाम से बुलाने की परंपरा होती है
      William King-Noel के Earl of Lovelace बनने के बाद उन्हें “Lovelace” कहा जाता था, और social circles में उन्हें “Lady Lovelace” तथा official contexts में “Countess of Lovelace” कहा गया होगा
  • अच्छा लेख है। Ada किस अर्थ में innovative थीं और उन्हें recognition क्यों मिलना चाहिए, इस पर अब तक पढ़ी चीजों में यह सबसे स्पष्ट explanation था