गेल्या महिन्यात, एका AI असिस्टंटने प्रोडक्शन प्रोजेक्टसाठी एक Python स्क्रिप्ट तयार केली. आउटपुटमध्ये कोणतीही त्रुटी नव्हती. डेटा देखील योग्य दिसत होता. परंतु, मॅन्युअल रिव्ह्यूमध्ये डेटाबेस कॉल्समध्ये एक N+1 query pattern लपलेला असल्याचे दिसून आले. लहान डेटासेटसाठी कोड व्यवस्थित चालला. परंतु, जेव्हा हजारो रेकॉर्ड्सचा विचार केला, तेव्हा ॲप्लिकेशन पॅरेंट ऑब्जेक्ट्ससाठी एक क्वेरी करेल आणि त्यानंतर संबंधित डेटासाठी हजारो फॉलो-अप क्वेरीज करेल. याचा परिणाम म्हणजे एक भयानक performance cliff होईल, जो कोणताही युनिट टेस्ट पकडू शकणार नाही.
आधुनिक सॉफ्टवेअर डेव्हलपमेंटचे हे वास्तव आहे. AI टूल्स आता कोडिंग, डीबगिंग आणि आर्किटेक्चरल सूचना मानवी वेगापेक्षा कितीतरी पटीने वेगाने हाताळत आहेत. हा वेग खरा आहे. तरीही, यामुळे तुमच्या कामाचे स्वरूप मूलभूतपणे बदलते. तुम्हाला आता केवळ सिंटॅक्स टाईप करण्यासाठी पैसे दिले जात नाहीत. तुम्हाला ऑडिट करण्यासाठी, आर्किटेक्ट करण्यासाठी आणि नेमके अशा प्रकारचे अदृश्य सापळे शोधण्यासाठी पैसे दिले जातात.
"तार्किक पण चुकीचे" असण्याचे शांत संकट
AI-ने तयार केलेला कोड अनेकदा योग्य वाटतो कारण तो कंपाईल होतो, रन होतो आणि अपेक्षित व्हॅल्यू देतो. वरवर पाहता लॉजिक बरोबर वाटते. पण आतून ते शांतपणे बिघडलेले असू शकते.
रेग्युलर एक्सप्रेशन्सचे (regular expressions) उदाहरण घ्या. AI तुम्हाला असा पॅटर्न देऊ शकते जो इंग्रजीमध्ये ईमेल पत्ते किंवा आयडेंटिफायर्स अचूकपणे मॅच करतो. तोच एक्सप्रेशन जर जर्मन उम्लाउट्स (umlauts), अरबी स्क्रिप्ट किंवा युनिकोड नॉर्मलायझेशनच्या एज केसेसवर चालवला, तर तो शांतपणे फेल होतो. कोड असा चुकीचा नसतो की ज्यामुळे एक्सेप्शन (exception) येईल, तो फक्त वास्तविक जगातील वैध डेटा वगळतो.
डेटाबेस क्वेरीजमध्येही असेच धोके असतात. AI अशी PostgreSQL क्वेरी लिहू शकते जी टेस्टिंग दरम्यान योग्य रो (rows) परत करते, परंतु तरीही तुमच्या टेबल्समध्ये dead tuples वाढवू शकते, इंडेक्सचा वापर टाळू शकते किंवा sequential scans लांबवू शकते ज्यामुळे प्रोडक्शन वर्कलोड्सवर परिणाम होतो. डेमो डेटासेटमध्ये जे काम करते आणि वास्तविक लोडमध्ये जे काम करते, या दोन वेगळ्या गोष्टी आहेत. मशीनला लॅटन्सी (latency) जाणवत नाही. तिला क्लाउडचे बिल भरावे लागत नाही.
लिहिण्यापासून पडताळणीकडे (Verifying)
मुख्य बदल म्हणजे "मी हे कसे लिहू?" कडून "मी हे कसे पडताळू?" कडे वळणे. जेव्हा AI पहिला ड्राफ्ट तयार करते, तेव्हा तुमचे लक्ष पडताळणीकडे असायला हवे. तुम्हाला कोड अशा प्रकारे वाचणे आवश्यक आहे जसा एखादा सिक्युरिटी ऑडिटर वाचतो, एखाद्या थकलेल्या लेखकाने स्वतःचे काम वरवर वाचल्यासारखे नाही.
यासाठी वेगळ्या प्रकारच्या शिस्तीची गरज आहे. Automation bias ही एक वास्तव आहे. जेव्हा एखादे टूल अस्खलित आणि सिंटॅक्टिकली परफेक्ट आउटपुट देते, तेव्हा मानवी मेंदू शिथिल होतो. प्रेझेंटेशन पॉलिश असल्यामुळे तुम्ही ते बरोबर आहे असे गृहीत धरता. त्या भावनेचा प्रतिकार करणे हे आता मुख्य कौशल्य आहे. जोपर्यंत उलट सिद्ध होत नाही, तोपर्यंत प्रत्येक सूचना ही एक हायपोथेसिस (hypothesis) आहे असे तुम्ही मानले पाहिजे.
मशीनसोबत काम करणे
AI कोडिंग असिस्टंटकडून उपयुक्त आउटपुट मिळवणे म्हणजे वेगाने टाईप करणे नव्हे. तर मशीनचा ट्रेनिंग डेटा आणि तुमचे विशिष्ट वास्तव यातील अंतर कमी करणे होय. तुम्ही काही ठोस पद्धती वापरून ते अंतर कमी करू शकता.
तुमच्या प्रॉम्प्ट्समध्ये अचूक राहा. येथे संदिग्धता कविता निर्माण करत नाही; ती बग्स (bugs) निर्माण करते. "optimize this function" सारखा प्रॉम्प्ट सामान्य सल्ला देतो. त्याऐवजी, "refactor this Python loop to use a single bulk database update instead of iterated saves" असे लिहा. स्पष्टता शक्यतांची व्याप्ती मर्यादित करते.
वास्तविक संदर्भ द्या. जोपर्यंत तुम्ही सांगत नाही, तोपर्यंत AI ला हे माहित नसते की तुम्ही ३० सेकंदांच्या कडक रिक्वेस्ट टाइमआउटसह Kubernetes क्लस्टरमध्ये PostgreSQL 15 वर Django 4.2 चालवत आहात. तुमच्या डिपेंडन्सी व्हर्जन, तुमच्या अंतर्गत लायब्ररी आणि तुमच्या अटी (constraints) त्याला सांगा. संदर्भ म्हणजे केवळ सजावट नाही; ते सुरक्षेचे कवच (guardrails) आहे.
तुमच्या स्वतःच्या डॉक्युमेंट्सचा आधार घ्या. Retrieval-Augmented Generation, किंवा RAG हे केवळ चॅटबॉट्ससाठी वापरले जाणारे शब्द नाहीत. तुमच्या असिस्टंटला तुमच्या प्रत्यक्ष API स्पेसिफिकेशन्स, तुमचे आर्किटेक्चर डिसीजन रेकॉर्ड्स आणि तुमच्या कोडबेस कन्व्हेन्शन्सकडे निर्देशित करा. जेव्हा मॉडेल ट्रेनिंग डेटावरून अंदाज लावण्याऐवजी तुमच्या डॉक्युमेंटेशनमधून तथ्ये शोधते, तेव्हा सामान्य सल्ला आणि वापरण्यायोग्य कोड यातील अंतर लक्षणीयरीत्या कमी होते.
जटिल कामाचे लहान भागांत विभाजन करा. एजंट पॅटर्न तेव्हाच सर्वोत्तम काम करतात जेव्हा प्रत्येक पायरीची व्याप्ती मर्यादित असते. एकाच वेळी संपूर्ण मायक्रोसर्व्हिस रिफॅक्टर करण्यास सांगू नका. प्रथम डेटा स्कीमा (data schema) मागा. त्याची पडताळणी करा. त्यानंतर मायग्रेशन स्क्रिप्ट मागा. त्याची पडताळणी करा. मग सर्व्हिस लेयरकडे वळा.
