4 पॉइंट द्वारा GN⁺ 2024-11-17 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • एक छात्र को गर्मियों में पढ़ने के लिए उधार दी गई किताब के बहाने Simon Dobson फिर से पुष्टि करते हैं कि SICP वह computer science किताब है जिसने उनके करियर और research interests पर सबसे गहरा असर डाला
  • Pascal-केंद्रित शुरुआती शिक्षा के विपरीत, यह किताब values, names, binding और control से शुरू करके दिखाती है कि programming क्या-क्या हो सकती है
  • lambda abstraction, higher-order computation, streams, lazy evaluation, interpreters और compilers, garbage collection, virtual memory, machine language, और domain-specific languages तक—सबको Scheme के भीतर जोड़ती है
  • इसका सबसे बड़ा प्रभाव complex systems को भाषाओं की कई परतों में गढ़ने वाले layered design और computer science को “क्या है” से ज्यादा “कैसे करना है” का विषय मानने वाले नजरिए में है
  • 1988 में खरीदी गई किताब 2010 में भी practical रूप से दोबारा पढ़ने लायक थी, और SICP computer science की लंबे समय तक टिकने वाली foundational book बनी हुई है

SICP से पहली मुलाकात

  • Simon Dobson ने एक छात्र को गर्मियों में पढ़ने के लिए Structure and Interpretation of Computer Programs उधार दी, और फिर उन्हें याद आया कि यह किताब उनके लिए पूरी computer science में सबसे बुनियादी रचनाओं में से एक के सबसे करीब है
  • इसका औपचारिक शीर्षक Hal Abelson और Jerry Sussman की Structure and Interpretation of Computer Programs है, जिसे MIT Press ने 1984 में प्रकाशित किया था और जिसे SICP भी कहा जाता है
  • किताब अब भी प्रकाशित हो रही है, और पूरी किताब online उपलब्ध है
  • Dobson ने Newcastle upon Tyne में अपनी पहली degree के दूसरे साल में अपना पहला programming course पूरा करने के बाद इसे recommended textbook के रूप में जाना
  • उस समय computer science में अपना रास्ता तलाश रहे Dobson के लिए SICP, Pascal से पहचानी जाने वाली “उस दौर की programming” नहीं, बल्कि programming के संभावित रूपों को दिखाने वाली किताब थी

Scheme के भीतर गढ़े गए concepts

  • SICP programming के basic elements—values, names, binding और control—से शुरू होकर विषयों की एक विस्तृत range तक फैलती है
    • lambda abstraction और higher-order computation
    • ऐसे complex data structures जिनमें computation शामिल हो
    • modularity, mutability
    • streams
    • lazy evaluation
    • interpreters और compilers बनाना
    • storage management, garbage collection, virtual memory
    • machine language
    • domain-specific languages
  • इसका scope हैरान कर देने जितना व्यापक है, लेकिन authors की writing और structure की वजह से इसमें consistency बनी रहती है
  • खास बात यह है कि सभी concepts को Scheme नाम के एक ही language framework के भीतर समझाया गया है, और पहले सीखी चीजों के आधार पर अगले concepts की परतें चढ़ाई जाती हैं

Language design के रूप में program design

  • SICP की दूसरी बड़ी प्रभावशाली विशेषता यह है कि Hal Abelson और Jerry Sussman हर चीज को language design की practice के रूप में देखते हैं
  • किताब complex systems को कई स्तरों की languages से बनाने वाले layered design पर जोर देती है
    • हर स्तर उन components को जोड़कर बनता है जिन्हें उस स्तर पर primitive माना जाता है
    • एक स्तर पर बनाए गए components अगले स्तर के primitive elements के रूप में इस्तेमाल होते हैं
    • हर स्तर की language में उस detail level के हिसाब से primitive elements, combination के तरीके और abstraction के तरीके होते हैं
  • hierarchical abstraction अपने-आप में computer scientists के लिए परिचित है, लेकिन यहां अहम फर्क यह नजरिया है कि हर layer programmable होनी चाहिए
  • इस दृष्टिकोण में layers सिर्फ जानकारी छिपाने का तरीका नहीं हैं, बल्कि computation और transformation से निपटने का साधन हैं
  • mainstream programming languages में ऐसी layering को language के अपने विस्तार में बदलना मुश्किल होता है
    • Java ऊपर से नीचे तक Java ही है; classes और libraries तो हैं, लेकिन नए control structures नहीं
    • किसी खास domain में dedicated language constructs उपयोगी हों, तब भी उन्हें language के भीतर आसानी से जोड़ना मुश्किल है
    • उल्टा, अगर किसी domain में कोई खास construct इस्तेमाल होने से रोकना चाहें, तो language के भीतर उसे हटाना भी संभव नहीं
    • Java-ME ने छोटे devices पर चलने के लिए कुछ features हटाए, लेकिन यह compiler दोबारा लिखे बिना संभव होने वाला तरीका नहीं था

