2 पॉइंट द्वारा GN⁺ 2024-07-11 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Brian Kernighan ने Rob Pike के साथ लिखी The Practice of Programming को 1999 के उस दौर की किताब के रूप में याद किया, जब internet, Python, Perl और Java तेज़ी से फैल रहे थे, और जिसका उद्देश्य था “प्रोग्राम को पेशेवर ढंग से अच्छी तरह कैसे लिखा जाए”
  • कुछ उदाहरण समय के साथ पुराने हो गए हैं, लेकिन style, debugging और लिखने का दृष्टिकोण जैसे सिद्धांत भाषा और environment बदलने पर भी लागू किए जा सकते हैं
  • CSV parsing आज भी गड़बड़ है और उसकी spec भी पूरी तरह स्पष्ट नहीं है; pandas शक्तिशाली है, लेकिन भारी है और abstraction का स्तर ऊँचा है, इसलिए कभी-कभी साधारण Python code बेहतर होता है
  • Bell Labs एक ऐसा research environment था जहाँ long-term thinking, बेहतरीन सहकर्मी, और product/revenue pressure कम होने की वजह से Unix, yacc और document preparation tools जैसे काम संभव हो पाए
  • large language models 2022 के नवंबर के बाद अचानक बड़ा असर डालने वाली तकनीक बन गए; Claude ने spaCy से जुड़ा Python code लगभग सही बना दिया, जो प्रोग्रामरों के काम करने के तरीके में बदलाव का संकेत देता है

1999 का programming environment और किताब का लक्ष्य

  • The Practice of Programming Kernighan और Rob Pike की पहले की सह-लिखित किताब The Unix Programming Environment के लगभग 15 साल बाद आई थी
  • किताब का लक्ष्य था “प्रोग्राम वास्तव में कैसे लिखे जाते हैं” और “उन्हें प्रभावी और पेशेवर तरीके से कैसे लिखा जाए” पर बात करना
  • 1999 के आसपास का computing environment आज से काफ़ी अलग था
    • internet आम लोगों के लिए 1995~1996 के आसपास उभरी अपेक्षाकृत नई चीज़ था
    • Python अपेक्षाकृत नई भाषा थी, Perl अब भी मजबूत था, और Java भी लोकप्रिय था
  • ठोस उदाहरण आज के पाठकों के लिए कम सीधे प्रासंगिक लग सकते हैं, लेकिन सामान्य सिद्धांतों को दूसरे environments में ले जाया जा सकता है
  • प्रस्तुतकर्ताओं का मानना था कि style guide और debugging वाला अध्याय आज भी खास तौर पर प्रासंगिक है, और उन्हें यह बात प्रभावशाली लगी कि “bug” शब्द Grace Hopper की Mark computer वाली कहानी से पहले Thomas Edison और phonograph के संदर्भ में भी इस्तेमाल हुआ था

CSV, pandas, memory और abstraction

  • Kernighan ने किताब के CSV parser उदाहरण का ज़िक्र करते हुए कहा कि आज भी कोई अच्छा CSV parser नहीं है
    • पिछले summer में awk में CSV सुविधा जोड़ने के लिए उन्होंने “एक सही CSV parser” लिखने में कई हफ्तों से लेकर लगभग एक महीना लगाया
    • उनका मानना है कि CSV spec पूरी तरह स्पष्ट नहीं है और एक अर्थ में पूरी तरह standardized भी नहीं है
  • pandas को शक्तिशाली लेकिन भारी tool माना गया
    • कई मामलों में pandas के implicit iteration और selection mechanism को समझने से बेहतर Python सीधे लिखना आसान पड़ता है
    • प्रस्तुतकर्ता ने कहा कि machine learning और data science के काम में pandas अक्सर चुना जाता है, लेकिन जहाँ execution performance महत्वपूर्ण हो वहाँ वे सरल approach पर भी विचार करते हैं
  • उनका मानना है कि memory management अब बहुत-सी programming में ऐसा क्षेत्र बन गया है जिस पर अक्सर अलग से ध्यान नहीं देना पड़ता
    • C में memory को सीधे manage करना पड़ता है और यह बहुत कठिन है
    • C++ में भी यह संभव है, लेकिन उसे सही ढंग से संभालने की techniques सीखना कठिन है
    • Python में यह ज़्यादातर “जादू की तरह” काम करता है
  • बड़े abstractions हमेशा समस्या को पूरी तरह छिपा नहीं देते
    • spaCy से किताब जितने बड़े text को process करते समय उन्हें संदेश मिला कि default task allocation 1GB है और memory कम पड़ रही है; setting को दोगुना करने पर समस्या हल हो गई
    • Kernighan के बड़े होने के समय kilobytes भी बहुत बड़ी memory मानी जाती थी
  • embedded community में आज भी memory और performance को बहुत गंभीरता से लिया जाता है, और इसी संदर्भ में C के साथ Rust और Zig जैसी भाषाओं का भी ज़िक्र हुआ

