- हाल ही में एक प्रसिद्ध tech CEO और एक engineer के साथ बातचीत में software development की एक दिलचस्प methodology के बारे में सुना। इस methodology ने मुझे दूसरी heuristics और generalization के बारे में सोचने पर मजबूर किया.
उनकी विधि
- दिन की शुरुआत में किसी feature पर काम शुरू करें। अगर दिन खत्म होने तक वह पूरा न हो, तो सब कुछ delete कर दें और अगले दिन फिर से शुरू करें। लिखे गए unit tests को रखा जा सकता है।
- अगर कई दिनों बाद भी feature implement न हो, तो उस feature को संभव बनाने वाली foundation, infrastructure या refactoring के बारे में सोचें, उसे implement करें, और फिर feature पर वापस आएँ।
- यह तरीका 90 के दशक के अंत और 2000 के दशक की शुरुआत के extreme programming movement जैसा है।
इस विधि पर विचार
"हर चीज़ को दो बार लिखो"
- junior engineers को दी जाने वाली सलाह: समस्या हल करो, code को branch में save करो, फिर उसे दोबारा लिखो।
- यह तरीका संयोग से तब मिला जब laptop खराब हो गया। दोबारा लिखने में शुरुआती implementation के सिर्फ 25% समय लगा, और नतीजा कहीं बेहतर था।
- 1.25 गुना समय में 2 गुना बेहतर quality का code मिल सकता है। यह लंबे समय तक maintenance वाले projects के लिए उपयोगी है।
- "हर दिन फिर से शुरू करो" तरीका इससे भी अधिक extreme है। हर rewrite के साथ अक्सर अधिक smooth solution मिलता है।
"मात्रा की अपनी गुणवत्ता होती है"
- Stalin का एक उद्धरण software engineers पर भी लागू होता है। junior engineers के लिए शुरुआती 100,000 lines of code लिखना लगभग अनिवार्य है।
- "हर दिन फिर से शुरू करो" तरीका 100,000 lines जल्दी लिखने में मदद करता है।
- एक ही समस्या को बार-बार हल करना patterns को याद रखने के लिए फायदेमंद है।
- 5,000 lines के बेहतरीन code में आप सभी मुख्य patterns देख सकते हैं। बाकी 95,000 lines repetition के ज़रिए neurons को फिर से व्यवस्थित करती हैं।
"सिर पर बंदूक रखकर" heuristic से तुलना
- जब कोई समस्या का समाधान पेश करे, तो पूछें: "अगर इसे 24 घंटे के भीतर खत्म करना ही पड़े, तो आप क्या करेंगे?"
- यह तरीका framing और anchoring bias को तोड़ता है। अक्सर यह कुछ ही मिनटों में ऐसा plan निकाल देता है जिसे एक दिन में पूरा किया जा सके।
- व्यवहार में वह plan सचमुच एक दिन में पूरा होने वाला नहीं होता, लेकिन नया solution अक्सर कुछ दिनों में पूरा किया जा सकता है।
- इस thought experiment का उद्देश्य वास्तविक solution बनाना नहीं, बल्कि solution की lower bound तय करना है।
pathfinding
- समस्या-क्षेत्र में रास्ता खोजना ही मूल बात है। हर path एक solution है, और engineer की भूमिका सबसे अच्छा path ढूँढना है।
- इन heuristics और अलग-अलग pathfinding algorithms के बीच समानताओं पर विचार करना सार्थक है।
- engineering heuristics के साथ भी यही बात लागू होती है: बेहतर engineer बनना मतलब समस्या-क्षेत्र में बेहतर paths ढूँढना।
GN⁺ का सार
- यह लेख software development में प्रभावी methodologies और heuristics की पड़ताल करता है।
- "हर दिन फिर से शुरू करो" और "हर चीज़ को दो बार लिखो" जैसे तरीके code quality बढ़ाने में उपयोगी हैं।
- बार-बार समस्या हल करना pattern recognition और neurons के पुनर्संयोजन में मदद करता है।
- "सिर पर बंदूक रखकर" heuristic solution की lower bound तय करने में उपयोगी है।
- समस्या-क्षेत्र में सबसे अच्छा path ढूँढना engineer की मुख्य भूमिका है।
5 टिप्पणियां
पागल हो गए हैं क्या? यह तो वही कर सकते हैं जिन लोगों के पास बेहिसाब फालतू समय हो—क्या यह हकीकत में कोई वाजिब काम लगता है?
कोरियाई SI माहौल में यह शायद मुमकिन नहीं होगा.. haha शायद सिर्फ़ personal project में ही
यह तरीका वाकई ऐसा है जिसके बारे में मैंने बिल्कुल नहीं सोचा था।
इसे एक बार ज़रूर आज़माना पड़ेगा, हा हा
मैं फिर से लिखने वाली बात से पूरी तरह सहमत हूँ.
पहले एक बार जिस कोड पर काम कर रहा था, उसे गलती से उड़ा दिया था, और जब उसे दोबारा लिखने लगा
तो बीच में डिज़ाइन बदलना झंझट लगे इसलिए जिन चीज़ों को नज़रअंदाज़ कर दिया था, उन्हें ध्यान में रखकर बना पाया,
और नतीजा बल्कि बेहतर रहा.
Hacker News राय
नई feature को दो बार लिखना एक अच्छी strategy है। लेकिन business developer या project manager को यह बेवजह की देरी लग सकती है
"अगर इसे 24 घंटे में पूरा करना हो तो?" यह वह सवाल है जो project manager नहीं पूछ सकता
अच्छा code सही abstraction चुनकर लिखा जाता है
अगर सक्षम सहकर्मी हों, तो वे दिखा सकते हैं कि कम समय में क्या किया जा सकता है
software को दो बार लिखना अच्छा है, इस बात से सहमत हूँ
अगर कुछ दिनों बाद भी feature implement नहीं हो पा रहा है, तो पहले ज़रूरी infrastructure या refactoring कर लेनी चाहिए
"24 घंटे में" और "हर चीज़ दो बार लिखो" आपस में जुड़े हुए हैं
यह post बेहतरीन "programming advice" में से एक है
कभी-कभी समस्या सुलझाने के लिए background thread चलने देना ज़रूरी होता है
नीचे दिया गया approach उपयोगी है