“क्या है” से ज्यादा “कैसे करना है”

  • तीसरा अहम प्रभाव यह है कि SICP computer science वास्तव में किस चीज से जुड़ी है, इस पर कैसा नजरिया देती है
  • SICP computer revolution को सोचने के तरीके और विचारों को व्यक्त करने के तरीके की revolution के रूप में देखती है
  • किताब इसे procedural epistemology के रूप में समझाती है
    • अगर classical mathematics “क्या है” को precise ढंग से संभालने का framework देती है
    • तो computation “कैसे करना है” को precise ढंग से संभालने का framework देता है
  • Dobson ने यह नजरिया अपनाया है कि computer एक नए microscope जैसा है, जो मौजूदा approaches में मदद करने के साथ-साथ नई science के दरवाजे खोलता है
  • computer science का “कैसे करना है” वाला पहलू कई क्षेत्रों में फिर से दिखाई देता है
    • deployed phenomena को लगातार reflect करते हुए adapt कर सकने वाले sensor networks के behaviour का description
    • पूरे web से mined और combined बड़े पैमाने के data की interpretation
    • scientific methods और processes को automate करने के लिए उन्हें capture करना
  • ऐसे क्षेत्रों की richness packaged software की बजाय programming languages के जरिए integration को बढ़ावा देती है, और R जैसी languages से interfaces और structures को flexible और experimentation-friendly बनाए रखने में मदद करती है

पुरानी किताब अब भी क्यों पढ़ी जाती है

  • Dobson की किताब के अंदर September 1988 की purchase date लिखी थी, और 2010 के हिसाब से लगभग 22 साल पुरानी यह किताब अब भी relevant बनी हुई थी
  • वे मानते हैं कि SICP अपने उस दौर की लगभग इकलौती computer science किताब है जिसे सिर्फ historical interest के लिए नहीं, बल्कि usefully दोबारा पढ़ा जा सकता है
  • mathematics की किताबों में लंबे समय तक टिकने वाली सामग्री असामान्य नहीं है, लेकिन computer science में—जहां ideas तेजी से बदलते हैं और कई topics क्षणिक होते हैं—यह दुर्लभ बात है
  • SICP की सामग्री का लगभग पुराना न पड़ना दिखाता है कि इस किताब ने computer science के core concepts को अच्छी तरह पकड़ा है
  • इसी वजह से SICP उन गिनी-चुनी computer science किताबों में है जिन्हें दो या उससे ज्यादा बार पढ़ना worthwhile है, और physics में Feynman की Lectures on Physics की तरह इसे ऐसी किताब माना जाता है जिसने अपने क्षेत्र के सार को accessible रूप में distilled किया और समय की कसौटी पर खरी उतरी
  • 27 January 2024 के update में बताया गया है कि यह किताब Structure and interpretation of computer programs entry के रूप में annotated Lisp bibliography में भी शामिल है