Go, Plan 9 और Bell Labs का research environment

  • प्रस्तुतकर्ता ने कहा कि The Practice of Programming की समस्या-चेतना उन्हें Go language design की बुनियाद जैसी लगी
  • Kernighan ने कहा कि Rob Pike, Go बनाने वाले तीन लोगों में से एक थे, और यह “पूरी तरह विश्वसनीय” लगता है कि किताब में जिन असुविधाओं की बात थी, वे बाद में नई भाषा के बारे में सोचते समय पृष्ठभूमि में रही हों
    • हालांकि, उन्हें ऐसी कोई ठोस याद नहीं है कि Pike उस समय “नई भाषा से दुनिया सुधारने” के बारे में सोच रहे थे
    • उनका मानना है कि late 1990s में Plan 9 पर हुआ काम और Limbo, Alef जैसी भाषाएँ उस lineage का हिस्सा थीं जो आगे चलकर Go तक पहुँची
  • Bell Labs का अनुभव Kernighan के लिए लगभग आदर्श environment था
    • Princeton में graduate student रहते हुए 1960s में उन्होंने दो बार summer intern के रूप में Bell Labs में Multics से जुड़े समूह के साथ काम किया
    • अनुभव इतना अच्छा था कि लौटने का प्रस्ताव मिलने पर उन्होंने कहीं और interview ही नहीं दिया
    • वे 1969 की शुरुआत से लगभग 2000 तक Bell Labs में रहे
  • उस समय Bell Labs में long-term thinking संभव थी, और quarterly results या तुरंत product/revenue लाने का दबाव कम था
    • लोग जिन कामों को रोचक और महत्वपूर्ण मानते थे, उन्हें अपेक्षाकृत स्वतंत्र रूप से कर सकते थे
    • चूँकि उस समय AT&T अमेरिका के अधिकांश हिस्से को telephone service दे रहा था, इसलिए यह “problems से भरा environment” भी था और telephone system के लिए उपयोगी हो सकने वाले बहुत से काम मौजूद थे
  • उनकी Claude Shannon से सीधी मुलाकात नहीं हुई थी
    • उन्हें याद है कि Shannon, Kernighan के Bell Labs आने से कुछ साल पहले MIT चले गए थे
    • Kernighan ने कहा कि वे Richard Hamming के काफ़ी क़रीब थे, जिन्होंने कभी Shannon के साथ office share किया था

