3 पॉइंट द्वारा GN⁺ 2024-01-16 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • प्रोग्रामिंग कौशल 24 घंटे या 21 दिन की शुरुआती किताब से नहीं आता, और इतने कम समय की पढ़ाई से आम तौर पर केवल ऊपरी परिचितता मिलती है
  • शतरंज, संगीत रचना, चित्रकला, तैराकी और शोध जैसे कई क्षेत्रों में विशेषज्ञता पर हुए अध्ययन दिखाते हैं कि उच्च स्तर तक पहुँचने में लगभग 10 साल लगते हैं, और कुंजी सिर्फ दोहराव नहीं बल्कि सचेत अभ्यास है
  • अच्छा प्रोग्रामर बनने के लिए रुचि बनाए रखते हुए खुद चीज़ें बनानी चाहिए, दूसरों का कोड पढ़ना चाहिए, अपने से बेहतर लोगों के साथ काम करना चाहिए और feedback लेना चाहिए
  • विश्वविद्यालय की शिक्षा और किताबें योग्यता, संरचना और गहराई दे सकती हैं, लेकिन वे वास्तविक प्रोजेक्ट में असफलताओं को ठीक करने और maintenance तक के अनुभव की जगह नहीं ले सकतीं
  • पहली भाषा चुनते समय दोस्त और community, सरलता, और interactive execution environment को आधार बनाया जा सकता है; सबसे महत्वपूर्ण बात है एक को चुनकर लगातार शुरुआत करना

कम समय में प्रोग्रामिंग सिखाने के वादे की सीमाएँ

  • किताबों की दुकानों और ऑनलाइन ऐसे बहुत से शीर्षक मिलते हैं जो Java, C, SQL, Ruby, algorithm आदि को कुछ दिनों या कुछ घंटों में सिखाने का दावा करते हैं
    • Amazon advanced search में 2000 के बाद शीर्षक में teach yourself hours वाले 512 किताबें मिलीं, और शीर्ष 10 में से 9 प्रोग्रामिंग की किताबें थीं
    • teach yourself को learn से या hours को days से बदलने पर भी लगभग वही नतीजे मिलते हैं
  • ऐसे शीर्षक यह आभास देते हैं कि लोग प्रोग्रामिंग जल्दी-जल्दी सीखना चाहते हैं, या यह कि प्रोग्रामिंग दूसरे क्षेत्रों की तुलना में कहीं आसान है
  • Felleisen आदि की How to Design Programs इस प्रवृत्ति का व्यंग्य करते हुए कहती है: “खराब प्रोग्रामिंग आसान है. मूर्ख भी इसे 21 दिनों में सीख सकते हैं.”

“Teach Yourself C++ in 24 Hours” का वास्तव में क्या अर्थ हो सकता है

  • Teach Yourself

    • 24 घंटे में इतने अर्थपूर्ण प्रोग्राम लिखना, सफलता और असफलता से सीखना, अनुभवी प्रोग्रामरों के साथ काम करना, और C++ environment में जीने का मतलब समझना संभव नहीं है
    • इसलिए जो संभव है, वह गहरी समझ नहीं बल्कि सतही परिचितता के अधिक करीब है
  • C++

    • अगर आप पहले से कोई दूसरी भाषा जानते हैं, तो 24 घंटे में C++ syntax का कुछ हिस्सा सीखा जा सकता है
    • लेकिन C++ किस काम के लिए अच्छा है, किसके लिए नहीं, और इसे वास्तव में कैसे इस्तेमाल करना चाहिए, यह सीखना कठिन है
    • Alan Perlis के शब्दों में, “ऐसी भाषा जानने लायक नहीं जो प्रोग्रामिंग के बारे में आपकी सोच न बदले.”
  • 24 Hours

    • किसी विशेष टूल से जुड़ने के लिए C++, JavaScript, या Processing जैसी किसी चीज़ का थोड़ा-बहुत उपयोग सीखा जा सकता है
    • इस स्थिति में आप प्रोग्रामिंग नहीं, बल्कि किसी खास काम को करना सीख रहे होते हैं