1 टिप्पणियां

 
GN⁺ 2024-11-17
Hacker News की राय
  • SICP जैसी “classic” किताबें program design की बात करती हैं, लेकिन आजकल system design कहीं ज़्यादा महत्वपूर्ण skill लगती है
    distributed systems “computer science” में आते हैं या नहीं, पता नहीं, लेकिन असल में ये वे समस्याएँ हैं जिन्हें ज़्यादा बार हल करना पड़ता है
    systems को जितना हो सके सरल बनाता हूँ, observability tools से design की कमी वाली जगहें ढूँढता हूँ, और ज़रूरत पड़ने पर data structures या “computer science जैसे” समाधान निकालता हूँ
    ज़्यादातर मामलों में Big-O notation और runtime complexity महत्वपूर्ण नहीं होते, और arrays व तेज़ CPU से कई समस्याएँ हल हो जाती हैं
    performance problem आने पर भी पहले profiling से bottleneck ढूँढना चाहिए
    computer science यह अच्छी तरह नहीं सिखाती कि CPU का memory cache कैसे काम करता है
    कोई शानदार graph algorithm runtime complexity में बेहतर हो सकता है, लेकिन CPU cache को बिगाड़कर अच्छे cache utilization वाले array से धीमा हो सकता है
    असल में ज़्यादा आम समस्याएँ fault tolerance, distributed locks और queues की correctness, और system scalability से जुड़ी होती हैं
    मेरा computer/electrical engineering background है, इसलिए bias हो सकता है

    • system design करने के लिए implementation का नजरिया होना चाहिए, इसलिए value chain में ऊपर जाकर design करने पर भी नीचे के अनुभव को skip नहीं किया जा सकता
      CPU memory cache मैंने 30 साल पहले CS undergrad के पहले semester में Hennessy और Patterson की किताब से सीखा था, और जहाँ तक मुझे पता है वह आज भी इस्तेमाल होती है
      fault tolerance, distributed locks और queues की correctness, system scalability भी undergrad CS में पढ़ाए गए थे, और कोई खास computer engineering/electrical engineering background नहीं था
    • CS और industry में software development थोड़ा अलग हो गए हैं
      अभी भी frameworks, database engines, version control tools बनाने का काम है, और ऐसे काम रोज़ गहरी CS knowledge जैसे algorithms और data structures मांगते हैं
      लेकिन ऐसी jobs पहले से कम हो गई हैं, और apps के लिए खुद DB engine implement करने के बजाय लोग अक्सर Postgres इस्तेमाल करते हैं
      ज़्यादातर काम business logic implementation है, और database internally कैसे काम करता है यह जानने से बेहतर परिणाम मिलते हैं, लेकिन indexes disk पर कैसे store होते हैं यह जाने बिना भी बहुत सा working software बनाया जा सकता है
      कई CS graduates यह भ्रम रखते हैं कि उनका काम framework लिखना है, जबकि असल में उन्हें existing frameworks इस्तेमाल करने और business logic implement करने के साथ अपने CS background से उन frameworks को गहराई से समझना होता है
    • traditionally database field का बड़ा focus उस समय के algorithmic problems हल करने पर रहा है जब data memory में पूरा नहीं समाता और बहुत बड़ा होता है
      data disk पर “pages” के रूप में होता है, और RAM में fixed number of “page slots” होते हैं
      disk और RAM के बीच pages move करना धीमा होता है, इसलिए इसे जितना हो सके कम करना पड़ता है
      इसलिए मामूली दिखने वाली problems भी interesting हो जाती हैं। classic computer science में “join” नाम की अलग concept नहीं है, क्योंकि वह इतना complex नहीं कि उसे नाम दिया जाए
      algorithm research को किसी pure essence की तरह सोचना आसान है, लेकिन algorithm efficiency का मतलब केवल खास data और hardware context में ही माना जा सकता है
      इसलिए काम interesting हो जाता है, और हर जगह सिर्फ libraries या cookbook-style solutions लगा देना काफी नहीं होता, इसलिए algorithm expertise अब भी useful है
    • बात सही है, लेकिन मेरा मानना है कि juniors ही नहीं, experienced programmers भी tactical-level coding में अक्सर struggle करते हैं
      अभी मैं एक छोटे change के लिए जिस component पर काम कर रहा हूँ, उससे परेशान हूँ; उसमें अनावश्यक रूप से बहुत state है और वह दो abstractions को एक साथ संभालता है
      files process करते हुए वह state storage के लिए file system और database दोनों इस्तेमाल करता है, और design इतना messy है कि हैरानी हुई
      पुराने तरीके की तरह और जोड़कर इसे और मुश्किल बनाने से बचने में मैंने कई दिन लगाए
      pull request culture ऐसा लगता है जैसे actual code पर गहराई से सोचने का समय दिए बिना कोई भी कचरा approve करा देता है
      चाहता हूँ कि in-person code reviews वापस आएँ
    • जानना चाहूँगा कि क्या आपने Chris Hanson और Gerald Jay Sussman की Software Design for Flexibility: How to Avoid Programming Yourself into a Corner देखी है
      2021 में आई किताब
  • लेख की मुफ़्त कॉपी का लिंक टूटा हुआ है
    https://mitp-content-server.mit.edu/books/content/sectbyfn/b...
    https://web.mit.edu/6.001/6.037/sicp.pdf
    आज तक मैंने आधिकारिक PDF वर्शन नहीं देखा था
    2001 के आसपास सिर्फ़ HTML वर्शन मुफ़्त था, और किसी ने उसे TeXinfo में कन्वर्ट किया था: https://www.neilvandyke.org/sicp-texi/
    अगर आप अभी SICP के साथ चलना चाहते हैं, तो MIT Scheme या DrRacket में कोड चला सकते हैं: https://www.neilvandyke.org/racket/sicp/

    • MIT Scheme आज़माने वालों के लिए: मौजूदा मेंटेनर अब .dmg उपलब्ध नहीं कराते, लेकिन x86_64 वर्शन MIT Scheme डाउनलोड करके build किया जा सकता है
      मौजूदा रिलीज़ (v12.1) Intel CPU वाले Sequoia चला रहे Mac पर, या Rosetta के ज़रिए Apple silicon पर चलती है
      हालांकि native code compiler थोड़ा टूटा हुआ है, और SICP के लिए शायद उसकी ज़रूरत नहीं पड़ेगी
      Monterey से पहले वाले macOS पर यह काम करता था, ऐसा लगता है, इसलिए हो सकता है Apple द्वारा दी जाने वाली dependency बदली हो, लेकिन मैंने इसे track नहीं किया
      अगर MIT Scheme अनिवार्य नहीं है और आप compilation की झंझट नहीं चाहते, तो Racket बेहतर विकल्प हो सकता है
    • एक बात बतौर संदर्भ: मैं Racket के साथ आगे बढ़ने की सलाह दूंगा
      मेरी जानकारी में इसमें एक explicit SICP mode है
      मैंने GNU Guile के साथ किया था, लेकिन Guile और MIT Scheme के बीच छोटी-मोटी syntax differences थीं, जिससे काफ़ी झंझट हुई
    • अगर browser में पढ़ना चाहते हैं, तो मुझे याद है कि TeXinfo वर्शन ही अच्छे दिखने वाले HTML5 वर्शन का source था
      MIT original से formatting बेहतर है: https://sarabander.github.io/sicp/
    • यह जान लेना ज़रूरी है कि अध्याय 2 की “picture language” 2024 के MIT Scheme में supported नहीं है
      पहले एक package था, लेकिन करीब 20 साल से उसका maintenance बंद पड़ा है
      वहीं DrRacket में उन problems को हल करने के लिए dedicated package मौजूद है
    • DrRacket में SICP और HTDP educational packs के रूप में शामिल हैं
  • Abelson और Sussman को इस किताब की सामग्री पढ़ाते हुए 1986 की recorded lectures देख सकते हैं
    कई layers में abstraction बनाने और उन्हें बांधने के तरीके की उनकी व्याख्या आज भी मेरे लिए निजी तौर पर और mentoring में उपयोगी है
    वीडियो में यह lesson 3A, 1:07:55 पर है
    https://m.youtube.com/playlist?list=PLE18841CABEA24090

    • Kabbalah वाला joke हर बार हंसाता है
    • ऐसे वीडियो देखकर अजीब लगता है कि इन लोगों को बिल्कुल अंदाज़ा नहीं था कि भविष्य में क्या आने वाला है
  • The Elements of Programming Style तीन बार पढ़ने लायक है, और मैंने उससे कहीं ज़्यादा बार पढ़कर लाभ लिया है
    अगर रुचि हो तो 2010 में लिखा मेरा review है: https://reprog.wordpress.com/2010/03/06/programming-books-pa...

    • मुझे लगा था कि बात Stepanov और McJones की Elements of Programming की हो रही है, और सच कहूं तो उस किताब के लिए भी मैं यही recommendation और assessment दे सकता हूं
      https://elementsofprogramming.com/
  • SICP में मेरी सबसे पसंदीदा और कई सालों से याद रहने वाली बात wishful programming का विचार है
    यानी ऊपर से नीचे की ओर कुछ बनाना, यह मानकर कि low-level routines पहले से मौजूद हैं
    फिर वास्तव में उन low-level routines को बनाते हुए नीचे तक जाना
    मेरे हिसाब से यह सोच test-driven development के साथ बहुत अच्छी तरह फिट बैठती है
    जिस functionality की इच्छा है, उसके लिए पहले tests लिखना, और फिर उस इच्छा को पूरा करने जाना
    ज़्यादातर developers नीचे से ऊपर बनाते हैं, और अंत में उनके पास कुछ ऐसा आ जाता है जिसे कोई चाहता ही नहीं था

    • ऐसा करने की वजह performance और naturalness की उम्मीद होती है
      आप गलती से किसी ऐसी चीज़ की इच्छा कर सकते हैं जिसकी असली प्रकृति आपको अभी पता नहीं है, और फिर नींव में एक नाज़ुक गड़बड़झाला बन जाता है
      आम तौर पर ऐसा ही होता है, क्योंकि चीज़ों की algorithmic प्रकृति शायद ही कभी intuitive होती है
      नीचे से शुरू करना “काश जादू मौजूद होता” से शुरू करने के बजाय उन quarks से शुरू करने जैसा है जो आपके पास वास्तव में हैं
      जादू नहीं होता, और जब आप नीचे पहुंचते हैं तो जादुई कणों की जगह quarks मिलते हैं, और इस प्रक्रिया में आप वे context clues भी खो देते हैं जो दो physics के बीच translate करने में मदद करते
      दोनों approaches उपयोगी हैं। गहरे problems हल करने के लिए कभी-कभी साहस के साथ इच्छा करनी पड़ती है
      लेकिन व्यक्तिगत रूप से मैं magic को top-level के ठीक नीचे वाली layer में रखना पसंद करता हूं
      यानी नीचे से ऊपर बनाकर, business logic से ठीक पहले business language में और उससे बाहर translate करने वाली convenience magic layer बनाना
      इससे उसे adjust किया जा सकता है, और नीचे तक उलझी हुई गड़बड़ी नहीं बनती
    • Dr. Donald Knuth ने भी TeX लिखते समय लगभग ऐसा ही approach इस्तेमाल किया था
      पहले उचित लगने वाला formatting/tagging तरीका लिखा, फिर markup के लिए उचित programming तरीका—इसलिए macros—सोचा, और फिर implementation में गए
      OpenSCAD में G-code को model करने वाली library बनाने के मेरे काम में भी मैं मिलता-जुलता तरीका आज़मा रहा हूं
      हाल ही में उसे “pure” OpenPythonSCAD में फिर से लिखा है, उम्मीद है कि यह उपयोगी बन पाएगा
    • Smalltalk दुनिया debugger के अंदर coding करने के तरीके से इस approach को अच्छी तरह support करती है
      Pharo आज़माना चाहिए
  • SICP कंप्यूटर साइंस पढ़ते समय पहली किताब के रूप में पढ़ने के लिए सबसे अच्छी किताब है
    कई वर्षों तक शौकिया तौर पर प्रोग्रामिंग करने, structured programming की किताबों और Pascal से Common LISP तक कई भाषाओं से परिचय के बाद, undergraduate कंप्यूटर साइंस कोर्स में Abelson & Sussman का इस्तेमाल किया, और सचमुच आंखें खुल गईं
    Scheme की सरलता, सुंदरता और इंटरैक्टिवनेस दिखाते हुए यह सिखाती है कि कंप्यूटर साइंस कई तरह के abstractions को परत-दर-परत खड़ा करने का काम है
    procedural abstraction और data abstraction से शुरू करके, खुद domain-specific language परिभाषित करने और उसका compiler implement करने तक, और फिर software के भीतर नया hardware परिभाषित करने तक जाती है
    सब कुछ इतना स्वाभाविक लगता है, और केवल सच्चा उस्ताद ही उसे ऐसा दिखा सकता है
    हालांकि 1st edition या ज्यादा नई edition नहीं, बल्कि 2nd edition खरीदनी चाहिए
    नई edition में Scheme की जगह Python इस्तेमाल हुआ है, और वह खास नहीं है

  • मैं सचमुच SICP को पसंद करना चाहता था, लेकिन Lisp आड़े आ गया
    Haskell और Standard ML मुझे पसंद हैं
    जानना चाहता हूं कि किसी और का भी ऐसा अनुभव रहा है या नहीं
    अगर SICP जैसी ही भावना वाली, लेकिन किसी दूसरी भाषा को माध्यम बनाकर लिखी किताब हो तो दिलचस्प होगा
    JavaScript में SICP करना नहीं चाहता

    • 1987 के लेख A Critique of Abelson and Sussman or Why Calculating is Better than Scheming में आपकी दिलचस्पी हो सकती है: https://dl.acm.org/doi/10.1145/24697.24706
      लेखक Scheme के विकल्प के रूप में KRC या Miranda इस्तेमाल करने की बात करता है
      KRC के बारे में ज्यादा नहीं जानता, लेकिन Miranda एक statically typed functional programming language है जिसने Haskell को प्रभावित किया
    • SICP Lisp के बारे में किताब नहीं है, लेकिन यह ऐसे अहम concepts दिखाने के लिए Lisp की विशिष्ट खूबियों का उपयोग करती है जिन्हें दूसरी भाषाओं में आसानी से दोहराना मुश्किल है
      Scheme या Lisp का इस्तेमाल किए बिना SICP जैसी कोई किताब, SICP से बिल्कुल अलग होगी, या कम से कम वही चीजें नहीं सिखा पाएगी
      मेरे अनुभव में Haskell और ML, Scheme से कहीं ज्यादा समझने में कठिन थे, इसलिए जानना चाहूंगा कि कौन-सी बात कठिन लगी
    • मैं सचमुच SICP को पसंद करना चाहता था, और अगर 15 साल पहले पढ़ा होता तो शायद पसंद भी करता
      पिछले महीने पढ़ना शुरू किया, लेकिन लगा कि यह बहुत ज्यादा फैलाव में जाती है
      कई दिलचस्प mathematical principles को बहुत तेजी से छूती है, और जैसे ही चीजें रोचक होने लगती हैं, अगले विषय पर चली जाती है
      दूसरे शब्दों में, यह बहुत सतही लगती है
      पीछे मुड़कर देखूं तो SICP से निकले lectures या documents मैं पहले ही काफी देख चुका था, इसलिए हर विषय के आते ही “फिर वही” लगना भी मददगार नहीं था
    • वह भावना समझता हूं। Lisp ने मुझे दूर धकेला, और वजह यह थी कि मैं पर्याप्त smart नहीं था
      फिर भी किसी तरह अंत तक किया, और Lisp संभालने लायक smart न होने के कारण उल्टे मैंने बहुत ज्यादा सीखा
      code पढ़ने में इतना समय लगा कि लगता है, अगर कोई परिचित भाषा होती तो उससे जितना सीखता, उससे ज्यादा सीखा
      SICP का Python version भी है
      मैंने खुद उसे अंत तक नहीं किया, बस सरसरी तौर पर देखा है, इसलिए recommendation नहीं है, लेकिन इसके मौजूद होने के सबूत के तौर पर link छोड़ रहा हूं
      https://wizardforcel.gitbooks.io/sicp-in-python/content/0.ht...
    • Functional Programming in Scala, जिसे Red Book of Scala भी कहा जाता है, मुझे ऐसी किताब लगती है जो typed language इस्तेमाल करते हुए भी SICP जैसी सोच सिखाती है
      मेरी bookshelf में भी दोनों किताबें साथ-साथ रखी हैं, और यह निश्चित रूप से पढ़ने लायक है
  • दूसरी बार पढ़ते समय मैंने footnotes और references में गहराई से झांका, और वहां भी एक सुंदर बड़ा संसार था
    अगर मेरी याद सही है, तो Sussman और उनकी team का एक paper है जिसमें उन्होंने celestial bodies की properties, यानी trajectories की गणना के लिए custom programmable processor design किया था
    हमेशा की तरह, दिमाग चकरा देने वाली सामग्री है

  • SICP ने मुझे शुरुआती दौर में ही यह समझा दिया कि programming models कई तरह के होते हैं, जबकि undergraduate में मैंने सीमित संख्या के models ही सीखे थे
    यह उन किताबों में से एक थी जिसने यह एहसास दिया कि किसी भी language, library, या framework documentation को पढ़ते समय मैं दिशा पकड़ सकता हूं

    • university में लिए गए सबसे अच्छे programming classes में से एक comparative programming languages course था, जिसमें कई languages को करीब 2-2 हफ्ते पढ़ाया गया
  • SICP के साथ मैं पूरी The Little * series को भी ऐसी सामग्री मानता हूं जिसे दो या उससे अधिक बार पढ़ना चाहिए
    Types and Programming Languages भी अच्छी है
    मेरे काम के लिए यह लागू की जा सकने वाली कंप्यूटर साइंस है, लेकिन सिर्फ पढ़ने से काम नहीं चलेगा, implement भी करना होगा
    दोहराए बिना कुछ हिस्सा भूल जाता हूं
    व्यक्तिगत रूप से शायद इसलिए भी कि मैं उस व्यक्ति को जानता और सम्मान करता था, लेकिन Dijkstra की किताबें और papers मैं काफी बार दोबारा पढ़ता हूं
    अब उन्हें सीधे लागू करना मुश्किल है, लेकिन दिमाग के लिए अच्छा है, और मेरी नजर में वे बेहतरीन लेखक थे