(सुबह उठकर दोबारा देखा तो पुराने लेख में formatting errors थे, और वह बहुत लंबा भी लिखा गया था, इसलिए इसका संक्षिप्त संस्करण फिर से पोस्ट कर रहा हूँ)
मैंने देखा है कि ChatGPT के शुरुआती उपयोगकर्ता जब ChatGPT के साथ मिलकर ‘जटिल समस्याएँ’ हल करना चाहते हैं, तो वे अक्सर 3 गलतियाँ करते हैं
- वे उम्मीद करते हैं कि ChatGPT ‘सही जवाब’ एक ही बार में दे देगा
- वे उम्मीद करते हैं कि ChatGPT सही जवाब ‘एक ही बार में’ दे देगा
- जब यह उम्मीद आसानी से पूरी नहीं होती, तो वे निराश हो जाते हैं, और ChatGPT का उपयोग सिर्फ साधारण समस्याओं में करते हैं, या बहुत passive तरीके से करते हैं, या पूरी तरह छोड़ देते हैं
नतीजतन वे AI से productivity बढ़ाने के कई अवसर खो देते हैं
कुछ महीने पहले तक मेरी स्थिति भी ऐसी ही थी
- ऐप की शुरुआती loading speed धीमी थी, इसलिए bundle size analysis किया तो एक बेहद बड़ा JS फ़ाइल मिला। पता चला कि 18,500 लाइनों वाले इस फ़ाइल का अधिकांश हिस्सा हटाया जा सकता है
- शुरुआत में मैं उसे आँखों से देखकर हाथ से हटाता था, लेकिन यह बहुत उबाऊ था और बार-बार गलती हो रही थी
- ChatGPT के साथ काम शुरू किया। करते-करते मुझे एहसास हुआ कि मैं भी शुरुआती उपयोगकर्ताओं की तरह उससे ‘एक ही बार में सही जवाब’ की उम्मीद कर रहा था
- यह समझने के बाद मैंने ‘तीन-पक्षीय सहयोग रणनीति’ अपनाई, और बहुत तेज़ी से बड़ी प्रगति का अनुभव किया
कार्य प्रगति
मेरी जगह रिफैक्टरिंग कर दो
- एक function दिया, मनचाहा तरीका समझाया, और रिफैक्टरिंग करने को कहा → असफल। compile भी नहीं हुआ
- वह कोड की structure समझकर बदलने के बजाय, ऊपर से नीचे एक-एक लाइन हटाने के तरीके से काम कर रहा था
रिफैक्टरिंग करने वाला कोड लिख दो
- खुद करने के बजाय, JS में रिफैक्टरिंग करने वाला कोड माँगा → असफल। यह भी ऊपर से नीचे एक-एक लाइन हटाने वाला तरीका था
- सोचने पर लगा कि इतने बड़े पैमाने की रिफैक्टरिंग के उदाहरण शायद ChatGPT ने पर्याप्त रूप से नहीं सीखे होंगे
AST से रिफैक्टरिंग करने वाला कोड लिख दो
- मैं एक-एक लाइन नहीं बल्कि blocks हटाना चाहता था। यानी कोड की syntactic understanding चाहिए थी, इसलिए लगा कि AST का उपयोग अच्छा रहेगा
- ChatGPT को ESLint development experience वाले engineer की भूमिका दी, और AST का उपयोग करके लिखने को कहा, तो शानदार babel-based boilerplate मिला। बहुत बड़ी प्रगति
- मुझे babel का अनुभव नहीं था, इसलिए ChatGPT के साथ सीखते हुए logic जोड़ता गया, लेकिन आखिरकार कठिनाई आ गई। जटिल logic संभालना मुश्किल था
मैंने AST से यहाँ तक करके देखा है। यह हिस्सा ठीक से नहीं हो रहा, तुम होते तो इसे कैसे करते?
- मुझे फिर एहसास हुआ कि मैं दोबारा एक ही बार में सही जवाब पाने की कोशिश कर रहा था, इसलिए रणनीति बदली। यह सोचते ही कि traverse सिर्फ 1 बार ही करने की ज़रूरत नहीं है, काम आसानी से आगे बढ़ा
- पहले सरलता से चलाकर, परिणाम देखते हुए logic को परत-दर-परत जोड़ने के तरीके से तेज़ी से आगे बढ़ा
- जहाँ-जहाँ छोटे हिस्सों में दिक्कत आई, वहाँ उस खास लक्ष्य को कैसे implement करना है, यह ChatGPT से पूछते हुए काम किया
- अंत में जिन हिस्सों को नियम में बदलना कठिन था, उन्हें आँख और हाथ से पूरा किया। तब तक कोड की मात्रा बहुत कम हो चुकी थी, इसलिए यह संभव था
परिणाम
- 18,500 लाइनों का कोड 1,335 लाइनों तक आ गया, और main chunk bundle size लगभग 7.8% कम हो गया
- शुरुआती loading के लिए ज़रूरी JS फ़ाइल का आकार और logic कम होने से initial loading speed में थोड़ा सुधार हुआ
- लंबे और जटिल legacy code को AST से रिफैक्टर करने का अनुभव और आत्मविश्वास मिला
- यह भरोसा मिला कि अधिकांश जटिल समस्याओं को AI + कोड + इंसान के तीन-पक्षीय सहयोग से प्रभावी ढंग से हल किया जा सकता है
AI के साथ जटिल समस्याएँ प्रभावी ढंग से हल करने के लिए mental model
- समझें कि AI किस काम में अच्छा है, कोड किस काम में अच्छा है, और इंसान किस काम में अच्छा है।
- जिस समस्या को हल करना है, उसका विश्लेषण करके AI/कोड/इंसान के मज़बूत क्षेत्रों को अलग करें।
- AI को शुरुआती कोड अच्छा बनाने में मदद करें, उस कोड को छोटे-छोटे हिस्सों में चलाकर AI के साथ सुधारते जाएँ, और बीच-बीच में + अंत में जो काम इंसान के लिए आसान हो, वह खुद करें।
2 टिप्पणियां
बहुत अच्छा लगा, धन्यवाद।
डुप्लिकेट पोस्ट हटा दी गई है।