टावर लगातार ऊँचा होता जा रहा है
(lucumr.pocoo.org)- Vibe-coded software का बेतरतीब और अप्रत्याशित ढंग से बदलना उस बाबेल के टावर जैसा लगता है, जहाँ साझा भाषा खो जाने से निर्माण रुक गया था, लेकिन AI युग में फर्क यह है कि समझ टूट जाने के बाद भी निर्माण जारी रहता है
- बड़े पैमाने के software की सीमा सिर्फ किसी व्यक्ति की code उत्पादन गति पर नहीं, बल्कि concepts, boundaries, invariants, ownership और design के कारणों को लेकर साझा समझ को कितनी अच्छी तरह समन्वित किया जाता है, इस पर भी निर्भर करती है
- code exploration, सवालों, reviews और teams के बीच चर्चा में होने वाला friction एक तरफ waste था, तो दूसरी तरफ एक-दूसरे की समझ को synchronize करने और system पर consensus की पुष्टि करने की प्रक्रिया भी था
- Agents OAuth जोड़ने, caching लगाने, database को फिर से बनाने जैसे काम बिना बातचीत के parallel में करते हैं, और हर बदलाव तार्किक हो व tests pass कर जाए, तब भी इंसानों का shared model कमजोर हो सकता है
- AI-assisted engineering में agents हर area की व्याख्या करके उसे modify करते हैं और बिना तुरंत failure के निर्माण जारी रखते हैं, इसलिए इंसानों द्वारा साथ मिलकर system पर reason करने वाली architecture language के खो जाने को पहचानना मुश्किल हो जाता है
बाबेल के टावर की ताकत technology से ज़्यादा coordination में थी
- कुछ vibe-coded software का कुछ हद तक बेतरतीब और अप्रत्याशित तरीके से बदलना Bruegel की The Tower of Babel की याद दिलाता है
- बाबेल के टावर की कहानी को अक्सर अहंकार और महत्वाकांक्षा, और लोगों के अलग-अलग भाषाएँ बोलने लगे होने के कारण के रूप में समझा जाता है, लेकिन साथ ही यह technical progress को संभव बनाने वाली एकजुटता भी दिखाती है
- Genesis 11:3–6 (KJV) में लोग पत्थर की जगह पकी हुई ईंटों और mortar की जगह bitumen का इस्तेमाल करने जैसी technical improvement हासिल करते हैं और आसमान तक पहुँचने वाला शहर और टावर बनाना चाहते हैं
- ईश्वर ने समस्या ईंटों या manufacturing knowledge में नहीं देखी, बल्कि इस बात में देखी कि लोग एक हैं और एक ही भाषा साझा करते हैं, इसलिए उन पर कोई चीज़ रोक नहीं लगाती
- साझा भाषा के जरिए अपने-अपने काम को जोड़ने पर लोग वह बना सकते हैं जो कोई भी अकेले नहीं बना सकता
- ईंटें या manufacturing method नहीं, बल्कि एक-दूसरे को समझने की क्षमता गायब हुई, तो coordination असंभव हो गया और निर्माण भी रुक गया
AI agents friction हटाने के बाद भी ऊपर चढ़ता टावर
- AI-assisted programming व्यक्ति को अधिक शक्तिशाली tools देती है, और agents इस्तेमाल करने वाला developer codebase में कहीं बड़े स्तर के बदलाव कर सकता है
- लेकिन बड़े projects की सीमा सिर्फ इस बात से तय नहीं होती कि कोई व्यक्ति code कितनी तेजी से produce करता है, बल्कि इस बात से भी कि लोग जिस system को बदल रहे हैं, उसकी समझ को कितनी अच्छी तरह coordinate करते हैं
- software project की common language English या Python खुद नहीं, बल्कि इन बातों की साझा समझ है
- हर concept का क्या मतलब है
- system boundaries कहाँ हैं
- कौन-से invariants महत्वपूर्ण हैं
- कौन किस चीज़ का owner है
- system की मौजूदा structure के पीछे क्या कारण है
- यह समझ किसी एक जगह पूरी तरह दर्ज नहीं होती, और docs व code के साथ-साथ code reviews, बातचीत, बहस और दूसरे लोगों को बदलाव समझाने के अनुभवों में भी जमा होती है
- agents से पहले, किसी और की storage layer बदलनी हो तो अक्सर code पढ़ना, सवाल पूछना और dependent services चलाने वाली दूसरी team से बात करनी पड़ती थी
- इस process में waste भी था, लेकिन यह एक व्यक्ति की समझ को दूसरे तक पहुँचाने और यह जाँचने का काम भी करता था कि दोनों पक्ष अभी भी system के काम करने के तरीके पर सहमत हैं या नहीं
- ऐसा friction लोगों की समझ को synchronize करता था
- agents इस friction को काफी कम कर देते हैं, जिससे कई लोग एक-दूसरे से बात किए बिना अलग-अलग बदलाव request कर सकते हैं
- एक व्यक्ति OAuth जोड़ता है, दूसरा caching डालता है, और कोई तीसरा database को शुरू से फिर बनाकर UI को pink कर सकता है
- हर बदलाव अपने-आप में तार्किक हो सकता है, code compile हो सकता है, tests pass हो सकते हैं, और जरूरत पड़ने पर explanation भी generate हो सकती है
- किसी को भी किसी दूसरे से बात करने या उस shared model के किसी हिस्से को हासिल करने की जरूरत नहीं रहती, जिसे पहले बदलाव की प्रक्रिया में सीखा जाता था
- agents दर्द महसूस नहीं करते, दर्द सिर्फ इंसान महसूस करते हैं, और अब ऐसे system areas व codebase भी बदले जा सकते हैं जहाँ पहले किसी और की मदद चाहिए होती थी
- scale बढ़ने पर vibe-coding projects बाबेल के टावर जैसे codebase इसलिए नहीं बनते कि लोग communicate नहीं कर सकते, बल्कि इसलिए कि communicate करने की जरूरत ही नहीं रह जाती
- हर developer के पास एक अथक translator होता है जो टावर के किसी खास हिस्से को समझाता है और इच्छित local change कर देता है
- बदलाव लगातार लागू होते रहते हैं, लेकिन वह architecture language गायब हो सकती है जो इंसानों को साथ मिलकर system पर reason करने देती थी
- Bible के बाबेल टावर में common language के खो जाने से निर्माण रुक गया था, लेकिन AI-assisted engineering में shared understanding के ढह जाने के बाद भी निर्माण जारी रह सकता है
- टावर गिरता नहीं और न ही तुरंत failure होता है, इसलिए यह समझना मुश्किल होता है कि क्या खो गया है, और टावर लगातार ऊँचा होता जाता है
1 टिप्पणियां
Hacker News की राय
मैं लंबे समय से सोचता आया हूं कि software की composability में Tetris की तरह लाइने मिटती रहनी चाहिए। अपरिपक्व ढंग से agent इस्तेमाल करने वाले या कम अनुभव वाले engineer अक्सर ऐसी सफाई से चूक जाते हैं और tower को बस लगातार ऊंचा करते जाते हैं।
Agents को मौजूदा elements को बेहतर abstractions में बार-बार integrate करने के लिए बनाया जा सकता है, लेकिन Fable या 5.6 Sol तक में software के सूक्ष्म evolution का अनुमान लगाने वाली high-level architectural sense अभी भी इंसानों से काफी पीछे है। मौजूदा systems शायद इंसानों द्वारा संभाले जाने वाले high-quality, sparse और zoom-in/zoom-out हो सकने वाले world model को पर्याप्त रूप से maintain नहीं कर पाते, लेकिन यह तथ्य अपने-आप में उम्मीद देता है कि अब फर्क इतने सूक्ष्म स्तर तक घट गया है।
यह Brooks द्वारा 《The Mythical Man-Month》 में चर्चा की गई scaling problem का AI version है: scale बढ़ने पर combinatorial explosion और खराब हो जाता है, और project में जगह-जगह लगभग वही functionality implement करने वाला duplicate code बन जाता है। हमें ऐसा तरीका चाहिए जिससे AI-based coding conciseness को pursue करे।
कभी hype में रहे GPT3.5 और gpt4 भी अब qwen27b या gemma31b से काफी पीछे हैं। पर्याप्त समय और सही reinforcement learning (RL) मिले तो models भी अपने भीतर अच्छे software system models बना लेंगे।
इस लेख का core argument Lisp Curse और Bipolar Lisp Programmer की याद दिलाता है। तर्क यह था कि Lisp में व्यक्ति जो चाहता है उसे बनाना इतना आसान है कि programmers के पास मिलकर general-purpose और complex outputs बनाने की motivation कम हो जाती है, और जिन languages में काफी effort चाहिए उनके मुकाबले public software ecosystem कमजोर रह जाता है।
लगता है Armin भी AI coding को लेकर बहुत मिलता-जुलता argument दे रहे हैं: Lisp Curse, Bipolar Lisp Programmer
इन दोनों groups के बीच शायद अलग-अलग cognitive processing styles हों। Lisp को दूसरी languages जितना productive होने के लिए homoiconicity का सक्रिय इस्तेमाल करना पड़ता है, और इसके परिणामस्वरूप serious Lisp programs अक्सर domain-specific languages (DSLs) के ऐसे collection बन जाते हैं जिन्हें सिर्फ एक-दो लोग ही समझते हैं।
बड़े software projects की सीमा इस बात में नहीं है कि कोई व्यक्ति कितनी तेज़ी से code produce करता है, बल्कि इस बात में है कि system बदलने वाले लोग उस system की साझा समझ को कितनी अच्छी तरह coordinate करते हैं। यह कहना सही है कि 30 नवंबर 2022 के बाद सब कुछ और जटिल हो गया
इसमें AI लाना मौजूदा complexity के ऊपर एक और complexity चढ़ाने जैसी गलती के करीब है। अच्छे-से-अच्छे में भी यह भारी hardware waste है, और बुरे में agents जितने bugs ठीक करेंगे उतने ही नए bugs बनाएंगे, vulnerable घटिया software बढ़ेगा, साथ ही लोग skills नहीं सीखेंगे और पूरी मानवता की क्षमता कमजोर हो सकती है। software को मूल रूप से इतना जटिल होने की ज़रूरत नहीं है; इसे सुलझाने के लिए craftsmanship को महत्व देना होगा
HTML और pre-rendering भी HTMx, LiveView के साथ वापस आए हैं, और CSS भी पुराने अजीब workarounds से आगे निकल गया है। जब किसी युवा colleague को IE6 में web page debug करने का तरीका समझाते हैं, तो पीढ़ियों का अंतर महसूस होता है। कुछ चीज़ें जटिल हुई हैं, लेकिन कुछ और चीज़ें पर्याप्त mature होकर simpler हो गई हैं
20,000 ईसा पूर्व का इंसान खाने की तलाश करता और ठंड व predators से बचता था, लेकिन 5,000 ईसा पूर्व का इंसान खेती करता, बारिश और बीमारी की चिंता करता, और community व land manage करने की व्यवस्था बनाता था। आज अधिकतर लोग अपना खाना खुद नहीं उगाते, बल्कि विशाल समाजों की complexity manage करते हैं। 1970–80s के developers की नज़र से LLM से पहले का software भी बेहद जटिल था, और अब लगभग कोई भी abstraction layers के बिना सीधे hardware पर code नहीं लिखता। encryption में भी libraries complexity छिपाती हैं और “खुद implement मत करो” सिखाया जाता है। अब मुख्य सवाल यह है कि LLM बदले जाने वाले system की समझ को कितनी तेज़ी से coordinate कर सकता है
software project की shared language English या Python नहीं, बल्कि concepts के meaning, boundaries, invariants, ownership, और system अपने मौजूदा रूप में क्यों आया—इन सबकी common understanding है। Christopher Alexander की Pattern Language इसी समस्या से जुड़ी है, और हर domain के लिए अपनी pattern language बनाने की उनकी सलाह ही आगे चलकर प्रसिद्ध GoF Design Patterns तक पहुँची
मैं projects में business, product और technical domains के लिए तीन pattern languages AI से maintain कराने वाला feature experiment कर रहा हूँ, और यह बहुत अच्छा काम कर रहा है। planning के समय इन्हें reference करने और implementation व review के दौरान इन्हें व्यवस्थित करने को कहने से, 100% AI से coded projects भी structured, domains के बीच अच्छी तरह aligned और संभालने में आसान हो गए
Babel के tower में common language खोते ही construction रुक जाता है, लेकिन AI-assisted development में shared understanding टूट जाने के बाद भी construction चलता रहता है। लेखक ने अच्छा-बुरा साफ़ नहीं कहा, लेकिन मैं इसे साफ़ तौर पर बुरी बात मानता हूँ
अगर यह जानना कि tomato fruit है intelligence है, और उसे fruit salad में न डालना wisdom है, तो AI wisdom के बिना intelligence का अंतिम रूप है—असल में intelligence के भ्रम के करीब। अगर यह समझने वाला कोई नहीं है कि AI क्या कर रहा है, तो हमें रुकना चाहिए और मानना चाहिए कि हम जो बना रहे हैं उसे control करने की wisdom की कमी है
मुझे भी Babel और Bruegel की painting याद आती है, लेकिन मैं इसे कहीं कम optimistic तरीके से देखता हूँ। shortsighted छोटे agents किसी अकल्पनीय रूप से विशाल whole के अपने-अपने हिस्से develop कर रहे हैं; एक तरफ 50 battlements हैं, दूसरी तरफ अजीब निकला हुआ tower है, और बिना वजह courtyard के ऊपर adobe roof व उसके बगल की landing पर thatched roof वाला tower खड़ा किया जा रहा है
individual design level पर यह ठीक लगता है, लेकिन पूरे project को integrate करने वाली कई layers की policy और judgement न होने से यह design का विशाल monster बन जाता है। पर्याप्त बड़े organizations में common language बनाना और maintain करना discipline मांगता है—यह successful companies और militaries की विशिष्ट terminology में भी दिखता है। “Gastown Mayors” और उनके नीचे के “polecats”, और उनसे नीचे के golems तक सभी सोचते हैं कि वे same language बोल रहे हैं, लेकिन सब कुछ पूरा होने के बाद ही throne पर बैठा व्यक्ति समझेगा कि जो understanding उसने पूरी तरह convey मान ली थी, वह वास्तव में shared थी ही नहीं
Anakin: “agents इस्तेमाल करने वाले developers की codebase बदलने की क्षमता नाटकीय रूप से बढ़ जाएगी”
Padmé: “बेहतर दिशा में, है न?”
Anakin: चुप्पी
Padmé: “बेहतर दिशा में, है न?”
vibe coding शायद इसलिए generated code पढ़ने से मना करती है क्योंकि Python file के भीतर छिपा खौफ एक बार देख लिया तो भुलाया नहीं जा सकता। broad sense में वह requested चीज़ करता है, लेकिन goal हासिल करने का तरीका चुनते समय हर बार inconsistent decisions लेता है
कुछ user inputs पर ही अजीब validation लगाता है, बिना वजह तीन stages में data को बार-बार sort या lowercase करता है, और input CSV की पहली row में मौजूद column names तक सारे strings hardcode कर देता है। आधा हिस्सा data classes लेने वाले global functions बनाता है और बाकी classes के रूप में implement करता है। यह सोचकर कि किसी दिन इसे खुद update और maintain करना होगा, इसे ठीक किए बिना रहना मुश्किल है; लेकिन ऐसा सुधार करते-करते बचाए गए समय का बड़ा हिस्सा गायब हो जाता है
एजेंट-आधारित programming असल programming की तुलना में management काम के कहीं ज़्यादा करीब है। manager को individual contributors के काम की सिर्फ high-level समझ होती है, और कई बार उनके पास हर detail समझने का समय, cognitive bandwidth या क्षमता नहीं होती
जितना ज़्यादा software agents से लिखा जाएगा, software engineer की भूमिका technical role से ज़्यादा management role जैसी होती जाएगी
सब कुछ समझने का समय और bandwidth नहीं होता, इसलिए वे बस अपनी abstracted layer में ज़रूरी काम करते हैं
पहले बड़े पैमाने की refactoring में बहुत मेहनत लगती थी, इसलिए उसके लिए पर्याप्त कारण चाहिए होता था। अब prompt थोड़ा भी अस्पष्ट हो और result की ठीक से review न की जाए, तो agent code का आधा हिस्सा फिर से लिख सकता है, जिससे program की आत्मा हर दिन बड़े पैमाने पर बदल सकती है। यह शानदार भी है और साथ ही बिल्कुल नहीं भी