- नई कंपनी में शामिल होते समय सबसे पहले मैंने एक नई notebook खरीदने का काम किया, और यह सिर्फ एक साधारण खुशी नहीं थी, बल्कि इस समझ से आया था कि यह डेवलपर के रूप में एक core tool है
- coding सिर्फ अंतिम चरण है; उससे भी अधिक महत्वपूर्ण है क्या और कैसे बनाना है, इस पर सोचने की प्रक्रिया, और यह अक्सर computer पर नहीं बल्कि notebook से शुरू होती है
- notebook में लिखकर और चित्र बनाकर सोच को visualize करने से अमूर्त विचार ठोस बनते हैं, knowledge gaps भी सामने आते हैं, और इससे बेहतर design में मदद मिलती है
- अपने लिखे code को लिखित रूप में समझाते हुए दोबारा review करने की आदत mismatch या गलत design को खोजने वाले एक प्रभावी refactoring tool की तरह काम करती है
- इस तरह के रिकॉर्ड भविष्य के अपने लिए भी decision-making के context को फिर से समझने की सामग्री के रूप में उपयोगी होते हैं, और एक तरह के automated retrospective document बन जाते हैं
pen और notebook सबसे महत्वपूर्ण क्यों हैं
- काम के पहले दिन से पहले जिन चीज़ों का मुझे सबसे ज़्यादा इंतज़ार था, उनमें एक थी नई notebook चुनना
- डेवलपर के लिए notebook सिर्फ record रखने का tool नहीं, बल्कि सोचने का tool है
- coding, सोच की प्रक्रिया के आखिर में आने वाला execution है, और क्या बनाना है इस पर विचार करना उससे अधिक महत्वपूर्ण है
- कई बार, computer के सामने creative thinking अच्छी तरह नहीं बहती
- editor खोलते ही इंसान “working code” पर ही केंद्रित ‘function mode’ में चला जाता है
computer से दूर जाकर सोचना
- टहलते हुए, या notebook लेकर sofa या बाहर बैठकर समस्या पर विचार करना
- नई समस्या के लिए approach design, UI sketch, flowchart, और मौजूदा code के data flow analysis तथा feature extension ideas को notebook में व्यवस्थित करना
- लिखाई और चित्रों के ज़रिए सोच को visualize करना अस्पष्ट ideas को ठोस बनाने में बेहद प्रभावी है
- जो logical gaps सिर्फ दिमाग में सोचते समय जल्दी छूट जाते हैं, वे writing में साफ़ दिखाई देने लगते हैं
writing सबसे अच्छा refactoring tool है
- code लिखने के बाद, ऐसे लिखने की आदत जैसे किसी दूसरे व्यक्ति को समझा रहे हों
- संभव हो तो blog पर सार्वजनिक रूप से, लेकिन internal document के रूप में भी समझाने की प्रक्रिया में inconsistency, खराब design, गलतियाँ आदि का पता चलता है
- संबंधित पोस्ट: लिखना मेरा सबसे पसंदीदा refactoring tool है
सोच का उप-उत्पाद और रिकॉर्ड की संपत्ति
- writing-based thinking का एक और फायदा यह है कि सोच के निशान स्वाभाविक रूप से रिकॉर्ड के रूप में बच जाते हैं
- अलग से documentation न भी करें, तो सोच को व्यवस्थित करने का उप-उत्पाद बेहतरीन retrospective material बन जाता है
- बाद में अगर कोई (खासकर भविष्य का मैं) पूछे कि “ऐसा क्यों किया”, तो notebook खोलकर ठीक वैसा ही समझाया जा सकता है
डेवलपर notebook लिखने पर और गहराई से
1 टिप्पणियां
Hacker News की राय
यह सचमुच एक शानदार चर्चा लग रही है। मेरे हिसाब से मूल बात लैपटॉप या डिजिटल टूल अपने-आप में नहीं हैं, बल्कि वह चीज़ है जो मेरे दिमाग़ के गियर बदल देती है। हर बार जब मैं मोड बदलता हूँ, दिमाग़ अलग तरह से ध्यान देता है, इसलिए नया कॉन्टेक्स्ट फोकस, क्रिएटिविटी और मेमोरी बढ़ा देता है। उदाहरण के लिए, जब मैं लगातार सिर्फ कोडिंग कर रहा था, तब रात में लिखने जैसा नया शौक शुरू किया और लगा जैसे दिमाग़ रीसेट हो गया हो; दिन के समय की उत्पादकता भी सचमुच बढ़ गई। प्लानिंग करते समय थोड़ी देर के लिए डिजिटल से पेन और कागज़ पर जाना भी रूटीन तोड़ता है और दिमाग़ को अलग तरह से काम करने देता है। आख़िरकार अहम बात टूल नहीं, बल्कि बदलाव के ज़रिए जाग्रत होना है
सोचता हूँ आजकल के डेवलपर्स में कितनों ने मजबूरी में बेसिक ड्राफ्टिंग क्लास ली होगी। LEGO से खेलने वाले तो बहुत होंगे। जब किसी 3D ऑब्जेक्ट को 2D कागज़ पर समझाना होता है, तो आमतौर पर तीन दिशाओं से उसके प्रोजेक्शन बनाने पड़ते हैं, और अगर चीज़ 3D से भी ज़्यादा जटिल हो, तो समझाने के लिए और ज़्यादा एंगल चाहिए होते हैं
किताब 'Smarter Faster Better' में पढ़ा हुआ 'disfluency' का कॉन्सेप्ट मुझे बहुत प्रभावशाली लगा था। असुविधाजनक फ़ॉन्ट, नया माहौल, अलग टूल—ये सब हमें ऑटोपायलट मोड से बाहर निकालकर नए सिरे से सोचने पर मजबूर करते हैं। मैंने यह कॉन्सेप्ट कहीं और नहीं देखा, लेकिन पिछले 9 सालों में इसने प्रॉब्लम सॉल्विंग और सीखने के मेरे तरीके को पूरी तरह बदल दिया है। मेरे लिए भी नोटबुक पर शिफ्ट होना इस असर को पैदा करने वाला एक अच्छा ट्रिगर है
मेरे मामले में मैं वास्तव में नोट्स तीन माध्यमों में रखता हूँ: कागज़ की नोटबुक, पुराना रिकॉर्डर, और टेक्स्ट फ़ाइलें। हर माध्यम के अपने अलग फायदे-नुकसान हैं, इसलिए आइडिया भी अलग रूप में सामने आते हैं। रिकॉर्डर अब कम इस्तेमाल होता है, लेकिन समय कम हो और जल्दी आगे बढ़ना हो, तब वह सबसे अच्छा रहता है। बाद में रिकॉर्डिंग सुनकर उसे फिर से लिखने पर, हर दोहराव में आइडिया थोड़ा अलग रूप लेता है। इस तरह एक ही आइडिया को कई कोणों से देख सकता हूँ
मैंने कभी एक रिसर्च के बारे में सुना था कि context switching (काम बदलना) की औसत लागत लगभग 15 मिनट होती है। यह कितना सही है, पता नहीं, लेकिन मेरे मैनेजर्स भी इस बात को लेकर बहुत सजग रहे हैं और उसका सम्मान करते हैं
मैंने यह अनुभव लाइव वेबिनार सीरीज़ सुनते समय किया, जब मैं उसी समय पेन और कागज़ से नोट्स ले रहा था। शुरुआत में साथ चलना बहुत मुश्किल था, लेकिन कुछ दिनों बाद सुनने और लिखने के बीच का यह स्विच मैं बेहतर करने लगा, और लगा कि ऑडियो जानकारी ज़्यादा अच्छी तरह याद रहने लगी
जिन सबसे बुद्धिमान लोगों से मैं गणित, भौतिकी और कंप्यूटर साइंस में मिला हूँ, उनमें से कुछ लोग तो नोटबुक भी नहीं रखते। वे बस प्रिंटर पेपर पर पेन से लिखते हैं और काम ख़त्म होने पर फेंक देते हैं। बहुत पुराने निजी नोट्स में उपयोगी चीज़ मिलने का अनुभव मुझे लगभग कभी नहीं हुआ। वास्तव में महत्वपूर्ण बात यह है कि उसे दस्तावेज़ बनाकर इस तरह छोड़ो कि दूसरे भी उसे खोज सकें, और जिसे सचमुच याद रखना हो, उसे spaced repetition वाले flashcards से सीखो। बेशक, यह मेरा तरीका है और दूसरों पर लागू न भी हो सकता है। इस लेख का शीर्षक बस एक डेवलपर की फ़िलॉसफ़ी साझा करने के लिए है, यह कहने के लिए नहीं कि हर किसी को ऐसा ही करना चाहिए। अगर पेन और नोटबुक तुम्हें सूट नहीं करते, तो मत इस्तेमाल करो
वैज्ञानिक नज़रिए से देखें तो कुछ लिखना मेमोरी, याद रखने की क्षमता और सीखने की शक्ति को बेहतर करता है। लिखी हुई चीज़ को तुरंत फेंक देने पर भी असर बना रहता है। इस पर एक लेख भी है। हाथ से लिखना टाइपिंग की तुलना में ज़्यादा इंद्रियों और दिमाग़ के हिस्सों—खासकर motor cortex—को सक्रिय करता है। मैं भी अक्सर इसे बहाना बनाकर Moleskine खरीदने का सोचता हूँ, लेकिन हस्तलिखित नोट्स मेरे workflow में फिट नहीं बैठते। मैं साधारण text buffer में बहुत सारा टाइप करता हूँ और बाद में GPT जैसे LLM से उसे प्रोसेस करता हूँ। जब दिमाग़ रुक जाता है, तब भी अगर मैं बिना समझे शब्द ही टाइप करता रहूँ, तो धीरे-धीरे सोच वापस आने लगती है, और उसी सामग्री से to-do list, email draft, code draft जैसी चीज़ें निकल आती हैं। इस प्रक्रिया में शुरुआती ज़्यादातर खरड़ मिट जाते हैं। फिर भी याददाश्त के लिए हाथ से लिखना ज़्यादा मददगार है
इस बात से सहमत हूँ कि पुराने नोट्स अक्सर बेकार होते हैं। लेकिन मैं अब भी उन नोटबुकों और कागज़ों को संभालकर रखता हूँ। बहुत समय बाद उन्हें देखना पुराने पारिवारिक फ़ोटो देखने जैसा लगता है—जैसे मेरी पुरानी सोचने की प्रक्रिया की तस्वीरें हों
मेरा दिमाग़ भी कुछ ऐसा ही काम करता है। मेरे पास भी नोट्स होते हैं, लेकिन एक दिन के विचार बस एक पन्ने में आ जाते हैं। अगले दिन अगला पन्ना। मैं लगभग कभी पीछे जाकर नहीं देखता। शायद अतीत को देखने में कुछ मूल्य हो, लेकिन मैं वास्तव में ऐसा कर नहीं पाता
मेरे लिए नोट्स तभी असरदार होते हैं जब वे पूरी तरह मुक्त और असंरचित हों। कीबोर्ड से उस प्रवाह को पकड़ना मुश्किल है। मैं उनका उपयोग non-linear, non-verbal, relational, spatial डेटा या short-term memory वाली जानकारी लिखने के लिए करता हूँ। समय-समय पर नोट्स की समीक्षा करके अर्थपूर्ण जानकारी को calendar, ticket, wiki, spaced repetition जैसी रिकॉर्ड सिस्टमों में ट्रांसफर कर देता हूँ। अंत में सुरक्षित रखने लायक सामग्री बहुत कम निकलती है, लेकिन वह ठीक है। कागज़ की नोटबुक मेरे लिए आधिकारिक रिकॉर्ड सिस्टम नहीं, बल्कि working memory का विस्तार है
पहले मैं अक्सर अपने नोट्स खो देता था। अब मैं टेक्नोलॉजी टूल्स से नोट्स को टेक्स्ट में बदलकर Obsidian vault में व्यवस्थित करता हूँ। आगे चलकर नोट्स के बीच कनेक्शन अपने-आप खोजने या टैग लगाने जैसी चीज़ें आज़माना चाहता हूँ, ताकि आइडिया ढूँढना आसान हो जाए
नोटबुक को "सबसे महत्वपूर्ण टूल" कहना कुछ ज़्यादा ही रोमांटिक है। कुछ लोगों के लिए यह उपयोगी हो सकता है, लेकिन यह कहना कि यह debugger, version control, या CI से भी ज़्यादा महत्वपूर्ण है, अतिशयोक्ति है। सॉफ़्टवेयर इंजीनियरिंग कोई कारीगरी का cosplay नहीं है
OP यहाँ। जब भी मेरा ब्लॉग HN पर आता है, लोग कहते हैं कि "मैं भ्रम में जी रहा हूँ" या "यह शुद्ध रोमांटिसिज़्म है"। तुम्हारे बताए टूल्स निश्चित ही महत्वपूर्ण हैं। version control या debugger के बिना डेवलपमेंट अक्षम होगा, इसलिए मैं भी उनसे बचना नहीं चाहूँगा। लेकिन मेरे लिए नोटबुक सचमुच ज़्यादा महत्वपूर्ण है। कोड लिखने और चलाने वाले टूल्स तो बस काम को संभव बनाते हैं; सॉफ़्टवेयर डेवलपमेंट में असली महत्वपूर्ण चीज़ है कुछ मूल्यवान बनाना और समस्याएँ हल करना। उस संदर्भ में कोड खुद केवल एक छोटा-सा implementation step है। क्या बनाना है और कैसे बनाना है, इस पर सोचना कहीं ज़्यादा ज़रूरी है। कुछ लोग code editor या डिजिटल टूल्स में बेहतर सोच पाते होंगे। लेकिन मैं अगर सिर्फ code editor में रहूँ, तो बहुत जल्दी implementation details में फँस जाता हूँ और पूरे ढाँचे के बारे में सोचना मुश्किल हो जाता है। इसलिए मेरे लिए नोटबुक को कोडिंग से पहले और बाद में साथ इस्तेमाल करना मेरे काम का बेहद केंद्रीय हिस्सा है। अगर यह टूल मेरे पास न हो, तो मेरी सोचने की क्षमता, समस्या-सुलझाने की शक्ति और क्रिएटिविटी काफ़ी कुंद हो जाएगी, और मैं ख़राब सॉफ़्टवेयर बनाऊँगा
तुम जिस बात की बात कर रहे हो वह software engineering नहीं, software fabrication है। blue-collar (मैदानी कामगार) और white-collar (इंजीनियर) के बीच का अंतर इसी 'टूल' को लेकर रवैये में है। इंजीनियर के लिए slide rule हो, calculator हो या supercomputer—वे सिर्फ 'टूल' हैं। टूल की वजह से इंजीनियरिंग नहीं होती। सार है 'सोचना', और टूल सिर्फ उस प्रक्रिया को तेज़ या आसान बनाते हैं। fabrication करने वाले के लिए मशीन ही सब कुछ है। मशीन न हो तो widget का उत्पादन नहीं हो सकता। सार 'उत्पादन' नहीं, 'विचार' है
यह कुछ ऐसा कहने जैसा लगता है: "घर बनाते समय हथौड़ा, blueprint से ज़्यादा महत्वपूर्ण है। यह art class नहीं, construction site है"
यह बात उठाने के लिए धन्यवाद। इसी तरह बहुत से लोग productivity systems पर बेहिसाब समय खर्च करते हैं, gtd नोट्स को tabs और lists से सजाते हैं, लेकिन वास्तव में कोई उत्पादक काम नहीं कर पाते। लोग Obsidian workflow के बारे में बहुत लिखते हैं, पर सच में कोई अर्थपूर्ण नोट्स नहीं रखते। ऐसे लोग भी बहुत हैं जो ब्लॉग बनाने में ही सारा समय लगा देते हैं, लेकिन लिखते कुछ नहीं। (मैं भी ऐसा कर चुका हूँ।) "यह कारीगरी का cosplay नहीं, software engineering है"—यह पंक्ति मुझे बहुत पसंद आई, इसे नोट कर लेता हूँ
"craftsmanship cosplay" वाक्यांश बहुत अच्छा है। काश हर कमेंट के साथ नौकरी, करियर, उम्र, आय और शिक्षा का डेटा भी दिखता। आख़िरकार राय सफल software development से ज़्यादा बोलने वाले व्यक्ति के बारे में बताती है। OP ने बस वही तरीका अपनाया है जिसमें उसका फोकस और क्रिएटिविटी सबसे अच्छा काम करती है। मूल पोस्ट या उसकी आलोचना को किसी मानक की तरह लेना ही ग़लती है। पैटर्न की नकल करना आख़िरकार cargo cult जैसा व्यवहार बन जाता है
ज़्यादातर कमेंट्स शायद 'पेन और कागज़' वाले भौतिक हिस्से पर फोकस कर रहे हैं, लेकिन लगता है वे असली मूल सिद्धांत को मिस कर रहे हैं। लेखक पेन और कागज़ इसलिए इस्तेमाल करता है क्योंकि कंप्यूटर के सामने बैठते ही वह अपने-आप "implementation mode" में चला जाता है और design की बजाय implementation पर ज़ोर देने लगता है। यानी महत्वपूर्ण बात यह है कि जब design की ज़रूरत हो, तो सिर्फ implementation में डूब मत जाओ; अपने लिए संतुलन कैसे बनाए रखना है, यह तुम्हें खुद चुनना होगा
आख़िरकार यह सब personal productivity का मामला है। अलग-अलग तरीके आज़माओ और अपने लिए सही माहौल और process खोजो। पेन और कागज़ हमें अत्यधिक बारीकियों में उलझने या आसानी से भटकने से बचाकर सोचने और design करने की ओर ले जाते हैं। मैं भी कभी-कभी पेन और कागज़ पर सोचता हूँ और कभी सीधे Sublime Text में लिखता हूँ; दोनों मेरे लिए ठीक काम करते हैं
Reddit पर चलने वाला bell curve meme (जिसमें दोनों छोर वाले एक ही हल अपनाते हैं और 'औसत' वाला नाराज़ रहता है) यहाँ बिल्कुल फिट बैठता है। OP ने मूल बात पकड़ ली: कोडिंग से पहले सोचो। अब जब मेरा करियर लगभग आख़िरी दौर में है (मैंने 1988 में शुरुआत की थी, यानी कई दशक हो गए), तो सबसे दिलचस्प चीज़ों में से एक टूल्स का बदलना रहा है। मैं एक बड़ी कंपनी में senior principal software architect हूँ, और एक लाइन कोड भी नहीं लिखता। मेरे सभी deliverables Visio, Word, PowerPoint (कभी-कभी PlantUML) में बनते हैं। abstraction level जितना ऊपर जाता है, टूल्स उतने ही सरल होते जाते हैं। जो architecture मैं बनाता हूँ, वह 10 साल से ज़्यादा चलने वाले military, medical, और automotive tier-1 vendor सिस्टम्स के लिए होता है। वास्तव में implementation में इस्तेमाल होने वाला कोड—ज़्यादातर C, C++, पहले Ada, और आगे शायद Rust—या भाषा architecture को बिल्कुल प्रभावित नहीं करती। असल बात blocks, API, और encapsulation है। क्योंकि असर silicon, security, production, और testing पर पड़ता है। जो चीज़ कुछ slides में समझाई जा सके, वही मुख्य है; कोड खुद नहीं। (हाँ, मेरे diagrams इतने मज़बूत होने चाहिए कि अगर design flaws बाद में मिलें, तो भी वे टिक सकें। वही तो मज़ेदार हिस्सा है)
Leuchturm 1917 A4 Master नोटबुक (dot grid की ज़ोरदार सिफारिश)। इसकी क्वालिटी शानदार है और fountain pen के साथ इस्तेमाल करना सचमुच आनंद देता है। A4 साइज़ इतना बड़ा है कि loose paper भी आसानी से रखा जा सकता है, और खासकर UI design के लिए A4 वास्तव में बेहतरीन आकार है
मैं 20 साल से ज़्यादा समय से सॉफ़्टवेयर बना रहा हूँ, और उससे पहले OChem में PhD और रिसर्च भी की है। ऑस्ट्रेलिया में 'senior' के रूप में अच्छी कमाई करता हूँ। मुझे aphantasia है (यानी मन में छवियाँ बना नहीं पाता), इसलिए मैं पेन और कागज़ या whiteboard का बहुत इस्तेमाल करता हूँ। ERD, mind map, sequence diagram जैसी कई visualizations बनाता हूँ। ReMarkable इस्तेमाल करने से चीज़ों को इधर-उधर ले जाना आसान हुआ है और दक्षता भी बढ़ी है। कुछ लोगों को यह 'शुद्ध रोमांस' लगे, लेकिन मेरी सफलता में पेन और कागज़ अनिवार्य रहे हैं
मैं तरह-तरह के नोट टूल्स और apps के ज़रिए व्यवस्थित आदत बनाने की कोशिश करता रहा, लेकिन इस साल नए साल के संकल्प के तहत मैंने तारीख़ लिखने वाली To-Do नोटपैड की एक गड्डी खरीदी और मीटिंग या काम के दौरान बस खुलकर लिखना शुरू किया—उससे मेरी productivity काफ़ी बढ़ गई। जिसे दिलचस्पी हो, उसके लिए मैंने जो आइटम इस्तेमाल किया साझा कर रहा हूँ
ऑफ़िस में काम करते समय जिन चीज़ों की कमी महसूस होती है, उनमें से एक थी बड़े whiteboard के सामने खड़े होकर सहकर्मियों के साथ design करना। जब हम marker लेकर architecture पर सोचते थे, तब अक्सर सचमुच परिष्कृत class design निकलकर आता था
मैं इसके लिए excalidraw इस्तेमाल करता हूँ, और मुझे यह whiteboard से भी बेहतर लगता है। 1) ज़्यादा सुंदर और कम बिखरा हुआ, 2) digital markers सूखते नहीं, 3) edits और बदलाव करना आसान है। टेक्निकल design शुरू करते समय मैं हमेशा excalidraw से शुरुआत करता हूँ
मैं 24-inch pen display इस्तेमाल करता हूँ। जब मैं CTO था, तब मैंने अपनी पूरी टीम को भी यह दिलवाया था। shared digital whiteboard के साथ बार-बार दोबारा ड्रॉ करने की ज़रूरत नहीं पड़ती, लगातार एडिट कर सकते हैं, इसलिए यह बेहद सुविधाजनक है। whiteboard मिटाने से पहले फ़ोटो लेने की भी ज़रूरत नहीं पड़ती
whiteboard (और blackboard भी) जीवन है