एजेंटिक कोडिंग में डेवलपर की क्षमता की भूमिका
(martinfowler.com)- जैसे-जैसे एजेंट-आधारित coding assistants अधिक सक्षम हो रहे हैं, प्रतिक्रियाएँ बहुत विविध हैं, और कुछ लोग यह दावा करते हैं कि "1 साल के भीतर डेवलपर्स की अब ज़रूरत नहीं रहेगी"
- दूसरी ओर, कुछ लोग AI द्वारा जनरेट किए गए कोड की गुणवत्ता और जूनियर डेवलपर्स को इस बदलते माहौल के लिए कैसे तैयार किया जाए को लेकर चिंता जता रहे हैं
- पिछले कुछ महीनों में Cursor, Windsurf, Cline जैसे एजेंट-आधारित coding helpers का उपयोग किया गया, और ये मौजूदा codebase में बदलाव करने में बहुत प्रभावी रहे
- IDE integration ने विशेष रूप से प्रभावित किया; इसमें tests चलाना और errors को अपने-आप ठीक करना, lint/compile errors का पता लगाना और उन्हें ठीक करना, web search, यहाँ तक कि browser preview फीचर भी शामिल हैं
- डेवलपर और AI के बीच सहयोग का अनुभव बहुत प्रभावशाली है और यह तेज़ी से समस्या सुलझाने तथा features लागू करने में योगदान देता है
- लेकिन फिर भी डेवलपर का लगातार हस्तक्षेप, सुधार और दिशा-निर्देशन आवश्यक था
- कई बार बात वास्तविक commit तक पहुँची ही नहीं, और AI अब भी गैर-तुच्छ कामों के लिए अपने-आप कोड लिखने में पर्याप्त नहीं है
- इसलिए डेवलपर की skills और अनुभव अब भी महत्वपूर्ण हैं, और आगे भी उनका लगातार प्रशिक्षण होना चाहिए
वे क्षण जब डेवलपर को सीधे हस्तक्षेप करना पड़ा
- AI tools ने कुछ क्षेत्रों में लगातार कमजोर प्रदर्शन दिखाया, और यह बात बार-बार सामने आई
- इनमें से कुछ को अतिरिक्त prompts या custom rules से आंशिक रूप से कम किया जा सकता है, लेकिन पूरी तरह नियंत्रित करना संभव नहीं
- LLM कई बार prompt के निर्देशों का सटीक रूप से पालन नहीं करते
- coding session जितना लंबा चलता है, परिणामों की consistency उतनी घटती जाती है
- इसलिए नीचे दिए गए उदाहरण ऐसी समस्याएँ हैं जो prompt या settings से अलग भी पर्याप्त रूप से हो सकती हैं
- AI की गलतियों को उनके impact radius के आधार पर 3 श्रेणियों में बाँटा गया है
- a. डेवलपमेंट स्पीड और commit समय में गिरावट
- AI उल्टा गति धीमी कर देता है
- कुछ मामलों में यह unassisted coding से भी कम प्रभावी होता है
- b. टीम workflow में friction पैदा होना
- एक iteration के भीतर टकराव या सहयोग-संबंधी समस्याएँ पैदा होना
- c. लंबी अवधि में code maintainability का कमजोर होना
- शुरुआत में समस्या न दिखे, लेकिन आगे बदलाव या विस्तार के समय दिक्कतें आएँ
- a. डेवलपमेंट स्पीड और commit समय में गिरावट
- Impact radius जितना बड़ा होगा, टीम को उस समस्या को पहचानने और ठीक करने के लिए उतना ही लंबा feedback loop झेलना पड़ेगा
Impact radius: commit तक पहुँचने के समय में देरी
- इस श्रेणी में वे मामले आते हैं जहाँ AI मददगार होने के बजाय बाधा बना
- क्योंकि यह विफलता का सबसे साफ़ रूप है, इसलिए यह बहुत बड़ी समस्या नहीं बनती
- ज़्यादातर मामलों में commit से पहले ही डेवलपर समस्या को पहचानकर रोक सकता है
-
काम न करने वाला कोड
- AI द्वारा बनाया गया कोड मूल रूप से काम ही नहीं करता
- डेवलपर को इसे सीधे ठीक करना पड़ता है, या AI session बंद करके हाथ से समस्या हल करनी पड़ती है
- अनुभवी डेवलपर्स जल्दी समझ सकते हैं कि गलती कहाँ हुई और क्या करना है
-
समस्या की गलत diagnosis
- AI समस्या के कारण का गलत आकलन करता है और गलत दिशा में समाधान आज़माने लगता है
- पिछले अनुभव के आधार पर डेवलपर AI को गलत रास्ते से वापस ला सका
उदाहरण: Docker build error को architecture setting की समस्या समझकर configuration बदल दी गई
असली कारण गलत architecture पर बनेnode_modulesकी copy थी
क्योंकि यह पहले भी कई बार हुई समस्या थी, इसे जल्दी पहचानकर ठीक किया जा सका
Impact radius: iteration के भीतर टीम workflow
- इस श्रेणी में वे मामले आते हैं जहाँ review या डेवलपर हस्तक्षेप की कमी के कारण iteration के दौरान टीम के भीतर friction पैदा होता है
- लेखक ने पिछले विभिन्न टीम अनुभवों के कारण ऐसी समस्याओं को commit से पहले ही पहचानकर समायोजित कर लिया
- नए डेवलपर्स भी AI के साथ trial and error से ये सीखें हासिल कर सकते हैं
- लेकिन यदि AI की वजह से coding speed बहुत बढ़ जाती है, तो टीम इन समस्याओं को संभाल नहीं पाएगी
-
शुरुआत में ही अत्यधिक काम
- AI में incremental implementation की बजाय पूरे feature को एक साथ व्यापक रूप से करने की प्रवृत्ति होती है
- इससे अगर tech choice गलत हो या feature requirements ठीक से समझी न गई हों, तो बहुत सारा काम बेकार जा सकता है
उदाहरण: frontend stack migration के दौरान पूरे UI components को एक साथ बदलने की कोशिश
backend के साथ integrated सिर्फ एक component से चरणबद्ध तरीके से शुरू करना चाहिए था
-
कारण विश्लेषण के बिना अंधाधुंध समाधान
- AI समस्या के root cause का विश्लेषण किए बिना, सिर्फ ऊपर-ऊपर दिखने वाली error को ठीक करने की कोशिश करता है
- बाद में समस्या सँभालने वाले दूसरे टीम सदस्य पर बिना context के समस्या दोबारा समझने का बोझ आ जाता है
उदाहरण: Docker build के दौरान memory error आने पर कारण ढूँढने के बजाय सिर्फ memory settings बढ़ा दी गईं
-
डेवलपर workflow का जटिल होना
- AI द्वारा बनाया गया build/run तरीका developer experience को खराब करता है
- अगर इसे तुरंत commit कर दिया जाए, तो दूसरे टीम सदस्यों के workflow पर भी बुरा असर पड़ता है
उदाहरण: frontend और backend चलाने के commands अलग-अलग दे दिए गए
उदाहरण: hot reload फीचर गायब था
उदाहरण: जटिल build settings के कारण डेवलपर और AI दोनों भ्रमित हो गए
उदाहरण: Docker error को पहले से पहचानने के बजाय build के अंतिम चरण में जाकर संभालने की कोशिश
-
गलत समझी गई या अधूरी requirements
- अगर feature requirements साफ़ न हों, तो AI उन्हें गलत समझकर पूरी तरह दूसरी दिशा में implementation कर सकता है
- शुरुआत में हस्तक्षेप करके इसे ठीक करना आदर्श है, लेकिन autonomous AI हो या बिना सोचे काम करने वाला डेवलपर, बाद में सुधार की लागत बढ़ जाती है
- ऐसी गलत implementations बाद में story की प्रगति के दौरान पकड़ी जाती हैं और काफी rework तथा communication cost पैदा करती हैं
Impact radius: लंबी अवधि की maintainability में गिरावट
- यह सबसे छिपा हुआ और खतरनाक impact radius है
- शुरुआत में कोड सामान्य रूप से काम करता दिखता है, लेकिन बाद में बदलाव और विस्तार करना कठिन हो जाता है
- ऐसी समस्याएँ अक्सर कई हफ्तों या महीनों बाद ही सामने आती हैं
- खासकर इस क्षेत्र में लेखक के 20+ वर्षों के विकास अनुभव ने सबसे बड़ी भूमिका निभाई
-
लंबा-चौड़ा और दोहराव वाला test code
- AI test generation में अच्छा है, लेकिन अक्सर ये समस्याएँ आती हैं:
- मौजूदा tests में integrate करने की बजाय नई test functions बना देता है
- जो हिस्से पहले से covered हैं, उन पर भी बहुत ज़्यादा assertions जोड़ देता है
- नए डेवलपर्स के लिए एक भ्रामक बात: ज़्यादा tests ≠ बेहतर tests
- duplication जितनी बढ़ती है, maintainability उतनी कठिन होती जाती है, और code बदलने पर बहुत सारे tests fail होने की संभावना बढ़ती है
- custom commands से इसे कम करने की कोशिश की गई, लेकिन यह अब भी बार-बार होता है
- AI test generation में अच्छा है, लेकिन अक्सर ये समस्याएँ आती हैं:
-
reusability की कमी
- AI द्वारा लिखा गया कोड अक्सर कम modular होता है, इसलिए उसे दोबारा इस्तेमाल करना कठिन होता है
उदाहरण: पहले से मौजूद UI component को पहचान न पाना और उसका duplicate implementation कर देना
उदाहरण: CSS classes का उपयोग करने के बजाय inline styles का अत्यधिक इस्तेमाल
- AI द्वारा लिखा गया कोड अक्सर कम modular होता है, इसलिए उसे दोबारा इस्तेमाल करना कठिन होता है
-
ज़रूरत से ज़्यादा जटिल या verbose code
- AI कई बार ज़रूरत से अधिक कोड बना देता है, इसलिए गैर-ज़रूरी हिस्सों को हाथ से हटाना पड़ता है
- इससे maintenance cost बढ़ती है और बदलाव करते समय error की संभावना भी बढ़ती है
उदाहरण: CSS बदलते समय बहुत सारे duplicate styles को एक-एक करके हटाना पड़ना
उदाहरण: JSON data दिखाने के लिए अनावश्यक रूप से जटिल web component बना देना
उदाहरण: refactoring के दौरान मौजूदा dependency injection chain को न पहचानना,
और पहले से inject किए गए value को फिर एक और parameter के रूप में पास करके design को और जटिल बना देनाvalue = service_a.get_value(); ServiceB(service_a, value=value)रूप
निष्कर्ष: क्या AI सारा कोड लिख सकता है?
- अब तक के अनुभव के आधार पर, 1 साल के भीतर AI द्वारा पूरे कोड का 90% स्वायत्त रूप से लिख दिया जाना व्यावहारिक रूप से संभव नहीं
- हालाँकि, कोड लिखने में सहायक भूमिका के रूप में कुछ टीमों और codebases में 90% तक सहायता संभव है
- वास्तव में लेखक 15K LOC के मध्यम-जटिलता वाले प्रोजेक्ट में लगभग 80% तक AI की मदद ले रहा है
AI की गलतियों को रोकने के तरीके
-
व्यक्तिगत डेवलपर स्तर पर क्या किया जा सकता है
- AI द्वारा बनाए गए कोड की हमेशा सावधानी से review करें
- ऐसा लगभग कभी नहीं होता कि उसमें सुधार की ज़रूरत न हो
- अगर AI session भ्रमित करने लगे तो उसे तुरंत रोक दें
- prompt बदलें, या सीधे manual काम पर लौट जाएँ (जिसे कभी-कभी "हैंडमेड coding" भी कहा जाता है)
- कम समय में चमत्कारिक रूप से बने "विश्वसनीय दिखने वाले" solutions से सावधान रहें
- उनमें लंबी अवधि की maintenance cost छिपी हो सकती है
- pair programming अपनाएँ
- 4 आँखें, 2 दिमाग बेहतर निर्णय देते हैं
- AI द्वारा बनाए गए कोड की हमेशा सावधानी से review करें
-
टीम और संगठन स्तर पर प्रतिक्रिया रणनीतियाँ
- मौजूदा code quality monitoring tools का सक्रिय उपयोग करें
- उदाहरण: Sonarqube, Codescene
- AI tools का उपयोग करते समय code duplication, code smells आदि पर और अधिक बारीकी से नज़र रखनी चाहिए
- Pre-commit hook और IDE-integrated code review सेट करें
- विकास की शुरुआत में ही समस्याएँ पकड़ने के लिए shift-left strategy को मज़बूत करें
- अच्छी code quality habits को फिर से स्थापित करें
- टीम के भीतर AI code से पैदा हुई समस्याओं के उदाहरणों ("Go-wrong log") को साप्ताहिक retrospectives में साझा करें
- custom rules का सक्रिय उपयोग करें
- अधिकांश AI tools prompt के साथ भेजे जाने वाले ruleset को configure करने की सुविधा देते हैं
- टीम मिलकर ruleset को बेहतर बनाकर AI की गलतियाँ कम कर सकती है
- लेकिन session जितना लंबा होता है, rules को ignore किए जाने की संभावना उतनी बढ़ती है
- विश्वास और संवाद पर आधारित team culture बनाएँ
- AI को अपनाना एक नया बदलाव है, और यह समझना चाहिए कि सब अभी सीखने की अवस्था में हैं
- "AI है, तो और तेज़ काम करो" जैसी दबाव वाली संस्कृति quality risk बढ़ाती है
- psychological safety वाली टीमों में समस्याएँ साझा करना और उनसे सीखना अधिक सक्रिय रूप से होता है
- मौजूदा code quality monitoring tools का सक्रिय उपयोग करें
4 टिप्पणियां
जो लोग उस टूल का इस्तेमाल कर रहे हैं, वे क्षमता से अलग देखें तो आखिर सभी डेवलपर ही होंगे.... आगे चलकर यह कहकर प्रचार करना कि डेवलपर की ज़रूरत नहीं रहेगी, थोड़ा अजीब लगता है।
आगे चलकर क्या होगा, कहना मुश्किल है, लेकिन अभी तो इसे मुख्यधारा में इस्तेमाल करने लायक नहीं लगता... मैंने हाल ही में Cursor इस्तेमाल किया, लेकिन वह basic file import path भी ठीक से नहीं पकड़ पा रहा था। फिर भी, मैं क्या बनाना चाहता हूँ यह कुछ हद तक पहले से अंदाज़ा लगा लेना काफ़ी हैरान करने वाला था।
जब Docker build के दौरान memory error आया, तो शुरुआत में यह पूछने के बजाय कि आखिर इतनी memory इस्तेमाल क्यों हो रही थी, memory setting बढ़ा दी गई
-> क्योंकि.. पहले भी अनगिनत मामलों में हम यही करते आए हैं।
-> आज का AI, दरअसल हमारे अतीत का ही रूप है
Hacker News राय
आजकल ज़्यादातर development के लिए Cursor का इस्तेमाल करता हूँ। यह लेख मेरे अनुभव से बहुत मिलता-जुलता है
मैं AI का इस्तेमाल इस तरह करता हूँ: IDE में writing assistant की तरह, जो मुझे एक बहुत smart और sophisticated rubber duck की तरह जवाब देता है
मुझे यह बिल्कुल समझ नहीं आता
उदाहरण: Docker build के दौरान memory error आने पर, शुरुआत से यह पूछने के बजाय कि इतनी memory इस्तेमाल ही क्यों हो रही थी, उसने memory setting बढ़ा दी
developer skill अब भी ज़रूरी है — अगर आप चला नहीं सकते, तो steer भी नहीं कर सकते। लेकिन developer energy का क्या? AI से पहले मैं दिन में लगभग 2 घंटे ही coding कर पाता था (यानी असली code-writing time)। लेकिन Claude Code के साथ मैं बिना रुके आसानी से 5 घंटे coding कर सकता हूँ। यह साइकिल की जगह electric bicycle चलाने जैसा लगता है। AI मुझे Steve Jobs के "bicycle for the mind" रूपक जैसा लगता है — यह मुझे replace नहीं करता, लेकिन अब मैं बहुत ज़्यादा दूर और तेज़ जा सकता हूँ
यह diagram बहुत relatable है — हमारी team यहाँ दी गई हर चीज़ पर टिक करती है। और अभी हम AI का इस्तेमाल भी नहीं कर रहे! सोचो जब हम आखिरकार AI इस्तेमाल करेंगे तब क्या होगा...
जो बात मुझे साफ़ दिखती है, वह यह है: मेरे आसपास AI का इस्तेमाल हो रहा है
AI को बहुत steer करना पड़ता है, लेकिन मैं अब भी इस आशावादी सोच पर कायम हूँ कि बेहतर prompts से बेहतर agents मिलेंगे
मैं यह कहकर शुरुआत करना चाहता हूँ कि AI tools उन चीज़ों में हमेशा खराब नहीं होते जिन्हें मैंने गिनाया है
क्या Martin Fowler अब अपनी website पर जगह किराए पर दे रहे हैं?