लॉगिन पेज व्यवस्थित रेंडर झाले. REST API ने 200 OK प्रतिसाद दिला. SaaS boilerplate कोणत्याही linting एररशिवाय सुरू झाले. एका दुपारी तुम्ही ते काम पूर्ण केले ज्यासाठी पूर्वी एक आठवडा लागायचा. AI कोडिंग असिस्टंट्सनी सॉफ्टवेअर डेव्हलपमेंटचे स्वरूप इतके पूर्णपणे बदलले आहे की, आता फीचर्स तयार करणे हे इंजिनिअरिंग वाटण्याऐवजी एखाद्या मेनूमधून ऑर्डर देण्यासारखे वाटते. ही सोय खरी आहे. पण त्याची किंमत नंतर चुकवावी लागते, आणि सहसा जेव्हा परिस्थिती अत्यंत गंभीर असते तेव्हाच ती समोर येते. डेव्हलपर्सनी या सापळ्याला Vibe Coding म्हणायला सुरुवात केली आहे, आणि हे नाव या समस्येचे अचूक वर्णन करते.

The Copy-Paste Loop

हा लूप प्रत्यक्षात कसा दिसतो ते पहा. तुम्ही चॅट विंडोमध्ये तुमचा कर्सर ठेवता आणि साध्या इंग्रजीत एखाद्या फीचरचे वर्णन करता. लगेच कोडचा एक ब्लॉक समोर येतो. तुम्ही तो हायलाइट करता, कॉपी करता, तुमच्या एडिटरमध्ये परत येता, पेस्ट करता आणि सेव्ह करता. टर्मिनलमध्ये कोणतीही एरर दिसत नाही. ब्राउझरमध्ये योग्य लेआउट दिसतो. तुम्ही बदल कमिट करता आणि पुढचे तिकीट उघडता. लॉजिक ट्रॅक करण्यासाठी कोणताही वेळ थांबला नाही. इम्पोर्ट केलेल्या dependencies ची कोणतीही तपासणी झाली नाही. ती थर्ड-पार्टी लायब्ररी खरोखर आवश्यक आहे की स्टँडर्ड लायब्ररीचे टूल पुरेसे होईल, असा कोणताही प्रश्न विचारला गेला नाही. वर्कफ्लो अगदी साधा आहे: विचारा, कॉपी करा, पेस्ट करा आणि रन करा. जर वरवर सर्व काही बरोबर दिसत असेल, तर अंतर्गत रचनाही बरोबर असेल असे मानले जाते. याचा कोणताही अर्थपूर्ण अर्थ लावून याला कोडिंग म्हणता येणार नाही. हे मॅन्युअल न वाचता तयार केलेले भाग एकत्र जोडण्यासारखे आहे. कोणत्याही शॉर्टकटप्रमाणे, जोपर्यंत तो काम करतो तोपर्यंत ठीक आहे, पण ज्या क्षणी तो काम करणे थांबवतो, तेव्हा अडचण येते.

Losing Control at the Worst Time

जेव्हा बग प्रोडक्शनमध्ये येतो, तेव्हा तो तुमच्याकडे येतो, AI कडे नाही. पहाटे दोन वाजता, चॅटबॉट तुमच्या ऑब्झर्व्हेबिलिटी प्लॅटफॉर्मवर लॉग इन केलेला नसतो. तुम्ही असता. जर तुम्ही तुम्ही पाठवलेला कोड कधीच वाचला नसेल, तर तो का फेल झाला याचे कारण तुम्ही शोधू शकणार नाही. तुम्ही तुम्हाला न समजणाऱ्या फाइल्समध्ये शोधत (grep) राहाल आणि तुम्हाला कधीच न समजलेल्या लॉजिकला पॅच करण्याचा प्रयत्न कराल. ही भावना गोंधळात टाकणारी असते. जो डेव्हलपर स्वतःचे constructs लिहितो, तो सिस्टमचा एक मानसिक नकाशा तयार करतो. त्यांना माहित असते की कुठे धोके आहेत आणि कोणत्या गृहितकांवर (assumptions) ही संपूर्ण रचना अवलंबून आहे. Vibe Coding तो नकाशा पुसून टाकते. तुम्ही केवळ 'black boxes' चालवणारे ऑपरेटर बनून राहता. सिंटॅक्स बरोबर आहे, डेमोने क्लायंटवर प्रभाव पाडला आहे, पण ती सिस्टम खरोखर तुमची नाही. मालकी हक्क मिळवण्यासाठी समजून घेणे आवश्यक आहे आणि समजून घेण्यास वेळ लागतो. ती पायरी वगळल्यामुळे खर्च कमी होत नाही, तर तो केवळ सर्वात महागड्या क्षणी समोर येतो.

Working Code Is Not Safe Code