विशेषज्ञता में समय लगता है

  • Bloom, Bryan & Harter, Hayes, Simon & Chase आदि के शोध बताते हैं कि विभिन्न क्षेत्रों में विशेषज्ञता विकसित होने में लगभग 10 साल लगते हैं
    • उदाहरणों में शतरंज, संगीत रचना, टेलीग्राफी, चित्रकला, पियानो, तैराकी, टेनिस, और neuropsychology व topology में शोध शामिल हैं
  • मुख्य बात सिर्फ दोहराव नहीं, बल्कि सचेत अभ्यास (deliberative practice) है
    • अपनी वर्तमान क्षमता से थोड़ा कठिन कार्य चुनना
    • काम करते समय और उसके बाद परिणाम का विश्लेषण करना
    • गलतियों को सुधारना और फिर दोहराना
  • Mozart 4 साल की उम्र में संगीत प्रतिभा थे, लेकिन विश्व-स्तरीय संगीत रचने में उन्हें 13 साल और लगे
  • Beatles 1964 में Ed Sullivan शो और नंबर-1 हिट गानों से प्रसिद्ध हुए, लेकिन 1957 से वे Liverpool और Hamburg के छोटे क्लबों में प्रदर्शन कर रहे थे, और उनकी आलोचकीय बड़ी सफलता Sgt. Pepper’s 1967 में आई
  • Malcolm Gladwell ने 10,000 घंटे वाली अभिव्यक्ति को लोकप्रिय बनाया, लेकिन यहाँ महत्वपूर्ण बात सटीक संख्या नहीं बल्कि वर्षों तक किया गया लगातार अभ्यास है
  • K. Anders Ericsson के लिए 10,000 घंटे ऐसा संख्या-बोध देता है कि सर्वोच्च स्तर तक पहुँचने के लिए प्रतिभाशाली व्यक्ति को भी कई वर्षों तक हर सप्ताह 10–20 घंटे लगाने पड़ते हैं
  • कोई एक संख्या सभी उत्तर नहीं दे सकती
    • यह मानना कठिन है कि प्रोग्रामिंग, शतरंज, checkers, और संगीत सबमें बिल्कुल समान समय लगेगा
    • यह मानना भी कठिन है कि हर व्यक्ति एक ही गति से सीखेगा

प्रोग्रामर बनने के व्यावहारिक तरीके

  • प्रोग्रामिंग में रुचि होनी चाहिए और शुरुआत मज़े के लिए होनी चाहिए
    • रुचि इतनी बनी रहनी चाहिए कि आप 10 साल या 10,000 घंटे लगा सकें
  • आपको खुद प्रोग्रामिंग करनी चाहिए
    • सीखने का सबसे अच्छा तरीका करके सीखना है
    • प्रभावी सीखने के लिए व्यक्ति के स्तर के अनुरूप स्पष्ट कार्य, उपयोगी feedback, और दोहराव व त्रुटि-सुधार के अवसर चाहिए
  • दूसरे प्रोग्रामरों से बात करनी चाहिए और उनके लिखे प्रोग्राम पढ़ने चाहिए
    • यह किसी भी किताब या कोर्स से अधिक महत्वपूर्ण है
  • चाहें तो विश्वविद्यालय में 4 साल बिताएँ या आगे postgraduate अध्ययन करें
    • डिग्री उन पेशों तक पहुँच दिला सकती है जहाँ औपचारिक योग्यता चाहिए, और यह क्षेत्र की गहरी समझ भी दे सकती है
    • अगर आपको स्कूल पसंद नहीं है, तो समर्पण के साथ स्वयं या काम के दौरान मिलते-जुलते अनुभव भी पाए जा सकते हैं
    • केवल किताबों से सीखना पर्याप्त नहीं है
  • दूसरे प्रोग्रामरों के साथ संयुक्त प्रोजेक्ट करने चाहिए
    • कुछ प्रोजेक्टों में आप सबसे अच्छे प्रोग्रामर बनकर leadership और vision को परख सकते हैं
    • कुछ में आप सबसे कमज़ोर व्यक्ति बनकर सीख सकते हैं कि कुशल लोग क्या करते हैं, और क्या करने से बचते हैं
  • ऐसे मौजूदा प्रोजेक्ट सँभालने चाहिए जिन्हें दूसरे प्रोग्रामर छोड़ चुके हों
    • इससे आप सीखते हैं कि किसी और के लिखे प्रोग्राम को समझने और ठीक करने के लिए क्या चाहिए
    • और यह भी सोचते हैं कि बाद में maintenance करने वाले व्यक्ति के लिए कैसे design करना चाहिए

भाषाओं और सिस्टमों का व्यापक अनुभव

  • कम से कम छह programming languages सीखनी चाहिए
    • class abstraction पर ज़ोर देने वाली भाषाएँ: Java, C++
    • functional abstraction पर ज़ोर देने वाली भाषाएँ: Lisp, ML, Haskell
    • syntactic abstraction को support करने वाली भाषा: Lisp
    • declarative specification को support करने वाली भाषाएँ: Prolog, C++ templates
    • concurrency पर ज़ोर देने वाली भाषाएँ: Clojure, Go
  • यह याद रखना चाहिए कि “computer science” में computer भी शामिल है
    • आपको command execution, memory से word fetch, cache miss, disk sequential read, और disk seek में लगने वाले समय का अंदाज़ होना चाहिए
  • भाषा standardization गतिविधियों में भाग लेना भी मददगार हो सकता है
    • यह ANSI C++ committee जैसी बड़ी गतिविधि हो सकती है, या local coding style में indentation 2 spaces हो या 4, इतना छोटा निर्णय भी हो सकता है
    • इससे आप सीखते हैं कि लोग किसी भाषा में क्या पसंद करते हैं और क्यों उस पर इतनी दृढ़ भावना रखते हैं
  • standardization गतिविधियों से समय रहते बाहर निकलने की समझ भी ज़रूरी है

