وہ ڈویلپرز جنہوں نے GitHub Copilot، ChatGPT، یا Cursor کا استعمال شروع کیا ہے، وہ اکثر ایک ہی طرح کے ابتدائی جوش و خروش کے مرحلے (honeymoon phase) کا ذکر کرتے ہیں۔ وہ کام جو کبھی دو گھنٹے لیتے تھے، اب بیس منٹ میں ہو جاتے ہیں۔ ایک ٹیب (tab) کی کے ساتھ Boilerplate کوڈ غائب ہو جاتا ہے۔ لیکن جلد ہی، فورمز اور Slack چینلز میں ایک خاموش شکایت ابھرنے لگتی ہے: تھکن۔ ٹول کوڈ تو لکھ دیتا ہے، لیکن اس عمل میں کچھ ایسا ہے جو آپ کو نچوڑ لیتا ہے۔ مسئلہ خود کوڈ نہیں ہے۔ بلکہ مسئلہ اسے سمجھنے اور استعمال کرنے کی مشقت ہے۔
وہ رکاوٹ جس کے لیے کوئی تیار نہیں تھا
دہائیوں تک، سافٹ ویئر انجینئرنگ میں رکاوٹ ٹائپنگ کی رفتار تھی۔ آپ کتنی ہی تیزی سے کیوں نہ سوچتے ہوں، آپ کی انگلیاں اور آپ کا سنٹیکس (syntax) کا علم ایک حد مقرر کر دیتے تھے۔ AI اسسٹنٹس نے اس حد کو ختم کر دیا۔ وہ آپ کے پہلے بلاک کو پڑھنے سے پہلے ہی متعدد فائلوں میں سینکڑوں لائنیں تیار کر سکتے ہیں۔ یہ رفتار آزادی جیسی لگتی ہے، لیکن یہ ایک غیر متوقع ٹریفک جام پیدا کرتی ہے۔ اچانک، پائپ لائن کا سب سے سست حصہ آپ کی پڑھنے، سمجھنے اور اس بات کی تصدیق کرنے کی صلاحیت بن جاتا ہے جو ابھی اسکرین پر نمودار ہوئی ہے۔ آپ اپنے ہی پروجیکٹ کے ایک مکمل وقت کے کوڈ ریویو کرنے والے بن چکے ہیں، سوائے اس کے کہ اس کا مصنف ایک ایسا الگورتھم ہے جو نہ کبھی سوتا ہے اور نہ کبھی تھکتا ہے۔
محنت کا یہ الٹ پھیر کوڈنگ کے سیشن کی نوعیت کو بدل دیتا ہے۔ تخلیق اور ہلکی سی تصدیق کے درمیان باری باری کام کرنے کے بجائے، آپ طویل تصدیق (validation) کے مرحلے میں پھنس جاتے ہیں۔ اور تصدیق محض ایک غیر فعال مطالعہ نہیں ہے۔ یہ ایک فعال اور شک سے بھرپور تجزیہ ہے۔ ہر ویری ایبل کا نام، ہر باؤنڈری کنڈیشن، اور ہر امپورٹ سٹیٹمنٹ کو ایک ذہنی فلٹر سے گزرنا پڑتا ہے کیونکہ AI کا اس میں کوئی ذاتی مفاد نہیں ہے۔ جب پروڈکشن جاب فیل ہوگی تو رات کے 3 بجے اسے کوئی فون نہیں کرے گا۔
آپ کا دماغ کیوں تھک کر رک جاتا ہے
یہ تھکن سستی نہیں ہے۔ یہ بے پناہ آؤٹ پٹ اور انسانی صلاحیت کی محدود حد کے درمیان ایک متوقع ٹکراؤ ہے۔
حجم کا زیادہ ہونا (Volume overload)۔ ایک عام AI تجویز میں ایک مکمل React کمپوننٹ، اس کی اسٹائلنگ لاجک، یوٹیلیٹی فنکشنز، اور یونٹ ٹیسٹ، سب ایک ساتھ شامل ہو سکتے ہیں۔ آپ کی ورکنگ میموری ایک وقت میں صرف ایک حد تک ہی معلومات رکھ سکتی ہے۔ جب اسکرین درجنوں نئی لائنوں سے بھر جاتی ہے، تو آپ کے دماغ کو یا تو انہیں تجریدی پیٹرنز (abstract patterns) میں سمونا پڑتا ہے یا انہیں ترتیب وار اسکین کرنا پڑتا ہے۔ یہ دونوں حکمت عملیاں توجہ کو ختم کر دیتی ہیں۔ ان میں سے کئی بلاکس کا جائزہ لینے کے بعد، ذہنی طور پر ایسا محسوس ہوتا ہے جیسے پٹھوں میں درد ہو رہا ہو۔ آپ پڑھ تو رہے ہوتے ہیں، لیکن اب آپ واقعی سمجھ نہیں پا رہے ہوتے۔
اعتماد کا خلا (The trust gap)۔ AI سے تیار کردہ کوڈ مستند نظر آتا ہے۔ انڈینٹیشن (indentation) مکمل ہوتی ہے۔ ویری ایبل کے نام سمجھ میں آنے والے ہوتے ہیں۔ کمنٹس بھی صحیح جگہوں پر نظر آتے ہیں۔ لیکن مستند ہونا درست ہونے کی ضمانت نہیں ہے۔ کوڈ میں کوئی پرانا (deprecated) API استعمال ہو سکتا ہے، null ان پٹس سے متعلق کوئی edge case چھوٹ سکتا ہے، یا کوئی باریک SQL injection کا خطرہ پیدا ہو سکتا ہے۔ چونکہ آپ جانتے ہیں کہ ایسا ہو سکتا ہے، اس لیے آپ اسے سرسری نہیں دیکھ سکتے۔ آپ کو ہر ریٹرن سٹیٹمنٹ اور ہر لاجک برانچ کا معائنہ ایک سیکیورٹی آڈٹ کی طرح ہوشیاری سے کرنا پڑتا ہے۔ گھنٹوں تک برقرار رکھی جانے والی اس سطح کی باریک بینی ذہنی طور پر بہت مہنگی پڑتی ہے۔ ایئرپورٹ سیکیورٹی اسکرینرز بھی مختصر شفٹوں میں کام کرتے ہیں، اسی وجہ سے: مسلسل ہوشیاری بہت جلد کم ہو جاتی ہے۔
کام کے بہاؤ میں عدم مطابقت (Workflow mismatch)۔ زیادہ تر ڈویلپمنٹ انوائرمنٹ اور ٹیم کے عمل اب بھی انسانی 'لکھنے اور پھر ٹیسٹ کرنے' کے ردعمل پر مبنی ہیں۔ کوڈ بیس انسانی رفتار سے بڑھتا ہے، اور کوڈ ریویو مقررہ وقفوں پر ہوتے ہیں۔ جب AI کو اس پائپ لائن میں گھسا دیا جاتا ہے، تو بہاؤ ٹوٹ جاتا ہے۔ آپ بیس لائنیں جنریٹ کرتے ہیں، تصدیق کے لیے رکتے ہیں، نظر ثانی کا کہتے ہیں، دوبارہ تصدیق کرتے ہیں، اگلے فنکشن پر جاتے ہیں، اور اس طرح وسیع تر آرکیٹیکچر کا تسلسل کھو دیتے ہیں۔ تخلیقی جنریشن اور شکی تصدیق کے درمیان توجہ کا بار بار بدلنا (context switching) رکاوٹ پیدا کرتا ہے۔ آپ کا IDE مصنفین کے لیے ڈیزائن کیا گیا تھا، نہ کہ ان ایڈیٹرز کے لیے جو مسلسل ڈیڈ لائن کے تحت کام کر رہے ہوں۔
تھکن کا چکر
یہ عوامل ایک ایسے چکر کو جنم دیتے ہیں جو دن گزرنے کے ساتھ ساتھ مزید خراب ہوتا جاتا ہے۔
اسسٹنٹ سیکنڈوں میں کسی فیچر کی تکمیل کر دیتا ہے۔ پھر آپ پندرہ منٹ امپورٹس کا سراغ لگانے، ٹائپ مطابقت (type compatibility) چیک کرنے، اور edge cases کے ذہنی تجربات کرنے میں صرف کرتے ہیں۔ تیسرے یا چوتھے راؤنڈ تک، آپ کی توجہ کمزور پڑنے لگتی ہے۔ آپ ایسے کوڈ کے ٹکڑے قبول کرنے لگتے ہیں جو "زیادہ تر ٹھیک لگتے ہیں"۔ غلطیاں نکل جاتی ہیں۔ اس کی تلافی کے لیے آپ اپنی رفتار کم کر دیتے ہیں، جو اس رفتار کو ختم کر دیتا ہے جو آپ نے شروع میں حاصل کی تھی۔ آپ دن کا اختتام معمول سے زیادہ کوڈ کے ساتھ کرتے ہیں، لیکن اس پر اعتماد کم ہوتا ہے اور سر میں ایسا درد ہوتا ہے جو یہ بتاتا ہے کہ آپ نے ذہانت سے نہیں بلکہ صرف سخت محنت کی ہے۔
جب رفتار خطرناک ہو جائے
اگر یہ پیٹرن معمول بن جائے، تو نقصان صرف ایک برے دوپہر تک محدود نہیں رہتا۔
برن آؤٹ (Burnout) خاموشی سے آتا ہے۔ یہ کسی پروجیکٹ کو کھولتے وقت خوف، یا کسی اور رنگین کوڈ بلاک کو بغیر چڑ کے دیکھنے کی نااہلی کی صورت میں ظاہر ہوتا ہے۔ جب وہ بنیادی ٹول جو آپ کی مدد کے لیے ہونا چاہیے تھا، تھکن کا بنیادی ذریعہ بن جائے، تو اس کے بعد بیزاری اور ناراضگی پیدا ہوتی ہے۔
پھر مہارت کا زوال بھی ہے۔ جب آپ اپنے ارادے کو syntax میں ڈھالنا چھوڑ دیتے ہیں، تو یہ صلاحیت کمزور پڑ جاتی ہے۔ ہو سکتا ہے کہ آپ اب بھی سسٹمز کو اچھی طرح architect کر سکیں، لیکن باریک بینی کی وہ روانی — جیسے یہ جاننا کہ ایک خاص loop structure کیوں درست نہیں لگ رہا، یا یہ یاد رکھنا کہ ایک مخصوص library لوڈ کے تحت کیسا برتاؤ کرتی ہے — اس وقت ختم ہو جاتی ہے جب ایک autocomplete layer تمام تفصیلات سنبھال لیتی ہے۔ وقت کے ساتھ ساتھ، آپ کے ایک فعال engineer کے بجائے محض ایک passive curator بن جانے کا خطرہ ہوتا ہے۔
تاہم، سب سے فوری خطرہ sloppy deployment ہے۔ کام کی رفتار برقرار رکھنے کے دباؤ میں، اور مشین کے output کو گھنٹوں پڑھنے سے تھک جانے کے بعد، developers کبھی کبھی ایسا code deploy کر دیتے ہیں جس کی انہوں نے مکمل طور پر validation نہیں کی ہوتی۔
