لاگ ان پیج درست طریقے سے رینڈر ہو گیا۔ REST API نے 200 OK واپس کیا۔ SaaS boilerplate بغیر کسی linting error کے چل پڑا۔ ایک دوپہر میں، آپ نے وہ کام مکمل کر لیا جس میں پہلے ایک ہفتہ لگتا تھا۔ AI کوڈنگ اسسٹنٹس نے سافٹ ویئر ڈویلپمنٹ کو اس قدر مکمل طور پر بدل دیا ہے کہ اب فیچرز بنانا انجینئرنگ کے بجائے مینو سے آرڈر دینے جیسا محسوس ہوتا ہے۔ یہ سہولت حقیقی ہے، لیکن اس کی ایک قیمت ہے جو صرف بعد میں سامنے آتی ہے، عام طور پر اس وقت جب خطرہ سب سے زیادہ ہو۔ ڈویلپرز نے اس جال کو Vibe Coding کہنا شروع کر دیا ہے، اور یہ نام اس مسئلے کی مکمل عکاسی کرتا ہے۔
کاپی پیسٹ کا چکر
یہ چکر اصل میں کچھ اس طرح نظر آتا ہے۔ آپ چیٹ ونڈو میں اپنا کرسر رکھتے ہیں اور سادہ انگریزی میں ایک فیچر کی وضاحت کرتے ہیں۔ کوڈ کا ایک بلاک فوری طور پر ظاہر ہو جاتا ہے۔ آپ اسے ہائی لائٹ کرتے ہیں، کاپی کرتے ہیں، اپنے ایڈیٹر پر واپس آتے ہیں، پیسٹ کرتے ہیں اور سیو کر لیتے ہیں۔ ٹرمینل میں کوئی ایرر نہیں دکھتا۔ براؤزر درست لے آؤٹ دکھاتا ہے۔ آپ تبدیلی کو کمٹ کرتے ہیں اور اگلا ٹکٹ کھول لیتے ہیں۔ لاجک کو ٹریس کرنے کے لیے کوئی وقفہ نہیں لیا گیا۔ امپورٹ شدہ dependencies کی کوئی جانچ نہیں کی گئی۔ اس بات پر کوئی سوال نہیں اٹھایا گیا کہ آیا وہ تھرڈ پارٹی لائبریری واقعی ضروری ہے یا کوئی اسٹینڈرڈ لائبریری ٹول کام کر سکتا ہے۔ ورک فلو محض پوچھنا، کاپی کرنا، پیسٹ کرنا اور رن کرنا ہے۔ اگر سطح درست نظر آتی ہے، تو گہرائی کو بھی درست فرض کر لیا جاتا ہے۔ یہ کسی بھی بامعنی لحاظ سے کوڈنگ نہیں ہے۔ یہ مینوئل پڑھے بغیر پہلے سے تیار شدہ حصوں کو جوڑنے جیسا ہے۔ کسی بھی شارٹ کٹ کی طرح، یہ تب تک کام کرتا ہے جب تک کہ وہ لمحہ نہ آ جائے جب یہ کام کرنا چھوڑ دے۔
بدترین وقت پر کنٹرول کھو دینا
جب بگ پروڈکشن میں آتا ہے، تو وہ آپ کے پاس آتا ہے، AI کے پاس نہیں۔ رات کے دو بجے، چیٹ بوٹ آپ کے observability platform پر لاگ ان نہیں ہوتا۔ آپ ہوتے ہیں۔ اگر آپ نے کبھی وہ کوڈ نہیں پڑھا جو آپ نے شیپ (ship) کیا ہے، تو آپ اس کی ناکامی کی وجہ نہیں سمجھ سکتے۔ آپ ان فائلوں میں grep کریں گے جنہیں آپ سمجھتے نہیں ہیں، اور اس لاجک کو پیچ (patch) کرنے کی کوشش کریں گے جسے آپ نے کبھی سیکھا ہی نہیں۔ یہ احساس الجھن کا باعث بنتا ہے۔ ایک ڈویلپر جو اپنے constructs خود لکھتا ہے، وہ سسٹم کا ایک ذہنی نقشہ تیار کرتا ہے۔ وہ جانتے ہیں کہ کہاں خطرات (sharp edges) ہیں اور کون سی مفروضات (assumptions) بنیاد کو تھامے ہوئے ہیں۔ Vibe Coding اس نقشے کو مٹا دیتی ہے۔ آپ بلیک باکسز کے آپریٹر بن جاتے ہیں۔ سنٹیکس درست ہے، ڈیمو نے کلائنٹ کو متاثر کیا، لیکن سسٹم حقیقت میں آپ کا نہیں ہے۔ ملکیت کے لیے فہم ضروری ہے، اور فہم میں وقت لگتا ہے۔ اس مرحلے کو چھوڑنے سے قیمت ختم نہیں ہوتی، بلکہ یہ صرف سب سے مہنگے ممکنہ لمحے پر منتقل ہو جاتی ہے۔
کام کرنے والا کوڈ محفوظ کوڈ نہیں ہے
AI ماڈلز ٹریننگ ڈیٹا میں پائے جانے والے پیٹرنز کی بنیاد پر جوابات تیار کرتے ہیں۔ ان پیٹرنز میں بہت سے پرانے اور غیر محفوظ نمونے شامل ہوتے ہیں۔ وہ لاگ ان فنکشن جو آپ نے پیسٹ کیا ہے، شاید پاس ورڈز کو ایک تیز اور فرسودہ hash کے ذریعے اسٹور کرے بجائے اس کے کہ ایک salted slow hash استعمال کیا جائے، کیونکہ ٹریننگ اسنیپ شاٹ میں پرانے فورم اسنیپٹس کو ترجیح دی گئی تھی۔ API اینڈ پوائنٹ صارف کے ان پٹ کو براہ راست ایک خام SQL اسٹرنگ میں جوڑ سکتا ہے کیونکہ آپ نے ایک سادہ مثال مانگی تھی اور ماڈل نے اس کی تعمیل کی۔ آپ کے ڈیٹا بیس کی کریڈنشلز کلائنٹ سائیڈ JavaScript میں لیک ہو سکتے ہیں کیونکہ AI کو معلوم نہیں تھا کہ آپ ایک serverless frontend بنا رہے ہیں، نہ کہ ایک backend route۔
ان پٹ ویلیڈیشن (input validation) کا نہ ہونا ایک عام بات ہے۔ تیار کردہ فارم ہینڈلر شائستہ صارفین کا فرض کرتا ہے اور ڈیٹا کو اسٹیک میں مزید آگے بھیجنے سے پہلے اسٹرنگ کی لمبائی، عددی رینج، یا فائل کی اقسام کو چیک کرنے میں ناکام رہتا ہے۔ آتھنٹیکیشن چیکز مناسب سرور سائیڈ تصدیق کے بغیر کلائنٹ سائیڈ ٹوکنز پر انحصار کر سکتے ہیں، جس سے تحفظ کا ایک غلط احساس پیدا ہوتا ہے۔ ایک AI بغیر HttpOnly یا Secure فلیگز کے سیشن کوکی (session cookie) تیار کر سکتا ہے کیونکہ اس کی ٹریننگ میں پرانے Stack Overflow جوابات شامل تھے۔ ہر مسئلہ ڈیمو کے دوران نظر نہیں آتا۔ ایپ کام کرتی ہے۔ صارفین لاگ ان ہوتے ہیں۔ ڈیٹا بہتا ہے۔ لیکن ایک حملہ آور کو صرف ایک غیر محفوظ داخلی راستے کی ضرورت ہوتی ہے۔ سیکیورٹی کے نقطہ نظر سے AI کے آؤٹ پٹ کا جائزہ لینا وہم نہیں ہے۔ یہ پیشہ ورانہ سافٹ ویئر کے لیے بنیادی ضرورت ہے۔
عدم تسلسل کا ٹیکس
ایک کوڈ بیس ایک کہانی بھی ہے۔ یہ ٹیم کے نئے ارکان کو سکھاتا ہے کہ چیزیں کیسے ہونی چاہئیں۔ Vibe Coding اس بیانیے کو درجنوں متضاد لہجوں میں تقسیم کر دیتی ہے۔ وہ فیچر جو آپ نے کل بنایا تھا اس میں explicit state reducers کے ساتھ functional React hooks استعمال ہوتے ہیں۔ آج کا فیچر، جو ایک تھوڑے سے مختلف پرامپٹ سے تیار کیا گیا ہے، اس میں class components استعمال ہوتے ہیں کیونکہ ماڈل نے پرانے پیٹرن کو ڈیفالٹ کے طور پر اپنا لیا۔ API لیئر OpenAPI سے تیار کردہ stubs اور ہاتھ سے لکھے گئے route handlers کے درمیان بدلتی رہتی ہے۔ نام رکھنے کے طریقے (naming conventions) camelCase اور snake_case کے درمیان بھٹکتے رہتے ہیں۔ ایرر ہینڈلنگ ایک فائل میں غائب ہو جاتی ہے اور دوسری میں طویل اور پیچیدہ (verbose nested) try-catch بلاکس کی صورت میں واپس آتی ہے۔
ہفتوں گزرنے کے ساتھ ساتھ، پروجیکٹ ایک آثار قدیمہ کی کھدائی کی طرح بن جاتا ہے۔ آپ کسی ایک ماڈیول کو حفاظت سے تبدیل نہیں کر سکتے کیونکہ آپ کو معلوم نہیں ہوتا کہ اس کے ساتھ جڑا AI سے تیار کردہ ماڈیول کن مفروضوں پر مبنی ہے۔ ریفیکٹورنگ (Refactoring) ایک سست اور پرخطر 'whack-a-mole' کھیل میں بدل جاتی ہے۔ سسٹم کمپائل تو ہو جاتا ہے، لیکن وہ اب مربوط نہیں رہتا۔ مینٹین ایبلٹی (Maintainability) ہزاروں کاپی کیے گئے کوڈ کے ٹکڑوں کی وجہ سے ختم ہو جاتی ہے۔
AI کو ایک استاد میں بدل دیں
حقیقی سیکھنا تب ہوتا ہے جب آپ آؤٹ پٹ سے سوال و جواب کرتے ہیں۔ AI کے ساتھ ایک ایسے سینئر ڈویلپر کی طرح پیش آئیں جو تیزی سے کوڈ لکھتا ہے لیکن پھر بھی کوڈ ریویو (code review) کی توقع رکھتا ہے۔ اس سے پوچھیں کہ اس نے اس ٹری ٹریورسل (tree traversal) کے لیے ایٹریشن (iteration) کے بجائے ریکرشن (recursion) کا انتخاب کیوں کیا۔ پوچھیں کہ کیا میموری کے لحاظ سے زیادہ بہتر کوئی راستہ ہے جو ایڈج کیسز (edge cases) کو بہتر طریقے سے سنبھال سکے؟ پوچھیں کہ جب ان پٹ 'null' ہو، نیٹ ورک ریکویسٹ ٹائم آؤٹ ہو جائے، یا جب دو صارفین ایک ہی وقت میں فنکشن کو ٹرگر کریں تو کیا ہوگا؟ اسے لائن بہ لائن منطق سمجھانے پر مجبور کریں جیسے کہ آپ اپنے کسی جونیئر ساتھی کی پل ریکویسٹ (pull request) کا جائزہ لے رہے ہوں۔
جب آپ ماڈل کو اپنے فیصلوں کا جواز پیش کرنے پر مجبور کرتے ہیں، تو آپ خود بھی انہیں سمجھنے پر مجبور ہو جاتے ہیں۔ یہ صورتحال کو مکمل طور پر بدل دیتا ہے۔ AI ایک آٹو پائلٹ کے بجائے ایک ٹیوٹر بن جاتا ہے۔ مقصد یہ نہیں ہے کہ آپ خود بالکل کوڈ نہ لکھیں۔ بلکہ مقصد صرف وہی کوڈ لانچ کرنا ہے جسے آپ مکمل طور پر سمجھتے ہوں، چاہے اس کا پہلا مسودہ اسسٹنٹ نے ہی کیوں نہ تیار کیا ہو۔
وہ مہارتیں جو اب اصل میں اہمیت رکھتی ہیں
سنٹیکس لکھنا دن بدن سستا ہوتا جا رہا ہے۔ پڑھنا اور استدلال کرنا...