केवल किताबें और शिक्षा पर्याप्त नहीं हैं

  • parenting पर बहुत सी किताबें पढ़ लेने के बाद भी पहला बच्चा होने पर आप खुद को नौसिखिया महसूस कर सकते हैं, और दूसरे बच्चे तक आते-आते आप शायद फिर से किताबों की बजाय अपने अनुभव पर अधिक भरोसा करेंगे
  • Fred Brooks की No Silver Bullet उत्कृष्ट software designer खोजने के लिए तीन-भाग की योजना सुझाती है
    • श्रेष्ठ designers की यथासंभव जल्दी और व्यवस्थित पहचान करना
    • उनके विकास की जिम्मेदारी लेने और career file संभालने के लिए एक career mentor नियुक्त करना
    • बढ़ते हुए designers को आपस में संवाद और प्रेरणा के अवसर देना
  • Alan Perlis ने कहा, “हर कोई मूर्तिकला सीख सकता है, लेकिन Michelangelo को शायद यह सिखाना पड़ता कि मूर्तिकला न कैसे करें.”
  • उत्कृष्ट प्रोग्रामरों में प्रशिक्षण से परे कुछ आंतरिक गुण हो सकते हैं, लेकिन यह निश्चित नहीं कहा जा सकता कि वे जन्मजात हैं या परिश्रम से विकसित होते हैं
  • Java, Ruby, JavaScript, PHP की किताबें उपयोगी हो सकती हैं, लेकिन वे 24 घंटे या 21 दिन में आपका जीवन या पूरी विशेषज्ञता नहीं बदल देंगी
  • 24 महीनों तक लगातार सुधार के लिए कड़ी मेहनत करना एक सार्थक शुरुआती बिंदु है

कंप्यूटर के काम करने के समय का बोध

  • सामान्य PC पर अलग-अलग कामों में लगने वाला अनुमानित समय इस प्रकार है
    • सामान्य command execution: 1 nanosecond
    • L1 cache memory से fetch: 0.5 nanosecond
    • branch prediction failure: 5 nanosecond
    • L2 cache memory से fetch: 7 nanosecond
    • Mutex lock/unlock: 25 nanosecond
    • main memory से fetch: 100 nanosecond
    • 1Gbps network पर 2KB भेजना: 20,000 nanosecond
    • memory से 1MB sequential read: 250,000 nanosecond
    • disk के नए स्थान पर seek: 8,000,000 nanosecond
    • disk से 1MB sequential read: 20,000,000 nanosecond
    • अमेरिका और यूरोप के बीच packet round-trip: 150 millisecond, यानी 150,000,000 nanosecond

पहली programming language चुनने के मानदंड

  • पहली भाषा के लिए कोई एक सही उत्तर नहीं है
  • दोस्त और community को आधार बनाया जा सकता है
    • यह वैसा ही है जैसे operating system चुनते समय कहा जाता है कि जो आपके दोस्त इस्तेमाल करते हैं वही लें
    • दोस्तों से सीखने का लाभ operating system या भाषा के अपने अंतर को संतुलित कर सकता है
    • यह भी देखना चाहिए कि चुनी गई भाषा के लिए बढ़ती हुई community, किताबें, websites, और online forums उपलब्ध हैं या नहीं
  • सरलता महत्वपूर्ण है
    • C++ और Java अनुभवी प्रोग्रामरों द्वारा बड़े team में professional development के लिए बनाए गए थे, और उनमें execution efficiency के लिए जटिल हिस्से हैं
    • शुरुआत करने वाले के लिए वह जटिलता ज़रूरी नहीं है
  • interactive execution environment सीखना आसान बनाता है
    • जैसे पियानो में key दबाते ही आवाज़ सुनना, पूरी धुन खत्म होने के बाद सुनने वाली batch पद्धति से आसान होता है
    • वैसे ही प्रोग्रामिंग में interactive mode देने वाली भाषाएँ लाभदायक हैं
  • इन मानदंडों के आधार पर पहली भाषा के रूप में Python या Scheme की सिफारिश की जाती है
  • JavaScript इसलिए विकल्प हो सकती है कि वह शुरुआती लोगों के लिए पूरी तरह आदर्श भाषा है, ऐसा नहीं; बल्कि इसलिए कि उसके online tutorials बहुत हैं
  • कम उम्र के शिक्षार्थी Alice, Squeak, Blockly पसंद कर सकते हैं, और बड़े शिक्षार्थी भी उनका आनंद ले सकते हैं
  • महत्वपूर्ण यह है कि एक चुनें और शुरू करें

