- प्रोग्रामिंग कौशल 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से बदलने पर भी लगभग वही नतीजे मिलते हैं
- Amazon advanced search में 2000 के बाद शीर्षक में
- ऐसे शीर्षक यह आभास देते हैं कि लोग प्रोग्रामिंग जल्दी-जल्दी सीखना चाहते हैं, या यह कि प्रोग्रामिंग दूसरे क्षेत्रों की तुलना में कहीं आसान है
- 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 बहुत हैं
- उदाहरण के लिए Khan Academy का tutorial
- कम उम्र के शिक्षार्थी 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
- Python Programming: An Intro to CS Python का एक अच्छा introductory पाठ है
- Python.org पर कई beginners tutorials उपलब्ध हैं
-
Oz
- Concepts, Techniques, and Models of Computer Programming को कुछ लोग Abelson & Sussman का आधुनिक उत्तराधिकारी मानते हैं
- यह प्रोग्रामिंग के बड़े विचारों को व्यापक रूप से समेटती है, और भले ही इसमें Oz जैसी कम-प्रसिद्ध भाषा का उपयोग है, यह दूसरी भाषाएँ सीखने की अच्छी नींव बन सकती है
1 टिप्पणियां
Hacker News राय
1999 में मैंने CompUSA से "Sams Teach Yourself C++ in 24 Hours" खरीदी थी; काउंटर वाले कर्मचारी ने उसे देखकर हँसा और मुझे यह लेख बताया
16 साल की उम्र में Borders में programming किताबें देख रहा था, तभी किसी ने मुझे "The C Programming Language" थमा दी, और उसने मेरी ज़िंदगी बदल दी
मेरे career का बड़ा हिस्सा असल दुनिया में developers या programming में रुचि रखने वाले लोगों से संयोग से मिलने से बना
आखिरी बार वैसा एहसास तब हुआ था जब मैं Microcenter से नया MacBook और iPod Touch लेकर निकला और लगा कि अब अगला Angry Birds बनाने के लिए तैयार हूँ
करीब 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 लिखने के अनुभव की वजह से उसे बहुत जल्दी पढ़ पाया
AOL पर email attachments के 100 हिस्सों में Visual Basic 3.0 डाउनलोड करके मैं punter/prog बनाना सीखना चाहता था
किताब का code कॉपी करके program start होने पर sound file चलाने की कोशिश की, और जब वह सच में चला तो मैं हैरान रह गया
बाद में software development में career बना पाना मेरे लिए बड़ा सौभाग्य था
90s में सलाह तो दूर, अविश्वास भरी प्रतिक्रिया मिलना काफी आम था
हर 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 ने वर्षों तक अपने लेख को लगातार सुधारते रहे, यह सम्मान के योग्य है
उन्हें बहुत बार quote किया जाता है, और 10,000-hour rule अब बस meme जैसा लगता है
अब मैंने self-study से programming सीख ली है, लेकिन वह सफर उस समय की कल्पना से कहीं ज्यादा कठिन और घुमावदार था
मैं किताबों से सीखने वाला व्यक्ति भी हूँ, लेकिन ऐसा रवैया अक्सर 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
पेज पर मौजूद पुराना 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
मैंने ऐसे काफ़ी लोगों से मुलाकात की है जो पूछते हैं कि वे नौकरी में या कहीं और programming job कैसे पा सकते हैं
जब मैं अपना रास्ता बताता हूँ—बचपन से सीखना शुरू किया, इसे बड़ा hobby बनाया, फिर computer science degree और internships कीं—तो वे यह सुनकर हैरान और निराश होते हैं कि कोई fast track नहीं है
या क्या कोई fast track है? जानना चाहूँगा कि क्या किसी ने 0 से 1 तक ले जाने वाले bootcamp को सफलतापूर्वक पूरा किया है
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 किए जाने के बाद बंद हो गया
माँ के घर के basement में 8 महीने तक JavaScript basics self-study किए और job मिल गई
उसके बाद मैंने programming में बेहद ज़्यादा समय लगाया, और अब तक दसियों हज़ार घंटे से ज़्यादा हो चुके हैं
compilers, 3D graphics, semiconductors, game engines पर काम किया
मेरा अनुभव शायद दोनों पक्षों को support करता है
2012 के आसपास कम experience के साथ भी industry में प्रवेश करना relatively आसान था, लेकिन बाद में interesting projects वाले लोग जिस अच्छे engineer को hire करना चाहते हैं, वैसा बनने के लिए भारी मेहनत करनी पड़ी
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 से बड़ा है या नहीं, पक्का नहीं कह सकता
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 के बाहर जाना होगा
कुछ महीनों तक इस्तेमाल करने के बाद संयोग से logout हो गया, और official docs ढूँढने की थोड़ी-सी असुविधा अब मुझे उल्टा valuable लग रही है
पहले हफ्ते में खुद को बहुत धीमा महसूस करते देख हैरानी हुई
primary sources से सीखने के लिए extra steps लेना और कभी-कभी असुविधा को महत्व देना, programmer के रूप में बढ़ने के लिए important है
खासकर अगर 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 करने के लिए नहीं
expertise experience से आती है, और experience तभी बनता है जब आप बार-बार लौटते हैं
कुछ लोग खुद को endless struggle में धकेल सकते हैं, लेकिन आम व्यक्ति के लिए बुद्धिमानी यह है कि software का कोई ऐसा हिस्सा ढूँढे जिसे वह सच में प्यार कर सके और उसे grow करे
मैंने coding field में मुझसे स्पष्ट रूप से ज़्यादा smart लोगों को देखा है जो इतने smart थे कि बाहर निकल गए
क्योंकि उन्हें लगा कि यह अब challenging नहीं रहा, या “दूसरों के साथ आने का इंतज़ार करना” जैसे गलत challenge से थक गए
आमतौर पर वे लोग cutting-edge technologies पर काम कर रहे थे जो कुछ साल बाद standard बनती थीं
अगर fascination ही motivation है, तो शायद बहुत ज़्यादा smart न होना सौभाग्य मान सकते हैं
इसे 1998 का article बताया गया है, लेकिन इसमें Clojure और Go जैसे references हैं, इसलिए लगता है कि यह बाद में updated article है
अच्छा लेख है
रोज़ 8 घंटे, हफ़्ते में 40 घंटे के हिसाब से 10,000 घंटे पूरे करने में 250 हफ़्ते लगते हैं
लगभग बिना रुके programming करने पर भी करीब 5 साल लगते हैं, और वास्तविकता में लक्ष्य तक पहुँचने में 10 साल के ज़्यादा करीब समय लगता है
बहुत programming करें तो साल में 3,000 घंटे तक पहुँचना भी आसान है
मैं ज़्यादातर दिनों में रोज़ 12 घंटे, और ज़्यादातर हफ़्तों में हफ़्ते के 6–7 दिन programming करता हूँ
जिन दिनों प्रेरणा बहुत ज़्यादा होती है, 18 घंटे भी कर लेता हूँ
लगभग 10 साल से मैं ऐसा ही करता आ रहा हूँ, और कभी-कभी करीब एक महीने का ब्रेक लेकर इसे हफ़्ते में 3–4 दिन लंबे घंटों तक घटा देता हूँ
बहुत सतर्क हिसाब लगाएँ तो भी यह सालाना करीब 3500 घंटे होता है
इतना ज़्यादा काम करने की वजह यह है कि मुझे programming सचमुच पसंद है, और सुबह surfing को छोड़ दें तो उससे ज़्यादा करने का मन किसी और चीज़ में नहीं लगता
फिर भी एक मजबूत developer बनने के लिए करीब 10 साल का professional अनुभव मोटे तौर पर सही लगता है
मैंने किसी को 5 साल में सचमुच उस स्तर तक पहुँचते नहीं देखा
जो लोग teenage से ही जुनून की हद तक करते आए हैं, वे कुछ साल घटा सकते हैं, लेकिन एक बिंदु के बाद वह अवधि भी overlap हो जाती है
बेशक, यह पुरानी बात भी है कि समस्या “1 साल के अनुभव को 10 बार दोहराने” की होती है
मैंने 10 साल से ज़्यादा अनुभव वाले कई developers भी देखे हैं जो मजबूत नहीं थे
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 वाला यह क्षेत्र काफी विशाल है
syntax मैंने अलग से कभी याद नहीं किया; हमेशा man pages और manuals खुले रखकर programming की
लेकिन सीखी गई हर language और technology ने computing और systems की मूल समस्याओं के बारे में कुछ उपयोगी सिखाया
समस्याओं से निपटने के तरीके अलग कपड़े पहन लेते हैं, लेकिन समस्या खुद वैसी ही रहती है
कोई shortcut नहीं है, और मुझे पक्का पता है कि programmer के रूप में आज का मैं 5वें साल वाले मुझसे कई orders of magnitude ज़्यादा सक्षम हूँ
नई चीज़ें सीखने और नया काम करने को लेकर मैं पहले से ज़्यादा उत्साहित हूँ, क्योंकि वे इस technology के और हिस्से खोलेंगे
चिंता बस यह है कि किसी दिन शरीर और दिमाग साथ न दें; यह नहीं कि सीखने को चीज़ें खत्म हो जाएँगी या युवा लोग मुझसे आगे निकल जाएँगे
https://youtu.be/ecIWPzGEbFc?si=A4qBR2YdX-0CV2bM
अभी भी यह alchemists के दौर जैसा लगता है
किसी दिन chemists आएँगे, ad-hoc observations को व्यवस्थित करेंगे और बहुत कुछ छोड़ देंगे
तब तक… Newton भी alchemist थे, फिर भी उन्होंने काफी बड़ा योगदान दिया