सीखना, किताब लिखना और computational thinking

  • Kernighan की शुरुआती सीख Bell Labs में अच्छे लोगों, tools और दिलचस्प समस्याओं के संपर्क में आकर हुई
  • yacc ऐसा tool था जिसने नई programming languages बनाना आसान किया, और Kernighan ने उसे पारंपरिक language generation के अलावा document preparation और declarative languages जैसे क्षेत्रों में भी इस्तेमाल किया
    • इस प्रक्रिया में उन्होंने language design और implementation के बारे में बहुत कुछ सीखा
  • उन्हें document preparation tools में भी लंबे समय से दिलचस्पी थी
    • MIT के शुरुआती interactive text preparation program runoff का उन पर प्रभाव था
    • Princeton में उन्होंने अपनी thesis तैयार करने के लिए Fortran में वैसा ही document preparation program लिखा
    • Bell Labs में उन्होंने ऐसी tools बनाई जिनसे किताबों का physical production आसान हुआ और publishing process में program examples खराब न हों
  • विश्वविद्यालय में आने के बाद जो बात वे पहले से जानते थे, उसे non-majors को समझाने की प्रक्रिया भी उनके लिए महत्वपूर्ण सीख बनी
    • उन्हें literature या music में मजबूत छात्रों को समझाना पड़ता था कि binary numbers कैसे काम करते हैं
    • इसी प्रक्रिया में उन्होंने यह भी सीखा कि 1600s के उत्तरार्ध में Leibniz binary numbers के व्यावहारिक आविष्कारक थे, और उन्होंने अक्षरों की जगह musical notes का उपयोग करके hexadecimal notation जैसा कुछ बनाया था
  • उनका कहना है कि किताब लिखने की प्रेरणा तब आती है जब “कहने लायक कुछ” हो और “ऐसा co-author हो जिसके साथ मिलकर कहना चाहें”
    • Kernighan की ज़्यादातर किताबें co-authored हैं
    • उनका मानना है कि collaboration में लोग एक-दूसरे की बातों को पूरा और परिष्कृत कर सकते हैं, इसलिए यह अकेले लिखने की तुलना में कहीं आसान होता है

large language models, education और recommended books

  • Kernighan ने अपने career के महत्वपूर्ण विकासों में time-sharing systems, Unix, programming languages का विकास, Moore’s law के कारण resources की बढ़त, और PC को गिना
    • time-sharing एक बड़ा बदलाव था, क्योंकि इससे लोग physical computer के सामने मौजूद हुए बिना या operator के processing का इंतज़ार किए बिना अपने schedule के अनुसार काम कर सकते थे
    • उनका मानना है कि cloud computing एक तरह से फिर time-sharing के क़रीब है, क्योंकि computation centralized है और user दूर मौजूद systems से communicate करने वाले advanced peripherals का उपयोग करता है
  • मौजूदा समय की सबसे रोचक तकनीक के रूप में उन्होंने large language models का नाम लिया
    • उनके अनुसार यह असामान्य है कि यह 2022 के नवंबर के आसपास अचानक सामने आया और बहुत कम समय में बड़ा प्रभाव डाल गया
    • उन्होंने Claude से spaCy से जुड़े काम के बारे में दो-तीन वाक्यों में पूछा, और उसने लगभग 99.9% सही Python code बना दिया; उनका कहना था कि Python के उपयोग में वह उनसे भी अधिक परिष्कृत लगा
    • उनका मानना है कि programmers गायब नहीं होंगे, लेकिन काम करने का तरीका बदल सकता है
  • LLM छात्रों के लिए नए approaches खोल रहे हैं
    • एक छात्र का मानना था कि ancient Greek translation को बेहतर बनाने में LLM का उपयोग हो सकता है
    • उन्होंने कहा कि 1700s के पुराने printed documents के OCR परिणामों को language model के भाषा-ज्ञान की मदद से सुधारा जा सकता है
  • non-majors के लिए उनकी class में कोशिश रहती है कि computer कैसे काम करता है, इसे दुनिया में चल रहे tech issues से जोड़ा जाए
    • वहाँ humanities और social science के छात्र अधिक होते हैं, और कई बार वे quantitative reasoning requirement पूरी करने के लिए यह course लेते हैं
    • class में hardware, software, communication, net neutrality, privacy, security, Google antitrust जैसे विषय तकनीकी आधार के साथ पढ़ाए जाते हैं
    • उनका मानना है कि बड़े काम को छोटे हिस्सों में बाँटकर चरणबद्ध सोचना, यानी programming thinking, thesis writing या legal problem analysis जैसे दूसरे क्षेत्रों में भी ले जाया जा सकता है
  • beginners के लिए यह ज़रूरी है कि वे ऐसा काम खोजें जो वे खुद करना चाहते हों
    • game बनाना, personal finance सुधारना, text analysis जैसे रुचि-आधारित problems से शुरू करने पर मनोवैज्ञानिक बाधा कम हो सकती है
    • non-majors की class में वे NLTK से Pride and Prejudice का analysis कराते हैं, फिर छात्रों को अपनी पसंद की दूसरी किताब चुनकर उसी तरीके से उसे explore करने का assignment देते हैं
  • सुझाई गई और चर्चा में आई किताबें तथा reading preferences काफ़ी विविध हैं
    • तकनीकी किताबों में वे कभी-कभी The Mythical Man-Month को फिर देखते हैं; उनका कहना है कि उसका कुछ हिस्सा अच्छी तरह पुराना हुआ है, लेकिन कुछ भाषा आज के मानकों से बहुत sexist लगती है
    • Jennifer Pahlka की Recoding America का ज़िक्र एक दिलचस्प किताब के रूप में हुआ, जो यह बताती है कि government software उम्मीद के मुताबिक अच्छा क्यों नहीं चलता और systems सुधार को कठिन क्यों बना देते हैं
    • non-technical reading में उन्होंने history, military history, detective fiction, Dick Francis के horse racing पर आधारित novels, और semiconductors पर लिखी Chip War का उल्लेख किया