सुझाई गई किताबें और सामग्री

  • केवल किताबें पर्याप्त नहीं हैं, लेकिन नीचे दिए गए संसाधन सीखने में मदद कर सकते हैं
  • Structure and Interpretation of Computer Programs

    • Structure and Interpretation of Computer Programs computer science की शुरुआती किताब के रूप में उत्कृष्ट है, और यह computer science को समझने के तरीके से प्रोग्रामिंग सिखाती है
    • इसकी lecture videos और online full text उपलब्ध हैं
    • यह चुनौतीपूर्ण किताब है, इसलिए संभव है कि यह कुछ ऐसे शिक्षार्थियों को छाँट दे जो किसी दूसरे तरीके से सफल हो सकते थे
  • How to Design Programs

    • How to Design Programs Scheme का उपयोग करके सुंदर और functional तरीके से प्रोग्राम को वास्तव में design करना सिखाने वाली अच्छी किताबों में से एक है
  • Python

  • Oz

    • Concepts, Techniques, and Models of Computer Programming को कुछ लोग Abelson & Sussman का आधुनिक उत्तराधिकारी मानते हैं
    • यह प्रोग्रामिंग के बड़े विचारों को व्यापक रूप से समेटती है, और भले ही इसमें Oz जैसी कम-प्रसिद्ध भाषा का उपयोग है, यह दूसरी भाषाएँ सीखने की अच्छी नींव बन सकती है

