ترقی نئی اور مفید چیزوں کی بار بار تخلیق کا نام ہے۔
جب ہم ترقی کے بارے میں سوچتے ہیں تو اکثر نئے مصنوعات کی ترقی ذہن میں آتی ہے۔ یہ مینوفیکچرنگ سے مختلف ہے، جو انفرادی مصنوعات تیار کرتی ہے؛ اس کے بجائے، اس میں مصنوعات کے ڈیزائن کی وضاحتیں یا سانچے بنانا شامل ہوتا ہے۔
اس طرح، نئے مصنوعات کی ترقی کے ذریعے بنائے گئے بلیو پرنٹس یا سانچے فیکٹریوں میں بار بار استعمال ہوتے ہیں تاکہ ایک جیسے مصنوعات کی بڑی تعداد تیار کی جا سکے۔
انفرادی صلاحیتوں کی ترقی یا معاشرے اور قوموں کی ترقی جیسے استعمال بھی ہیں۔ ان کا مطلب صرف کسی چیز کے قبضے میں اضافہ نہیں ہوتا، بلکہ ترقی یافتہ صلاحیتوں کو بار بار استعمال کرنے اور ان سے فائدہ اٹھانے کی صلاحیت بھی ہوتی ہے۔
اگرچہ افراد اور معاشروں کی معاشی طاقت معاشی حالات کی وجہ سے اتار چڑھاؤ کا شکار ہو سکتی ہے، لیکن ترقی یافتہ صلاحیتیں بنیادی طور پر مستقل ہوتی ہیں۔
اگر وہ کم بھی ہوں تو اسے معاشی خوشحالی کے اتار چڑھاؤ کے بجائے زوال سمجھا جاتا ہے۔
ان کے علاوہ، ٹیکنالوجی اور علم کی ترقی بھی ہے۔ افراد یا مخصوص معاشروں کی صلاحیتوں کے برعکس، ان میں آسانی سے قابل اشتراک ہونے کی خصوصیت ہوتی ہے۔
اور ان ترقیات کے نتیجے میں بننے والی مصنوعات، صلاحیتوں، علم اور ٹیکنالوجیز میں سے کچھ ایسی بھی ہوتی ہیں جو بعد کی ترقی میں معاون ثابت ہو سکتی ہیں۔
ایسے مفید نتائج کو ترقی دے کر، ترقی کا دائرہ وسیع ہوتا ہے، اور کارکردگی اور معیار بہتر ہوتا ہے۔
AI سے چلنے والی سافٹ ویئر ڈویلپمنٹ
عام طور پر، ترقی کے لیے کافی وقت اور محنت درکار ہوتی ہے۔ خاص طور پر جیسے جیسے معاشرہ ترقی کرتا ہے اور مختلف چیزیں زیادہ جدید ہوتی جاتی ہیں، نئی چیزیں بنانا اور بھی مشکل ہو جاتا ہے۔
تاہم، جنریٹیو AI کے آنے سے یہ صورتحال بدل رہی ہے۔ فی الحال، جنریٹیو AI کی اعلیٰ پروگرامنگ صلاحیتوں کی بدولت سافٹ ویئر ڈویلپمنٹ میں ڈرامائی تبدیلیاں آ رہی ہیں۔
اس منظرنامے میں، ایک ایسا مستقبل کا تصور جہاں جنریٹیو AI پر مبنی خود مختار ایجنٹ سافٹ ویئر انجینئرز کے طور پر سافٹ ویئر ڈویلپمنٹ کا مرکز بن جائیں، پہلے ہی حقیقت بن رہا ہے۔
ہم فی الحال ایک عبوری مرحلے میں ہیں۔ اگرچہ ہم ترقی کو مکمل طور پر جنریٹیو AI کے سپرد نہیں کر سکتے، لیکن جنریٹیو AI کا مہارت سے استعمال سافٹ ویئر ڈویلپمنٹ کو طاقتور طریقے سے آگے بڑھا سکتا ہے۔
اسے AI سے چلنے والی سافٹ ویئر ڈویلپمنٹ کہا جاتا ہے۔
ترقیاتی ڈیویلپمنٹ
جب جنریٹیو AI سافٹ ویئر کی ڈیویلپمنٹ کو مزید مؤثر بناتا ہے، تو یہ نہ صرف حتمی سافٹ ویئر کی ڈیویلپمنٹ کو بلکہ ڈیویلپمنٹ میں معاون سافٹ ویئر کی ڈیویلپمنٹ کو بھی بہتر بنا سکتا ہے۔
جیسا کہ پہلے ذکر کیا گیا ہے، وہ نتائج جو ڈیویلپمنٹ میں سہولت فراہم کرتے ہیں، اس کے دائرہ کار کو وسیع کرتے ہیں، اور کارکردگی اور معیار کو بہتر بنانے میں مدد دیتے ہیں۔ مزید برآں، اگر مؤثر طریقے سے تخلیق کیے جائیں تو انہیں دیگر ڈیویلپمنٹ پراجیکٹس میں دوبارہ استعمال کیا جا سکتا ہے۔
لہذا، سافٹ ویئر ڈیویلپمنٹ کے عمل کے دوران ایسے سافٹ ویئر کی ڈیویلپمنٹ سے جو ڈیویلپمنٹ میں مددگار ہو، مجموعی کارکردگی میں اضافہ ہو سکتا ہے، اور ان اثاثوں کو مستقبل کی ڈیویلپمنٹ کے لیے استعمال کیا جا سکتا ہے۔
روایتی طور پر، ایسے معاون سافٹ ویئر کو ڈیویلپ کرنا ایک عام عمل تھا، لیکن اس کے لیے اپنا ڈیویلپمنٹ کا وقت اور محنت درکار ہوتی تھی، جس کے لیے محتاط غور و فکر اور مرکوز عملدرآمد ضروری تھا۔
جنریٹیو AI کا استعمال کرتے ہوئے، کوئی بھی فوری طور پر معمولی کاموں کو خودکار بنانے کے لیے سادہ سافٹ ویئر بنا سکتا ہے۔ اگر کام میں واضح پروسیسنگ شامل ہو تو جنریٹیو AI تقریباً بغیر کسی غلطی کے درست پروگرام تیار کر سکتا ہے۔
نتیجتاً، سافٹ ویئر ڈیویلپمنٹ کے عمل کے دوران ڈیویلپمنٹ میں مدد کے لیے سافٹ ویئر بنانا پہلے سے زیادہ آسان ہو گیا ہے۔
اور، اس پر گہرائی سے غور کرنے سے، ایک ایسا ڈیویلپمنٹ کا انداز ابھرتا ہے جہاں ڈیویلپمنٹ کے لیے مفید ٹولز اس عمل کے دوران مسلسل بنائے جاتے ہیں، جس سے ڈیویلپمنٹ کا طریقہ کار ہی تبدیل ہو جاتا ہے۔
ہم اسے "ترقیاتی ڈیویلپمنٹ" کہیں گے۔
ترقیاتی ڈیویلپمنٹ پر عمل کرنے کے لیے، کسی کو اپنی سافٹ ویئر ڈیویلپمنٹ کا معروضی مشاہدہ کرنے کی عادت ہونی چاہیے، یہ سوچنا چاہیے کہ کون سے حصے سافٹ ویئر کے ذریعے سنبھالے جا سکتے ہیں اور کون سے حصے صرف انسانوں کے ذریعے، اس کے ساتھ ایسے معاون سافٹ ویئر کو ڈیویلپ کرنے کی مہارت بھی درکار ہے۔
مزید برآں، جنریٹیو AI کو ان سافٹ ویئر ٹولز میں شامل کیا جا سکتا ہے۔ اسے سافٹ ویئر کے اندر ایمبیڈ کرنے سے، جنریٹیو AI ایجنٹس کے برعکس، پروسیسنگ کا دائرہ کسی حد تک تنگ کیا جا سکتا ہے، اور راستے متعین کیے جا سکتے ہیں۔
جبکہ AI ایجنٹس پرامپٹس کے ذریعے اسی طرح کے نتائج حاصل کر سکتے ہیں، ایمبیڈڈ جنریٹیو AI والا سافٹ ویئر پروگراموں اور پرامپٹس دونوں کو یکجا کر کے زیادہ آسانی سے درستگی بڑھا سکتا ہے۔
اگر اس طرح کی ترقیاتی ڈیویلپمنٹ پر عمل کیا جا سکتا ہے، تو دوسرا پراجیکٹ پہلے کے مقابلے میں معیار اور لاگت دونوں میں بہتری دکھائے گا۔ مزید برآں، ہر آنے والے پراجیکٹ—تیسرے، چوتھے، اور اسی طرح—کے ساتھ بہتری جاری رہے گی۔
یہ صرف جنریٹیو AI کا استعمال کرتے ہوئے سافٹ ویئر ڈیویلپ کرنے سے بالکل مختلف ہے۔ جنریٹیو AI ٹولز میں مہارت حاصل کرنے والی ٹیموں اور ترقیاتی ڈیویلپمنٹ پر عمل کرنے والی ٹیموں کے درمیان وقت کے ساتھ ایک بڑا فرق پیدا ہو گا۔
ریفیکٹرنگ سے چلنے والی جانچ
ایک تصور ہے جسے ٹیسٹ ڈریون ڈویلپمنٹ (TDD) کہتے ہیں، جہاں پہلے وضاحتوں کی بنیاد پر ٹیسٹ ڈیزائن کیے جاتے ہیں، اور پھر ان ٹیسٹوں کو پاس کرنے کے لیے سافٹ ویئر تیار کیا جاتا ہے۔
ابتدا میں، میں نے بھی سوچا تھا کہ جنریٹو AI کا فائدہ اٹھا کر، خودکار جانچ کے لیے ٹیسٹ پروگرام تیار کرنا آسان ہو جائے گا، جس سے TDD قابل عمل ہو جائے گا۔
تاہم، جب میں نے ترقیاتی ترقی کی مشق شروع کی، تو مجھے یقین ہو گیا کہ ٹیسٹوں کو لاگو کرنے سے پہلے ان کے بارے میں سوچنا ہمیشہ سب سے مناسب طریقہ نہیں ہوتا۔
خاص طور پر ویب ایپلیکیشنز جیسے سافٹ ویئر کے لیے جن میں استعمال پذیری اور بصری ڈیزائن جیسے ذاتی پہلو شامل ہوتے ہیں، جن سے براہ راست تعامل کیا جاتا ہے، میں نے محسوس کیا کہ اصل میں سافٹ ویئر کو چلانا اور اس کے ساتھ تعامل کرنا تفصیلی ٹیسٹوں پر ترجیح رکھتا ہے۔
اس کی وجہ یہ ہے کہ اگر اس کے ساتھ تعامل کے بعد UI/UX سطح پر نمایاں عدم اطمینان ہو، تو اس بات کا امکان ہوتا ہے کہ فریم ورک، بنیادی فن تعمیر، ڈیٹا ماڈل، یا یوز کیسز جیسے بنیادی حصوں کو تبدیل کرنا چاہا جائے۔
اپنے موجودہ ذاتی سافٹ ویئر ڈویلپمنٹ پروجیکٹ میں، میں نے فیچر کی لچک اور کارکردگی کے مسائل کو نوٹ کیا اور بالآخر دو فریم ورک کو مختلف سے تبدیل کر دیا۔
مجھے میموری کے غیر مؤثر استعمال کی وجہ سے کچھ علاقوں میں پروسیسنگ کا مکمل جائزہ بھی لینا پڑا۔
ریفیکٹرنگ کے ان لمحات میں ہی جانچ پہلی بار ایک شعوری غور و فکر بن جاتی ہے۔
اگر یہ ترقی کے ابتدائی مرحلے میں ہو، یا اگر فنکشنز اور وضاحتیں ویسے بھی نمایاں طور پر تبدیل ہونے والی ہوں، تو ٹیسٹ غیر ضروری ہو سکتے ہیں۔
تاہم، اگر ترقی پہلے ہی کافی آگے بڑھ چکی ہو اور جانچنے کے لیے بہت سی اشیاء ہوں، تو یہ تصدیق کرنے کے لیے ٹیسٹوں کی ضرورت ہوگی کہ ریفیکٹرنگ نے فنکشنل نقائص یا کوتاہیوں کو متعارف نہیں کرایا ہے۔
لہذا، ترقی یافتہ ہونے کے بعد اور جب ریفیکٹرنگ ضروری ہو جائے تو ٹیسٹ پروگرام بنانے کا طریقہ برا نہیں ہے۔
اس مرحلے پر، اہم بات یہ نہیں کہ تمام کوڈ کے لیے ٹیسٹ بنائے جائیں، بلکہ ایسے پختہ حصوں کی جانچ پر توجہ دی جائے جن میں مستقبل میں زیادہ تبدیلی کا امکان نہیں ہے، جبکہ فلوئڈ حصوں کو خودکار ٹیسٹوں کے بغیر چھوڑ دیا جائے۔
اسے ریفیکٹرنگ سے چلنے والی جانچ کہا جا سکتا ہے۔
نتیجہ
جنریٹیو AI سافٹ ویئر ڈویلپمنٹ کو ڈرامائی طور پر تبدیل کر رہا ہے۔
پچھلے ایک مضمون میں، میں نے "اومنی ڈائریکشنل انجینئر" بننے کے مقصد کی اہمیت کے بارے میں لکھا تھا، جو مختلف ڈومینز، انفراسٹرکچرز، اور ایگزیکیوشن ماحول کو یکجا کرنے والے سسٹمز کو تیار کرنے کی صلاحیت رکھتا ہو، اور روایتی فل سٹیک انجینئر سے آگے بڑھ کر کام کرے۔
میں نے ایک مضمون یہ تجویز کرتے ہوئے بھی لکھا تھا کہ ہم "ایکسپیرینس اور بیہیویر سینٹرک ڈویلپمنٹ" کے دور میں داخل ہو رہے ہیں، جہاں توجہ وضاحتوں کو نفاذ کے ساتھ ہم آہنگ کرنے پر نہیں، بلکہ سافٹ ویئر کے رویے کے ذریعے صارف کے تجربے کو بہتر بنانے پر ہے۔
ترقیاتی ڈویلپمنٹ اور ریفیکٹرنگ سے چلنے والی جانچ بالکل وہی ہیں جو سافٹ ویئر ڈویلپمنٹ میں ان نئے افق کی طرف لے جاتی ہیں۔