AI मॉडेल्स त्यांच्या ट्रेनिंग डेटातील पॅटर्नवर आधारित प्रतिसाद तयार करतात. त्या पॅटर्नमध्ये अनेक जुने आणि असुरक्षित उदाहरणे समाविष्ट असतात. तुम्ही पेस्ट केलेले लॉगिन फंक्शन कदाचित 'salted slow hash' ऐवजी एखादा वेगवान पण कालबाह्य hash वापरून पासवर्ड स्टोअर करू शकते, कारण ट्रेनिंग स्नॅपशॉटमध्ये जुन्या फोरम स्निपेट्सचा प्रभाव जास्त होता. तुम्ही साधे उदाहरण मागितल्यामुळे आणि मॉडेलने ते पूर्ण केल्यामुळे, API एंडपॉइंट युजर इनपुट थेट रॉ SQL स्ट्रिंगमध्ये जोडू शकते. तुमचे डेटाबेस क्रेडेंशियल्स क्लायंट-साइड JavaScript मध्ये लीक होऊ शकतात, कारण तुम्ही सर्व्हरलेस फ्रंटएंड बनवत आहात की बॅकएंड रूट, हे AI ला माहित नव्हते.

इनपुट व्हॅलिडेशन (input validation) नसणे ही एक सामान्य समस्या आहे. तयार केलेला फॉर्म हँडलर वापरकर्ते सभ्य असतील असे गृहीत धरतो आणि डेटा स्टॅकच्या खोलवर पाठवण्यापूर्वी स्ट्रिंगची लांबी, संख्यात्मक श्रेणी (numeric ranges) किंवा फाईल प्रकार तपासण्यात अपयशी ठरतो. ऑथेंटिकेशन चेक योग्य सर्व्हर-साइड व्हेरिफिकेशनशिवाय क्लायंट-साइड टोकन्सवर अवलंबून असू शकतात, ज्यामुळे सुरक्षेचा खोटा आभास निर्माण होतो. AI कदाचित HttpOnly किंवा Secure फ्लॅगशिवाय सेशन कुकी (session cookie) तयार करू शकते, कारण त्याच्या ट्रेनिंगमध्ये जुने Stack Overflow उत्तरे समाविष्ट होती. डेमो दरम्यान प्रत्येक समस्या अदृश्य असते. ॲप चालते. युजर्स लॉग इन करतात. डेटा फ्लो होतो. पण एका अटॅकरला फक्त एका असुरक्षित प्रवेशद्वाराची (entry point) गरज असते. AI आउटपुटकडे सुरक्षेच्या दृष्टिकोनातून पाहणे म्हणजे भीतीपोटी वागणे नव्हे, तर ते प्रोफेशनल सॉफ्टवेअरसाठी मूलभूत आवश्यकता आहे.

The Inconsistency Tax

कोडबेस ही एक कथा देखील असते. नवीन टीम मेंबर्सना गोष्टी कशा केल्या पाहिजेत हे तो शिकवतो. Vibe Coding त्या कथेशी विसंगत असलेल्या डझनभर बोलीभाषांमध्ये त्याचे तुकडे करते. तुम्ही काल तयार केलेले फीचर 'explicit state reducers' सह 'functional React hooks' वापरते. आजचे फीचर, जे थोडे वेगळ्या प्रॉम्प्टमधून तयार झाले आहे, त्यात 'class components' वापरले जातात कारण मॉडेलने जुन्या पॅटर्नचा वापर केला. API लेयर OpenAPI-जनरेटेड stubs आणि हाताने लिहिलेले route handlers यांच्यामध्ये बदलत राहतो. नेमिंग कन्व्हेन्शन्स (naming conventions) camelCase आणि snake_case मध्ये विस्कळीत होतात. एरर हँडलिंग एका फाईलमध्ये गायब होते आणि दुसऱ्या फाईलमध्ये खूप मोठे नेस्टेड try-catch ब्लॉक्स म्हणून परत येते.

Over weeks, the project becomes an archaeological dig. You cannot safely change one module because you do not know what assumptions the adjacent AI-generated module makes. Refactoring turns into a slow, risky game of whack-a-mole. The system compiles, but it no longer coheres. Maintainability dies a death by a thousand pasted snippets.

Turn the AI Into a Teacher

Real learning happens when you interrogate the output. Treat the AI like a senior developer who writes fast but still expects a code review. Ask why it chose recursion over iteration for that tree traversal. Ask if there is a more memory-efficient path that handles edge cases better. Ask what happens when the input is null, when the network request times out, or when two users trigger the function simultaneously. Make it explain the logic line by line as if you were reviewing a junior teammate's pull request.

When you force the model to justify its choices, you force yourself to understand them. This flips the dynamic entirely. AI stops being an autopilot and becomes a tutor. The goal is not to write zero code yourself. It is to ship only code you fully understand, even if the assistant drafted the first version.

The Skills That Actually Matter Now

Writing syntax is getting cheaper by the day. Reading and reasoning are