1 टिप्पणियां

 
GN⁺ 2024-07-11
Hacker News की रायें
  • यह किताब बुनियादी किताब है, इसलिए हर programmer, खासकर beginners, को इसे पढ़ना चाहिए
    Kernighan की किताबों की तरह इसकी भाषा सरल, संक्षिप्त और सटीक है, और बिना फालतू विस्तार के 200 से थोड़े ज़्यादा पन्नों में बस मूल बातें समेटती है। उदाहरणों से सिद्धांत समझने के बाद आप उन्हें अपने संदर्भ में लागू कर सकते हैं
    K&P किताबों की खूबी यह है कि वे theory से दबाती नहीं हैं, बल्कि तकनीक का वास्तविक इस्तेमाल दिखाती हैं, जिसके बाद theory पढ़ना ज़्यादा आसान लगने लगता है
    उदाहरण के लिए, मेरे पास network programming और protocol implementation का अनुभव था जब मैंने यह किताब पढ़ी। "Notations" अध्याय में printf/scanf style format strings से packet layout specify करने वाली network message pack/unpack routines दिखाई गईं, जो मेरे लिए आंखें खोल देने वाला अनुभव था। मैंने सही notation और छोटी languages की ताकत सीखी, और इसमें virtual machines, code threading और JIT compilation के ideas दिखाने वाले code snippets भी हैं
    Kernighan और Pike की पुरानी किताब "The Unix Programming Environment" भी साथ में पढ़ने लायक है। "Program Development" अध्याय compiler development tools का इस्तेमाल करके एक छोटी calculator language के लिए compiler बनाने की पूरी प्रक्रिया लगभग 50 पन्नों में दिखाता है, और जहां तक मुझे पता है, compiler लिखने का तरीका समझाने वाली यह सबसे छोटी और सरल व्याख्या है
    निष्कर्ष यह है कि Kernighan की सभी किताबें खरीदकर पढ़ने लायक हैं

    • मैंने सचमुच Gang of Four order कर दी: "The C Programming Language", "The UNIX Programming Environment", "The Practice of Programming", "The Elements of Programming Style"
      C वाली किताब मैंने पहले पढ़ी थी और याद है कि लेखन शानदार था। Programming wisdom तो बहुत मिलेगी ही, लेकिन technical writing के नज़रिए से भी यह विश्लेषण करना चाहता हूं कि Kernighan की किताबें इतनी अच्छी क्यों हैं
      लगता है Kernighan ने writing का काफ़ी अध्ययन किया है, या कम से कम writing को लेकर first-principles thinking बहुत की है। "The Elements of Programming Style" शीर्षक भी Strunk और White की मशहूर writing book "The Elements of Style" का संदर्भ है
    • Kernighan और Pike की किताबें मैंने अभी नहीं पढ़ी हैं, लेकिन बेहद छोटे compiler की व्याख्या के लिए Wirth की "Algorithms + Data Structures = Programs" में आने वाला PL/0 भी अच्छा था
      आज के हिसाब से थोड़ा पुराना है, लेकिन अब भी पढ़ने में आसान किताब है
    • 10 साल से programming को पेशे के तौर पर करने वाले व्यक्ति के नाते, मैं जानना चाहता हूं कि इस किताब को पढ़कर मुझे क्या मिलेगा
      तंज नहीं कर रहा; बस यह समझना चाहता हूं कि career में आराम से आगे बढ़ रहे व्यक्ति के लिए भी यह must-read क्यों है
  • मुझे "The Practice of Programming" सच में बहुत पसंद है
    अब तक पढ़ी programming किताबों में इस किताब की सीख सबसे गहरी रही है। कई सालों से दोबारा नहीं पढ़ी, लेकिन महसूस होता है कि यह मेरी रोज़मर्रा की practice को प्रभावित कर रही है

    • पहली बार पढ़ी, और हैरानी हुई कि 25 साल पुरानी किताब होने के बावजूद इसमें अब भी बहुत कुछ सही है
      कुछ specific programming examples काफ़ी पुराने लगते हैं, लेकिन general ideas अब भी मजबूत हैं
  • मुझे Kernighan पसंद हैं। वे सच में विनम्र इंसान हैं
    YouTube पर उनके एक video में उन्होंने बताया कि PhD thesis में वे एक कठिन समस्या हल कर रहे थे, जो बाद में theory व्यवस्थित होने से पहले की एक NP-complete problem निकली
    मैंने उन्हें thesis मांगते हुए email भेजा, तो काफ़ी जल्दी जवाब मिला, और पढ़ने पर वह सचमुच दिलचस्प लगी

    • इतने बुद्धिमान और फिर भी विनम्र लोग कम मिलते हैं। वे हमारी industry के लिए सचमुच बड़ा वरदान हैं
    • इसका एक perfect उदाहरण है। Interview शुरू होने के 3–4 मिनट के आसपास वे कहते हैं कि किताब लिखने की प्रेरणा "थोड़ी दिखावटी(kind of pretentious)" थी
      मेरे और कई लोगों के लिए programming पर उनके विचार सबसे दिलचस्प और उपयोगी हैं, और इसका बड़ा कारण यह है कि वे उन्हें बहुत स्पष्ट तरीके से समझा सकते हैं
    • उनकी दूसरी किताबें यहां publications section में और देखी जा सकती हैं: https://en.m.wikipedia.org/wiki/Brian_Kernighan
  • काश आजकल interviews LeetCode की जगह इस किताब में आने वाली conceptual understanding को देखते
    इस बेतुकी नई दुनिया में Brian Kernighan भी शायद LeetCode hard interview पास न कर पाएं

    • पिछली बार job change interviews में Stripe, Square, Shopify जैसी बड़ी कंपनियों से बात हुई, और अच्छा लगा कि कोई भी LeetCode-style question नहीं था
      सब काफ़ी practical programming problems थीं। Stripe में एक interview था जहां उन्होंने Jackson Java library को fork करके उसमें bug डाल दिया था, और उसे ढूंढकर ठीक करने को कहा था। काफ़ी अलग था, लेकिन वास्तविक programming काम के कहीं ज़्यादा करीब था
    • यह Peter Higgs के उस कथन जैसा है कि आज के समय में उन्हें academia में job नहीं मिलती
      mRNA के लिए Nobel जीतने वाली Katalin Karikó का मामला भी याद आता है, जिन्हें research funding न ला पाने की वजह से UPenn में demote कर दिया गया था
  • Kernighan और उनकी किताबों जैसी शानदार श्रेणी में आने वाले एक और लेखक Jon Bentley हैं, और उनकी किताबें Programming Pearls और More Programming Pearls हैं
    https://en.m.wikipedia.org/wiki/Jon_Bentley_(computer_scient...

    • उनकी इससे पहले की पतली किताब "Writing Efficient Programs" भी है
      यह किताब efficiency को algorithms और language पर ज़ोर देते हुए top-down तरीके से सोचना सिखाती है, इसलिए हर programmer के लिए उपयोगी है
      Agner Fog, Fedor Pikus आदि की modern efficiency किताबें मुख्यतः compiler/operating system/processor-level performance techniques पर बात करती हैं, इसलिए साथ में पढ़ने पर पूरी तस्वीर मिलती है
    • पढ़ने की list में जोड़ लिया। Audience बढ़ने के साथ हम YouTube पर real time में reading list को refine करने और listeners को यह राय देने देने पर चर्चा कर रहे हैं कि हमें क्या पढ़ना चाहिए
  • folks, g silent है
    Rob Pike को बुलाकर देखना अच्छा होगा। शायद वे pronunciation ठीक करने वाली बात ज़रूर उठाएंगे। मुझे अभी से उनकी आवाज़ सुनाई दे रही है

    • YouTube पर भी किसी ने यही बात पकड़ी थी। उफ़। काश Brian ने हमें सुधार दिया होता
      Rob Pike को भी ज़रूर बुलाना चाहेंगे। अभी कोशिश चल रही है, लेकिन उनसे संपर्क करना थोड़ा ज़्यादा मुश्किल है
  • मैंने वीडियो का करीब एक-तिहाई ही देखा है, लेकिन यह दिखा कि होस्ट लोग काफी अच्छे insightful questions पूछ रहे थे

    • अभी-अभी पता चला कि यह Hacker News Top 20 में आ गया है। कमाल है
      मैं वीडियो के होस्ट्स में से एक Carter हूँ। खुशी है कि आप इसे एंजॉय कर रहे हैं। Brian Kernighan से बात कर पाना सचमुच बहुत बड़ा सम्मान था
  • यह फ़ॉर्मैट किताबों पर बात करता है, इसलिए description या कुछ comments में जिन किताबों पर चर्चा हुई है, और हो सके तो मीडिया लिस्ट भी整理 करके रखी जाए तो अच्छा होगा
    मैंने "The Bit Player" (2018 की Claude Shannon documentary) को देखने की लिस्ट में डाल लिया है, और "Recoding America", "Chip War", "Endurance: Shackleton's Incredible Voyage" को पढ़ने की लिस्ट में भी डाल लिया है

    • जानना चाहूँगा कि आपका मतलब ठीक-ठीक क्या है। क्या आगे जिन किताबों पर चर्चा होगी उनकी पूरी लिस्ट जैसी कोई चीज़? अगर रुचि हो तो आप हमारी वेबसाइट www.bookoverflow.io पर देख सकते हैं
  • podcast में चर्चा की जाने वाली किताबों की लिस्ट में Kernighan की Software Tools in Pascal भी जोड़ना अच्छा रहेगा
    मेरे पास वह किताब है और मुझे लगता है कि वह अच्छी है

    • उस विषय पर जितना लगता है उससे कहीं ज़्यादा बातें निकल सकती हैं
      Kernighan और Plaugher ने पहले "Software Tools" को RATFOR में लिखा, और फिर "Software Tools in Pascal" लिखी। और उस अनुभव की सीधी प्रतिक्रिया के तौर पर Kernighan ने "Why Pascal Is Not My Favorite Programming Language" नाम का paper लिखा
      Pascal में लिखना RATFOR में लिखने से कहीं आसान होना चाहिए था, लेकिन ऐसा नहीं हुआ, और Kernighan ने सोचा कि ऐसा क्यों हुआ
      यह अब भी दिलचस्प लेख है, और उदाहरण के लिए यहाँ देखा जा सकता है: https://www.cs.virginia.edu/~evans/cs655/readings/bwk-on-pas...
      हालांकि यह लेख मूल रूप से standard Pascal की ओर इशारा करता है। Turbo Pascal जैसे extensions ने कई समस्याएँ ठीक कर दीं। लेकिन, जैसा उन्होंने कहा, extensions के बीच portability नहीं थी। फिर भी Turbo Pascal के de facto "standard" extension बन जाने से यह कुछ हद तक हल भी हो गया
    • उस दौर में जब मेरे पास Pascal चलाने वाला computer भी नहीं था, मोहल्ले के shopping mall की किताबों की दुकान में Software Tools in Pascal मिल जाना मेरे career के लिए cheat code जैसा साबित हुआ
      ideas और लेखन से मैं बहुत प्रभावित हुआ, और आगे चलकर Kernighan की बाकी प्रमुख किताबें ढूँढकर पढ़ने की शुरुआत उसी से हुई
  • Kernighan कम-से-कम first edition के हिसाब से The Go Programming Language किताब के co-author भी हैं

    • तो क्या इसी वजह से Go choice नहीं देता और K&R brace style को enforce करता है?