1 टिप्पणियां

 
GN⁺ 2024-01-16
Hacker News राय
  • 1999 में मैंने CompUSA से "Sams Teach Yourself C++ in 24 Hours" खरीदी थी; काउंटर वाले कर्मचारी ने उसे देखकर हँसा और मुझे यह लेख बताया
    16 साल की उम्र में Borders में programming किताबें देख रहा था, तभी किसी ने मुझे "The C Programming Language" थमा दी, और उसने मेरी ज़िंदगी बदल दी
    मेरे career का बड़ा हिस्सा असल दुनिया में developers या programming में रुचि रखने वाले लोगों से संयोग से मिलने से बना

    • उन किताबों में से कुछ सचमुच हँसी आने जितनी खराब थीं, लेकिन उस दौर में एक किताब ऐसी शुरुआती चाबी जैसी लगती थी जो दिमाग में चल रहे अजीब program ideas को सच में बनाने दे
      आखिरी बार वैसा एहसास तब हुआ था जब मैं Microcenter से नया MacBook और iPod Touch लेकर निकला और लगा कि अब अगला Angry Birds बनाने के लिए तैयार हूँ
    • मेरी ज़िंदगी बदलने वाली किताब C64 के साथ आया BASIC manual था
      करीब 8 साल बाद जब मैंने Turbo Pascal खरीदा, उसमें भी ज़रूरी सारी सामग्री थी, इसलिए मैं उसे जल्दी सीख सका; और 1995 में जब Linux शुरू किया, तो man pages और info docs से ही उस system पर programs लिखने के लिए ज़रूरी लगभग सब कुछ सीख पाया
      90s के अंत में EGCS manual को शुरू से अंत तक पढ़ने की याद भी है
      वह समय याद आता है जब software अपनी सारी ज़रूरी जानकारी साथ देता था; आज की तरह product page या manual खोजने के लिए Google खंगालना पड़ता है, यह खलता है
      शायद 5 साल बाद, जब संबंधित जानकारी सिर्फ Discord पर होगी और index नहीं होगी, तब manual की जगह इस्तेमाल होने वाली Google search भी याद आएगी
      2000s की शुरुआत में Linux और FreeBSD की socket programming भी मैंने सिर्फ man pages से सीखी; बाद में जब Stevens की किताब पढ़ी, तो man pages और कुछ programs लिखने के अनुभव की वजह से उसे बहुत जल्दी पढ़ पाया
    • 1997 में Barnes and Nobles से खरीदी "Visual Basic Professional 3.0 Programming by Thomas W. Torgerson" मेरी शुरुआत थी
      AOL पर email attachments के 100 हिस्सों में Visual Basic 3.0 डाउनलोड करके मैं punter/prog बनाना सीखना चाहता था
      किताब का code कॉपी करके program start होने पर sound file चलाने की कोशिश की, और जब वह सच में चला तो मैं हैरान रह गया
      बाद में software development में career बना पाना मेरे लिए बड़ा सौभाग्य था
    • programming shelf पर खड़ी किसी छोटी लड़की को देखकर हँसना नहीं चाहिए
      90s में सलाह तो दूर, अविश्वास भरी प्रतिक्रिया मिलना काफी आम था
    • मैं अंत तक यह दावा कर सकता हूँ कि "The C Programming Language" मेरी पढ़ी हुई सबसे अच्छी programming language book है
      हर developer को, भले ही बाद में C भूल जाए, कम से कम एक बार C और K&R पढ़कर सीखना चाहिए
  • यह लेख मेरे लिए खास मायने रखता है, क्योंकि coding सीखना शुरू करने वाले teen दिनों में मैंने इसे पहली बार पढ़ा था
    दोबारा पढ़कर Malcolm Gladwell का नाम देखकर हैरानी हुई, क्योंकि मुझे याद था कि Outliers काफी बाद में चर्चा में आई थी
    Ratatouille का ज़िक्र देखकर ही समझ आया कि 1998 में publish होने के बाद लेख update हुआ था; original archive में है और काफी छोटा है: https://web.archive.org/web/19980206223800/https://norvig.co...
    Peter Norvig ने वर्षों तक अपने लेख को लगातार सुधारते रहे, यह सम्मान के योग्य है

    • शायद high school में पढ़ने के लिए assign किया गया था, इसलिए आज भी Gladwell मुझे खास पसंद नहीं हैं
      उन्हें बहुत बार quote किया जाता है, और 10,000-hour rule अब बस meme जैसा लगता है
    • 10 साल पहले university library के computer lab में यह लेख पढ़ते हुए अपना रूप याद आता है
      अब मैंने self-study से programming सीख ली है, लेकिन वह सफर उस समय की कल्पना से कहीं ज्यादा कठिन और घुमावदार था
    • "Outliers" से पहले भी "The Tipping Point" और "Blink" थीं
  • मैं किताबों से सीखने वाला व्यक्ति भी हूँ, लेकिन ऐसा रवैया अक्सर math और physics जैसे non-computing fields में ज्यादा फिट बैठता है, जहाँ बदलाव धीमे होते हैं
    हाल का एक खराब उदाहरण O'Reilly की Quantum Programming किताब थी; उसने quantum circuits को इतना detail में नहीं समझाया कि मैं सच में समझ सकूँ कि मैं क्या कर रहा हूँ
    हालांकि यह quantum computing की अपनी hype भी हो सकती है, और अभी जो Nielsen/Chuang पढ़ रहा हूँ वह बहुत theoretical है, लेकिन explanation बहुत स्पष्ट है, इसलिए शायद बाद में उस पर लौटूँ
    किताबें learning tools ही हैं, और hobby projects भी experience जोड़ते हैं, इसलिए वे बल्कि और प्रभावी learning tools हो सकते हैं
    फिर भी knowledge power है, और अगर आपने अपनी ज़रूरत के हिसाब की किताब ढूँढ ली है, तो किताबें सही दिशा पकड़ने में शानदार होती हैं
    मैं ऐसे लोगों को जानता हूँ जो जब तक आश्वस्त न हों कि वे किताब पूरी पढ़ पाएँगे, उसे खोलते ही नहीं; मुझे यह रवैया बेतुका लगता है
    अभी-अभी O'Reilly की Generative Deep Learning किताब order की है, और अगर career में काम आने वाले कुछ अंश भी मिल गए तो वह काफी लाभ होगा
    कम से कम bookshelf पर तो अच्छी लगेगी

    • बुनियादी सिद्धांत नहीं बदलते
      हर हफ्ते नया frontend framework आता है, लेकिन आखिर में वे सभी HTML ही बनाते हैं
  • ये 16 सालों की threads हैं
    reposts करीब 1 साल बाद ठीक माने जाते हैं, और पुरानी threads के links उन readers के लिए हैं जो और जानना चाहते हैं
    Teach Yourself Programming in Ten Years (1998) - https://news.ycombinator.com/item?id=33287618 - अक्टूबर 2022, 112 comments
    Teach Yourself Programming in Ten Years (1998) - https://news.ycombinator.com/item?id=27411276 - जून 2021, 115 comments
    Teach Yourself Programming in Ten Years (1998) - https://news.ycombinator.com/item?id=20543495 - जुलाई 2019, 87 comments
    Teach Yourself Programming in Ten Years (1998) - https://news.ycombinator.com/item?id=16574248 - मार्च 2018, 51 comments
    Teach Yourself Programming in Ten Years (1998) - https://news.ycombinator.com/item?id=9395284 - अप्रैल 2015, 61 comments
    Teach Yourself Programming in Ten Years (1998) - https://news.ycombinator.com/item?id=5519158 - अप्रैल 2013, 86 comments
    Teach Yourself Programming in Ten Years by Peter Norvig (2001) - https://news.ycombinator.com/item?id=3439772 - जनवरी 2012, 29 comments
    Teach Yourself Programming in 10 Years. - https://news.ycombinator.com/item?id=1060176 - जनवरी 2010, 32 comments
    Teach Yourself Programming in Ten Years - https://news.ycombinator.com/item?id=191235 - मई 2008, 19 comments
    Norvig: Teach Yourself Programming in Ten Years - https://news.ycombinator.com/item?id=43243 - अगस्त 2007, 7 comments

    • सोच रहा हूँ कि क्या 2007~2013 में comments करने वाले लोग पिछले 10 सालों में सीखी बातें शेयर कर सकते हैं
    • पोस्ट डालने से पहले पुरानी threads के बारे में बताने का कोई तरीका होता तो अच्छा होता
    • मुझे ठीक से समझ नहीं आ रहा कि यह reposts बहुत ज़्यादा होने की आलोचना है, या यह मतलब है कि साल में एक बार जैसा repetition स्वस्थ माना जा सकता है
  • पेज पर मौजूद पुराना Amazon.com link अब भी relevant results लौटाता है, यह बात प्रभावशाली है, जबकि उसमें काफ़ी जटिल query parameters भी लगे हैं
    “Cool URIs don't change” का अच्छा उदाहरण है
    [0] http://www.amazon.com/gp/search/ref=sr_adv_b/?search-alias=s...
    [1] https://www.w3.org/Provider/Style/URI

    • मज़ेदार बात यह है कि वह Amazon link मेरे लिए error लौटाता है
  • मैंने ऐसे काफ़ी लोगों से मुलाकात की है जो पूछते हैं कि वे नौकरी में या कहीं और programming job कैसे पा सकते हैं
    जब मैं अपना रास्ता बताता हूँ—बचपन से सीखना शुरू किया, इसे बड़ा hobby बनाया, फिर computer science degree और internships कीं—तो वे यह सुनकर हैरान और निराश होते हैं कि कोई fast track नहीं है
    या क्या कोई fast track है? जानना चाहूँगा कि क्या किसी ने 0 से 1 तक ले जाने वाले bootcamp को सफलतापूर्वक पूरा किया है

    • मैं bootcamp से निकला हूँ और 8 साल से professionally programming कर रहा हूँ
      high school और college में मज़े के लिए programming की कुछ classes ली थीं, लेकिन knowledge बहुत सीमित थी
      उस bootcamp ने अपने नाम को सही साबित किया; basic hours 9 से 5 थे, लेकिन कई लोग सुबह 7 बजे आकर रात 10 बजे जाते थे
      weekends पर भी जाते थे, और कभी-कभी सिर्फ़ Sunday को छुट्टी होती थी
      मैंने जानबूझकर दूसरे शहर का bootcamp चुना ताकि social life distraction न बने
      focus Ruby और JavaScript पर था, और graduation के कुछ महीनों बाद C#/.NET intern के रूप में job मिल गई
      सीधे junior developer role के लिए convince करना मुश्किल लगेगा, इसलिए internship चुनी, और 2 हफ्तों में junior developer पर promote हो गया
      वह school Kaplan द्वारा acquire किए जाने के बाद बंद हो गया
    • bootcamp से सफल हुए लोग या तो पहले से बहुत smart थे, या technology/advanced math background से आए थे
    • मैंने computer science 3 महीने में छोड़ दी थी, और उससे पहले कभी programming नहीं की थी
      माँ के घर के basement में 8 महीने तक JavaScript basics self-study किए और job मिल गई
      उसके बाद मैंने programming में बेहद ज़्यादा समय लगाया, और अब तक दसियों हज़ार घंटे से ज़्यादा हो चुके हैं
      compilers, 3D graphics, semiconductors, game engines पर काम किया
      मेरा अनुभव शायद दोनों पक्षों को support करता है
      2012 के आसपास कम experience के साथ भी industry में प्रवेश करना relatively आसान था, लेकिन बाद में interesting projects वाले लोग जिस अच्छे engineer को hire करना चाहते हैं, वैसा बनने के लिए भारी मेहनत करनी पड़ी
    • मैंने bootcamp graduates को hire किया है, हालांकि खुद bootcamp नहीं किया
      limited data से देखें तो traditional education वाले developers की तरह ही यह भी कभी अच्छा, कभी खराब होता है
      सबसे अच्छे नतीजे तब मिले जब physics, chemistry, engineering जैसी classical training वाला व्यक्ति career change करना चाहता था; वे तेज़ learning curve वाले advanced junior जैसे थे
      अगर आप software के ऐसे areas में motivated fresher लाना चाहते हैं जहाँ pure programming कम important है, तो यह शानदार hiring हो सकती है
      standard deviation बड़ा है, लेकिन यह 2-year degree graduates से बड़ा है या नहीं, पक्का नहीं कह सकता
    • मैंने एक graduate program किया था जिसमें consulting company 3 महीने training देती थी और फिर 2-year contract पर काम करवाती थी
      university में humanities पढ़ी थी और coding कभी नहीं की थी
      पहले 2 साल सचमुच कठिन थे, और basics न होने के कारण पूरे समय ऐसा लगा जैसे धारा के उलट तैर रहा हूँ
      2-year program के अंत तक जाकर ही लगा कि मैं independently value दे सकता हूँ
      मेरा knowledge काफ़ी application-focused है, और computer science basics की कमी के कारण बीच-बीच में fundamentals सीखते हुए आगे बढ़ना पड़ता है, इसलिए कभी-कभी चीज़ें और कठिन हो जाती हैं
      हालांकि मेरा current role data engineer का है, इसलिए data structures और algorithms जैसे traditional computer science areas की अपेक्षाकृत कम ज़रूरत होती है
  • असली बात deliberate practice है
    सिर्फ़ repeat करना नहीं, बल्कि अपनी current ability से थोड़ा मुश्किल tasks को challenge करना, try करना, काम के दौरान और बाद में analysis करना, mistakes ठीक करना और फिर repeat करना ज़रूरी है
    लगातार सीखते रहने के लिए खुद को challenge करना और comfort zone के बाहर जाना होगा

    • मैं सोचता हूँ कि GitHub Copilot जैसे AI tools लोगों की learning habits को कैसे बदलेंगे
      कुछ महीनों तक इस्तेमाल करने के बाद संयोग से logout हो गया, और official docs ढूँढने की थोड़ी-सी असुविधा अब मुझे उल्टा valuable लग रही है
      पहले हफ्ते में खुद को बहुत धीमा महसूस करते देख हैरानी हुई
      primary sources से सीखने के लिए extra steps लेना और कभी-कभी असुविधा को महत्व देना, programmer के रूप में बढ़ने के लिए important है
    • software developer और tutor/TA experience वाले व्यक्ति के रूप में, मुझे चिंता है कि next generation developers सच में coding कर पाएँगे या नहीं
      खासकर अगर first/second-year level assignments सिर्फ़ Copilot से पूरे किए गए हों, तो वे अपनी खुद की usefulness को automate करके खत्म कर रहे होंगे
      दूसरी तरफ़, “iPad kids” के बारे में भी हम ऐसी ही बातें करते आए हैं
      iPad में भी file system है, और apps भी Apple द्वारा approved तरीकों के भीतर लगातार ज़्यादा capable हो रहे हैं, इसलिए मैं इसे laptop का बहुत खराब approximation नहीं मानता
      मैं भी Copilot इस्तेमाल करता हूँ, लेकिन मुख्यतः variables set करने या छोटी-मोटी repetitive tasks के लिए smart autocomplete की तरह
      इसका use problem solving को contextualize करने और team members के साथ interaction में लगने वाला समय बचाने के लिए है, engineer को replace करने के लिए नहीं
    • बात सही है, लेकिन बेहतर ढंग से कहें तो core बात hobby के रूप में बनाना है
      expertise experience से आती है, और experience तभी बनता है जब आप बार-बार लौटते हैं
      कुछ लोग खुद को endless struggle में धकेल सकते हैं, लेकिन आम व्यक्ति के लिए बुद्धिमानी यह है कि software का कोई ऐसा हिस्सा ढूँढे जिसे वह सच में प्यार कर सके और उसे grow करे
    • आपको challenged होना पसंद होना चाहिए
      मैंने coding field में मुझसे स्पष्ट रूप से ज़्यादा smart लोगों को देखा है जो इतने smart थे कि बाहर निकल गए
      क्योंकि उन्हें लगा कि यह अब challenging नहीं रहा, या “दूसरों के साथ आने का इंतज़ार करना” जैसे गलत challenge से थक गए
      आमतौर पर वे लोग cutting-edge technologies पर काम कर रहे थे जो कुछ साल बाद standard बनती थीं
      अगर fascination ही motivation है, तो शायद बहुत ज़्यादा smart न होना सौभाग्य मान सकते हैं
    • education theory में इसे zone of proximal development कहा जाता है
  • इसे 1998 का article बताया गया है, लेकिन इसमें Clojure और Go जैसे references हैं, इसलिए लगता है कि यह बाद में updated article है

    • page के अंत में Peter Norvig (Copyright 2001—2014) लिखा है
  • अच्छा लेख है
    रोज़ 8 घंटे, हफ़्ते में 40 घंटे के हिसाब से 10,000 घंटे पूरे करने में 250 हफ़्ते लगते हैं
    लगभग बिना रुके programming करने पर भी करीब 5 साल लगते हैं, और वास्तविकता में लक्ष्य तक पहुँचने में 10 साल के ज़्यादा करीब समय लगता है

    • वास्तविकता में यह इस पर निर्भर करता है कि आपको programming में कितना मज़ा आता है
      बहुत programming करें तो साल में 3,000 घंटे तक पहुँचना भी आसान है
      मैं ज़्यादातर दिनों में रोज़ 12 घंटे, और ज़्यादातर हफ़्तों में हफ़्ते के 6–7 दिन programming करता हूँ
      जिन दिनों प्रेरणा बहुत ज़्यादा होती है, 18 घंटे भी कर लेता हूँ
      लगभग 10 साल से मैं ऐसा ही करता आ रहा हूँ, और कभी-कभी करीब एक महीने का ब्रेक लेकर इसे हफ़्ते में 3–4 दिन लंबे घंटों तक घटा देता हूँ
      बहुत सतर्क हिसाब लगाएँ तो भी यह सालाना करीब 3500 घंटे होता है
      इतना ज़्यादा काम करने की वजह यह है कि मुझे programming सचमुच पसंद है, और सुबह surfing को छोड़ दें तो उससे ज़्यादा करने का मन किसी और चीज़ में नहीं लगता
    • 10,000 घंटे वाला heuristic खास तौर पर सटीक नहीं है, बस मशहूर है
      फिर भी एक मजबूत developer बनने के लिए करीब 10 साल का professional अनुभव मोटे तौर पर सही लगता है
      मैंने किसी को 5 साल में सचमुच उस स्तर तक पहुँचते नहीं देखा
      जो लोग teenage से ही जुनून की हद तक करते आए हैं, वे कुछ साल घटा सकते हैं, लेकिन एक बिंदु के बाद वह अवधि भी overlap हो जाती है
      बेशक, यह पुरानी बात भी है कि समस्या “1 साल के अनुभव को 10 बार दोहराने” की होती है
      मैंने 10 साल से ज़्यादा अनुभव वाले कई developers भी देखे हैं जो मजबूत नहीं थे
    • हफ़्ते में 40 घंटे, 5 साल — यह तो असल में software job ही नहीं है क्या?
      junior role में जाकर 5 साल तक काम करते हुए आगे बढ़ना ही काफी लगता है
    • किसी भी पेशे में यही बात लागू होती है
      intuition धीरे-धीरे और कठिन tasks करते हुए बनती है
      किसी मोड़ पर आप एक क्षेत्र में जो जानते हैं उसे दूसरे क्षेत्र से जोड़कर लागू कर पाते हैं, और तब creativity काम करना शुरू करती है
  • 5–6 साल पहले देखे गए video का source नहीं मिल पा रहा, लेकिन उसका सार यह था कि programmers की संख्या बढ़ने के साथ उनमें से बहुसंख्यक के पास 5 साल से कम अनुभव है
    IT और web के जीवन में लगातार बड़ा हिस्सा बनने के context में यह बात समझ में आती थी
    [0] https://youtu.be/ecIWPzGEbFc?si=A4qBR2YdX-0CV2bM wild_egg की comment की वजह से मिला
    20 साल करने के बाद अब ऐसी काफी जानकारी है जिसे मुझे आगे जानने की ज़रूरत नहीं, और 5 साल से कम अनुभव वाले लोगों को शायद जिसकी बिल्कुल ज़रूरत नहीं होगी, ऐसी भी बहुत-सी जानकारी है
    वहीं, अनुभव तो अनुभव है, और चीज़ें किस संरचना में बनी हैं और वे मौजूद क्यों हैं, यह जानना हमेशा मददगार होता है
    मुझसे कम अनुभव होने पर भी कई programmers ऐसे हैं जो ऐसी बहुत-सी चीज़ें कर सकते हैं जिनकी मैं कल्पना भी नहीं कर सकता
    सच कहूँ तो Turing completeness वाला यह क्षेत्र काफी विशाल है

    • मैंने 40 साल programming की है, जिनमें से 33 साल इसे पेशे के तौर पर किया, लेकिन Scrum के अलावा कुछ याद नहीं आता जिसे सीखना मुझे बर्बादी लगा हो
      syntax मैंने अलग से कभी याद नहीं किया; हमेशा man pages और manuals खुले रखकर programming की
      लेकिन सीखी गई हर language और technology ने computing और systems की मूल समस्याओं के बारे में कुछ उपयोगी सिखाया
      समस्याओं से निपटने के तरीके अलग कपड़े पहन लेते हैं, लेकिन समस्या खुद वैसी ही रहती है
      कोई shortcut नहीं है, और मुझे पक्का पता है कि programmer के रूप में आज का मैं 5वें साल वाले मुझसे कई orders of magnitude ज़्यादा सक्षम हूँ
      नई चीज़ें सीखने और नया काम करने को लेकर मैं पहले से ज़्यादा उत्साहित हूँ, क्योंकि वे इस technology के और हिस्से खोलेंगे
      चिंता बस यह है कि किसी दिन शरीर और दिमाग साथ न दें; यह नहीं कि सीखने को चीज़ें खत्म हो जाएँगी या युवा लोग मुझसे आगे निकल जाएँगे
    • वह शायद Bob Martin की "The Future of Programming" talk की बात होगी
      https://youtu.be/ecIWPzGEbFc?si=A4qBR2YdX-0CV2bM
    • यह क्षेत्र युवा है, इसलिए तेज़ी से विकसित होता है, और इस वजह से बहुत-सी अस्थायी जानकारी जमा होना स्वाभाविक है
      अभी भी यह alchemists के दौर जैसा लगता है
      किसी दिन chemists आएँगे, ad-hoc observations को व्यवस्थित करेंगे और बहुत कुछ छोड़ देंगे
      तब तक… Newton भी alchemist थे, फिर भी उन्होंने काफी बड़ा योगदान दिया