-
किताब का परिचय
- एक ऐसी किताब है जिसे एक छात्र को गर्मियों में पढ़ने के लिए उधार दिया गया था
- यह किताब कंप्यूटर साइंस की सबसे महत्वपूर्ण कृतियों में से एक है और इसने व्यक्ति के करियर और शोध पर गहरा प्रभाव डाला
- किताब का शीर्षक Hal Abelson और Jerry Sussman की Structure and Interpretation of Computer Programs (SICP) है
-
किताब का महत्व
- कंप्यूटर साइंस से पहली बार परिचय होने पर यह किताब गहरा प्रभाव डालती है
- यह प्रोग्रामिंग के बुनियादी तत्वों का परिचय कराती है और कई तरह के विषयों का अन्वेषण करती है
- इन विषयों में lambda abstraction, उच्च-स्तरीय computation, जटिल data structures, modularity, streams, lazy evaluation, interpreter और compiler का निर्माण, तथा storage management शामिल हैं
-
भाषा डिज़ाइन के प्रति दृष्टिकोण
- Hal और Jerry हर चीज़ को language design के अभ्यास के रूप में देखते हैं
- यह जटिल systems को layered design के ज़रिए संरचित करने की अवधारणा पेश करती है
- हर layer उन हिस्सों को जोड़कर बनाई जाती है जिन्हें उस layer में primitive माना जाता है
-
कंप्यूटर साइंस का सार
- कंप्यूटर क्रांति सोचने के तरीके और अभिव्यक्ति के तरीके की क्रांति है
- यह procedural epistemology की अवधारणा पेश करती है, यानी आदेशात्मक दृष्टिकोण से ज्ञान की संरचना का अध्ययन
- कंप्यूटर साइंस "कैसे" के लिए एक framework प्रदान करती है
-
किताब की स्थायी प्रासंगिकता
- 1988 में खरीदी गई यह किताब आज भी प्रासंगिक है
- यह कंप्यूटर साइंस की उन कुछ किताबों में से एक है जिनकी कीमत समय बीतने पर भी बनी रहती है
- Feynman की Lectures on Physics की तरह, यह कंप्यूटर साइंस के सार को बहुत अच्छी तरह समेटती है
-
अपडेट
- 27 जनवरी 2024 को अपडेट किया गया
- यह किताब annotated Lisp bibliography में भी शामिल है
1 टिप्पणियां
Hacker News राय
Abelson और Sussman के 1986 के lecture videos से किताब की सामग्री सीखी जा सकती है। abstraction की layering के बारे में उनकी व्याख्या व्यक्तिगत रूप से और mentor के रूप में उपयोगी लगती है
SICP जैसे क्लासिक टेक्स्ट program design के बारे में बात करते हैं, लेकिन आजकल मुझे लगता है कि system design ज़्यादा महत्वपूर्ण है। पता नहीं distributed systems computer science का हिस्सा हैं या नहीं, लेकिन यह एक अधिक सामान्य समस्या है जिसे हल करना होता है। सिस्टम को जितना संभव हो उतना सरल लिखो, observability tools का उपयोग करके design की कमियाँ पहचानो, फिर data structures या दूसरे computer science तरीकों से समस्या हल करो। ज़्यादातर मामलों में Big-O notation और runtime complexity महत्वपूर्ण नहीं होते, और arrays तथा तेज CPU से अधिकतर समस्याएँ हल हो सकती हैं। जब runtime समस्या हो, तो program को profile करके hotspots खोजने चाहिए। computer science यह नहीं सिखाती कि CPU memory caching कैसे काम करती है। कोई शानदार graph algorithm अच्छी runtime complexity रख सकता है, लेकिन CPU cache को पूरी तरह बिगाड़ सकता है, जबकि arrays इस्तेमाल करके काम और तेज़ हो सकता था। अधिक सामान्य समस्याएँ fault tolerance, distributed locks और queues की correctness, और system scalability हैं। हो सकता है कि computer/electrical engineering background होने की वजह से मेरा नज़रिया पक्षपाती हो
मुफ्त प्रति का लिंक टूटा हुआ है। लगभग 2001 के आसपास सिर्फ HTML version मुफ़्त उपलब्ध था, और किसी ने उसे TeXinfo में बदल दिया था। अगर आज SICP पढ़ना चाहते हैं, तो MIT Scheme या DrRacket में code चला सकते हैं
"The Elements of Programming Style" तीन बार पढ़ने लायक है, और मैंने उसे उससे भी ज़्यादा बार पढ़कर बहुत लाभ पाया है। 2010 की review देखी जा सकती है
मैं SICP को पसंद करना चाहता था, लेकिन Lisp मुश्किल लगी। मुझे Haskell और Standard ML पसंद हैं। जानना चाहता हूँ कि क्या दूसरों का अनुभव भी ऐसा ही रहा है। SICP जैसी भावना वाली किताब किसी दूसरी भाषा में पढ़ना दिलचस्प हो सकता है। मैं SICP को JavaScript में नहीं करना चाहूँगा
"Software Design for Flexibility: How to Avoid Programming Yourself into a Corner" के बारे में लोगों की राय जानना चाहता हूँ
SICP ने यह समझने में मदद की कि programming के कई अलग-अलग मॉडल होते हैं। यह किताब languages, libraries, और frameworks के documentation को पढ़ने और दिशा समझने में मदद करती है
मैं 25 साल से programming कर रहा हूँ और लगभग 10 साल से यह किताब मेरे पास है। हाल ही में Dr. Racket से शुरू किया। Dr. Racket की अच्छी बात यह है कि variable पर mouse ले जाने से code के दूसरे हिस्सों से उसका संबंध visually दिख जाता है। लेकिन यह VS Code नहीं है, यही बात थोड़ी खली। इसलिए मैंने ऐसा environment तैयार किया जिसमें VS Code (असल में Cursor) का उपयोग करके exercises हल कर सकूँ। LLM integration शानदार है; मैं code और अपनी लिखी narrative दे सकता हूँ और feedback माँग सकता हूँ। exercises में थोड़ा आगे बढ़ा, लेकिन code transformations, अपने लिखे जवाब, और LLM से मिले feedback को एक static site में बदल दिया। समय बिताने का यह मज़ेदार तरीका था। LLM की मदद के बिना मैं SICP को पूरी तरह नहीं समझ पाता, लेकिन exercises में LLM को integrate करने के तरीके देखना दिलचस्प है
दूसरी बार पढ़ते समय मैंने footnotes और bibliography को खोजना शुरू किया, और तब पता चला कि वहाँ एक सुंदर दुनिया है। Sussman और उनकी team का एक paper है जिसमें उन्होंने खगोलीय पिंडों के गुणों की गणना करने के लिए एक custom programmable processor डिज़ाइन किया था। हमेशा हैरानी होती है
मूल संस्करण और JavaScript संस्करण के लिंक दिए गए हैं