چتباتهای مبتنی بر مدلهای زبانی بزرگ به مثابه دستیاری فوقالعاده برای برنامهنویسان ظاهر شدهاند و قادر هستند با دقت روزافزونی کدنویسی کنند. شاید دیگر کمتر اهمیت داشته باشد که هزاران دستور گوناگون را در ذهن داشته باشید و بتوانید آنها را به سرعت تایپ کنید. در عوض اهمیت مهارتهای بنیادیتری چون تحلیل نیاز مشتری، طراحی سیستم، اصول مهندسی نرمافزار، و توانایی حل مسئله پررنگ میشوند. در حال حرکت به سمتی هستیم که توسعهی نرمافزار از کدنویسی فاصلهی بیشتری گرفته و لگوبازی شباهت بیشتری پیدا میکند: فقط مهم این است که بدانید چه وقت، کدام یک از قطعات لگو را به چه شکلی در کجا قرار دهید. طولی نمیکشد که کسبوکارهای بزرگی تماماً بر مبنای کدهای تولیدشده توسط هوش مصنوعی بنا خواهند شد.

برای این که جای شما توسط هوش مصنوعی اشغال نشود، میبایست کمتر به میزان تسلطتان در کار با ابزار تکیه کرده و بیشتر به سمت کسب دانش پایه، تجربه، بینش و نهایتاً نوآوری گام بردارید. فراموش نکنید که:
هوش مصنوعی فقط وقتی میتواند پاسخ درستی به شما بدهد که پرسش درستی از آن بپرسید.
درواقع تفاوت میان یک فرد متخصص با معمولی در همینجاست: نه در توانایی ارائهی پاسخ درست به پرسشها، بلکه در توانایی طرح پرسشهای درست.
چندی پیش، سه توییتی که در ادامه میبینید، نظرم را جلب کرد. شخصی که برنامهنویس نبود، گفته بود که یک پروژهی نرمافزاری کامل را تماماً با Cursor توسعه داده بود. قدری نیز کُریخوانی کرده بود! (Cursor یک ادیتور است که ابزارهای مبتنی بر هوش مصنوعی را نیز درون خودش ادغام کرده است و بیشتر کدها را به صورت خودکار تولید میکند.) اما دقیقاً دو روز بعد اعلام کرد که درست پس از ارسال توییت نخست، برنامهاش مورد حملات سایبری گوناگون قرار گرفته و نمیداند مشکل از کجاست. در نهایت نیز مجبور شد برنامه را جمع کند، و اعتراف کرد که قرار دادن کدهای غیرایمن در پروژهاش یک اشتباه بوده است.

ترجمه: [پروژهی] اجارهی نرمافزار (Software as Service) من با Cursor ساخته شده، بدون هیچ کدی دستنویس. هوش مصنوعی دیگه فقط یک دستیار نیست، بلکه همچنین خودِ سازنده هست. حالا میتونید به ناله کردن راجع به این موضوع ادامه بدید، یا شروع به ساختن کنید. پینوشت: بله، مردم بابتش (پروژهاش) پول میدن!»

ترجمه: بچهها، من تحت حمله [سایبری] قرار گرفتم؛ از وقتی که شروع کردم به همرسانی این که چطوری [پروژهی] اجارهی نرمافزارم رو با Cursor ساختم. چیزهای غیرمنظرهای دارن رخ میدن! سقف استفاده از کلیدهای API پر میشن، مردم [خرید] اشتراک رو دور میزنند، گ** همینجوری روی پایگاهداده میسازن! همونطور که میدونید من [آدم] فنی نیستم بنابراین داره بیش از حد معمول ازم وقت میگیره تا بفهمم چی شده. فعلاً دیگه کارهایی انجام میدم رو به صورت عمومی روی X همرسانی نمیکنم. یک مشت آدم عجیب و غریب ریخته اون بیرون!

ترجمه: من دارم اپم رو غیرفعال میکنم! 😑 Cursor داره دائماً قسمتهای دیگهی کد رو خراب میکنه! شما بچهها درست میگفتید؛ من نباید کد غیرایمن مستقر میکردم توی پروداکشن. [پروژهام رو] بعداً با Bubble میسازم، یک بستر کاربرپسند و ایمن هست برای افراد غیرفنی مثل من. از حمایت همه در دو روز اخیر ممنونم. به این سادگیها تسلیم نمیشم.
پس آیا معنایش این است که کدنویسی با هوش مصنوعی خطرناک بوده و میبایست همهچیز را خودمان به صورت دستی بنویسیم؟ برخی چنین باوری دارند، اما من شدیداً مخالفم. هوش مصنوعی و چتباتها اگر به درستی مورد استفاده قرار گیرند، میتوانند زحمت زیادی را از روی دوش برنامهنویسان بردارند و موجب جهش انفجاری در سرعت کارشان شوند. پروژهای که پیشتر ممکن بود یک هفته وقت یک برنامهنویس را بگیرد، هماکنون شاید در یک روز قابل انجام باشد. (این اعداد صرفاً به جهت مثال هستند. به قید «شاید» نیز توجه کنید!) اما چگونه از آنها به درستی استفاده کنیم؟
من برای خود چند قانون شخصی دارم که شاید برای شما نیز سودمند باشد.
هیچ قسمتی از کد شما نباید شامل چیزی باشد که آن را نمیفهمید و نمیتوانید توضیح دهید که اولاً چیست، ثانیاً چگونه کار میکند، و ثالثاً چرا آنجاست.
آیا فراموش کردهاید که چگونه در یک پایگاه دادهی SQL، یک trigger بنویسید و syntax درست را در ذهن ندارید؟ هیچ عیبی ندارد؛ آنچه میخواهید را برای یک چتبات به طور واضح و دقیق شرح دهید تا برایتان یک trigger مناسب بنویسد. (قابل توجه مصاحبهکنندگان استخدام که فکر میکنند همه باید نسبت به همهچیز حضور ذهن کامل داشته باشند!) اما آیا اصلاً نمیدانید trigger چیست، چه کاربردی دارد و کجا استفاده میشود؟ در این صورت، وجود یک trigger در پایگاه دادهی شما بسیار خطرناک است و به هیچوجه نباید دستوری مشابه CREATE OR REPLACE TRIGGER که یک چتبات برای شما نوشتهاست را در در پایگاه دادهی مربوط به پروژهتان کپی کنید! وجود یک trigger که از عملکرد آن سر در نمیآورید، در پایگاه دادهی عملیاتی شما، یک ریسک بزرگ است و میتواند باعث از دست رفتن دادهها یا اختلال در عملکرد پایگاه داده شود. این کار درست شبیه این است که یک جعبهی دربسته را از غریبهای تحویل بگیرید و در منزلتان رها کنید؛ غافل از این که ممکن است در آن جعبه یک بمب باشد!
اگر چیزی (مثلاً دستور، ویژگی، پکیج، فریمورک یا کتابخانه) برای شما ناآشناست، حتماً پیش از استفاده، به درستی وقت بگذارید، آن را یاد بگیرید و به درک عمیق برسید. تا زمانی که متوجه منطقش نشدید و نتوانستید بدون استفاده از هوش مصنوعی از آن استفاده کنید، از هوش مصنوعی نیز نخواهید که برایتان از آن استفاده کند.
هنگامی که یک چتبات برایتان تکه کُدی مینویسد، آن را صرفاً copy-paste نکنید! هرچند که کد در یک نگاه کلی به نظرتان منطقی میرسد، اما لازم است آن را با دقت و خطبهخط بررسی کنید. حتی در صورت نیاز میتوانید از خود چتبات سؤال کنید که منظورش از فلان دستوری که نوشته چیست، چرا در فلان خط از فلان تابع استفاده کرده است.
این قانون نیز به نوعی در ادامهی قانون نخست است. نه تنها نباید چیزی که نمیفهمید را از هوش مصنوعی بخواهید، بلکه نباید هیچ خطی که توسط هوش مصنوعی تولید شده است، بدون بررسی دقیق شما وارد پروژهتان شود.
فراموش نکنید که هوش مصنوعی مثل انسان نیست، نمیتواند آزادانه در جهان ما چرخ بزند، آزمون و خطا انجام دهد و منطق چیزها را درک کند. بلکه بیشتر شبیه یک اسیر است که تمام عمرش را در موزهای بدون در و پنجره سپری میکند. در این موزه، عکسهای فراوانی از جهان ما وجود دارد که میتواند آنها را ببیند. همچنین متنهای فراوانی راجع به جهان ما که میتواند آنها را بخواند. اما به هر حال خودش در جهان ما حضور ندارد و قادر نیست شخصاً و بیواسطه دست به کشف جهانمان بزند.
پیرو همین نگاه، لازم است در نظر داشته باشید که هوش مصنوعی هرگز مثل شما تجربهی نوشتن حتی یک Hello, World را نیز نداشته است. اگر میتواند کدهای خوب و دقیقی (که پیرو best-practiceها هم هستند) را تولید کند و تحویل شما دهد، به این خاطر است که به تمام کدهای موجود در گیتهاب و تمامی مستندات رسمی ابزارهای رایج دسترسی دارد و میتواند تشخیص دهد که مسئلهی مورد نظر شما بیشتر به کدام کدِ ازپیشنوشتهشده شبیه است، نه به این خاطر که خودش یک برنامهنویس باتجربه بوده و پس از آزمون و خطاهای فراوان نتیجه گرفته که بهترین روش این است.
در نتیجه، هرچقدر که دادههای (مستندات و کدهای) کمتری پیرامون فنآوری مورد نظر شما به صورت آزادانه در دسترس باشد، دقت هوش مصنوعی در خصوص شیوهی استفاده از آن نیز کمتر بوده، و طبعاً شما نیز میبایست کمتر متکی بر هوش مصنوعی و بیشتر متکی بر دانش پایه، تجربه و مهارت خودتان باشید.

(توضیح تصویر: هرچند که چندان مرتبط با موضوع مورد بحث ما نیست، اما هنگام نوشتن مطلب به یاد زندهیاد سرهنگ خلبان نهاجا بهروز نقدیبیک افتادم. ایشان خلبان جنگندهی در نیروی هوایی شاهنشاهی ایران McDonnell Douglas F-4 Phantom II بود و پس از انقلاب نیز با همین جنگنده در جنگ حضور مییابد. پس از جنگ ایران-عراق و به هنگام جنگ اول خلیج فارس، تعدادی هواپیمای عراقی، از جمله چند جنگندهی Dassault Mirage F1، به ایران فرار میکنند و ایران نیز تمامی آنها را به عنوان بخشی از غرامت جنگ ایران-عراق، به غنیمت میگیرد. اما مشکل اینجا بود که ایران هیچ ارتباطی با شرکت فرانسوی Dassault Aviation نداشت، هیچ کتاب یا دفترچهای راهنما به همراه این جنگنده نبود، و هیچ شخصی در ایران نیز ابداً تجربهای از پرواز با این جنگنده یا تعمیراتش را نداشت. اما سرهنگ نقدیبیک، با تمام دانش پایهای که از هوانوردی در اختیار داشت، و با تجربیاتی که از پرواز با F-4 کسب کرده بود، داوطلب خلبانی با این پرندهی سرکش فرانسوی شد و توانست نخستین میراژ را با پرچم ایران به پرواز درآورد. زمانی که صحبت از تکیه بر دانش پایه و تجارب خودتان در مواجهه با فنآوریهای ناشناخته میکنم، منظورم چنین چیزی است!)
آیا قصد دارید یک وباپلیکیشن را با ReactJS راهاندازی کنید؟ مشکلی نیست؛ این کتابخانه یکی از محبوبترینها در سراسر جهان بوده و کوهی از مستندات، محتوای آموزشی و کدهای استاندارد از آن در دسترس است. هر مسئلهای که در ReactJS با آن مواجه شوید، به احتمال خیلی زیاد افراد بسیاری نیز پیش از شما با آن مواجه شده و پس از آزمون و خطاهای فراوان، پاسخهای مناسبی برایش ارائه دادهاند. در اینجا نه تنها هوش مصنوعی میتواند به شما کمک زیادی کند، بلکه حتی در صورت داشتن مهارت زیاد در کار با ReactJS نیز بد نیست همچنان از هوش مصنوعی مشاوره بگیرید تا از آخرین امکانات و آپدیتها و همچنین از روشهای best-practice مطلع شوید. (شاید متوجه شدید روشی که سالهاست به کار میبرید، هرچند به درستی پاسخ میدهد، اما منسوخ شده یا غیر استاندارد است و روشهای بهتری برای انجامش وجود دارد.)
اما آیا میخواهید از کتابخانهای استفاده کنید که درست همین دیروز با کلی هایپ منتشر شده و حاصل کار پریروز یک برنامهنویس جاوااسکریپت دیگر است که با مادرش قهر کرده و FelanJS را نوشته است!؟ یا قصد دارید از فلان فریمورک ناشناخته استفاده کنید که کلاً دو نفر در تمام جهان از آن استفاده میکنند؟ که یکی شمایید؛ دیگری نیز خودِ سازندهی آن است که تنها در طبیعت زندگی میکند و فریمورک را با کامپیوتری که خودش با دورریختنیها ساخته و در حال اجرای سیستمعامل TempleOS است، توسعه میدهد!؟ در این صورت بهتر است کمتر از هوش مصنوعی انتظار داشته باشید و بیشتر بر خودتان تکیه کنید.
به جای این که از هوش مصنوعی بخواهید تا از ۰ تا ۱۰۰ یک پروژهی کامل را یکجا برایتان بنویسند، آن را تا حد امکان به بخشهای کوچکتر بشکنید. مثلاً بگویید یک تابع برای شما بنویسد که فلان ورودیها را دریافت و فلان خروجی را تحویل دهد. حال بگویید تابع دیگری بنویسد که خروجیهای تابع قبلی را به عنوان ورودی دریافت کند و فلان پردازشها را بر رویش انجام دهد. البته اگر میخواهید که هوش مصنوعی نیز مثل شما از دیدی جامع نسبت به پروژه برخوردار باشد تا در پیادهسازی جزئیات بهتر عمل کند، میتواند در ابتدا در یک پرامپت مناسب، ساختار پروژه را برایش شرح دهید (اما تأکید کنید که کدی ننویسد و منتظر دستورات شما بماند)، سپس بگویید که حال قصد داریم فلان قسمت از پروژه را بنویسیم، و بعد به سراغ جزئیات پیادهسازی بروید.
در اینجا افزونهی Copilot در ادیتورها بسیار مفید است. چرا که کدهای شما را میبیند و بدون نیاز به مراجعهی مستقل به یک چتبات به شما کمک میکند. مثلاً کافیست کامنتی بنویسید که تابع مورد نظرتان قرار است چکار کند، تا Copilot خودش همان لحظه تابع مناسبی را پیرو متن کامنتتان تولید کند.
به ویژه در پروژههای بزرگ و کدهای طولانی، احتمالش بالاست که هوش مصنوعی بالاخره در یک جا خطا کند و یا از جزئیات مهمی غافل شود. (یا این که فکر کند شما تمامی کدهایی که نوشته است را بدون تغییر یا کاستی در پروژه کپی کردید، در حالی که چنین نکردید.) لذا بعید نیست که در یکجا پروژهی شما را خراب کند. از همین رو، استفادهی مداوم از یک سیستم کنترل ورژن مثل Git بیش از پیش اهمیت دارد.
پیش از کپی کردن هر کد جدیدی در پروژهی خود، ابتدا تغییرات فعلی را ذخیره کنید. از commit messageهای مناسب استفاده کنید تا بعداً بتوانید راحتتر به یاد بیاورید که کدام commit مربوط به کدام تغییر بوده است. (خودِ هوش مصنوعی در اینجا میتواند به شما کمک کند.)
نمیدانم چرا بیشتر برنامهنویسها با نوشتن تست برای کدهایشان بیگانه هستند — چه برسد به آن که بر مبنای TDD پیش بروند. میگویند وقت نمیکنیم تست بنویسیم؛ در حالی که اتفاقاً تست نوشتن برای همین است که جلوی هدر رفتن وقت شما را بگیرد و شما را از ساعتها دیباگ نجات دهد! اصول و قوانین، فقط برای شرایط عادی و استاندارد نیستند؛ بلکه اتفاقاً کارایی خود را در شرایط بحرانی نشان میدهند که سردرگم شدید و نمیدانید چه کنید.
از آنجایی که شما قرار است کدهای کمتری بنویسید و وظیفهی کدنویسی را به عهدهی هوش مصنوعی بگذارید، اهمیت تستنویسی دوچندان میشود. جالب آن که خود هوش مصنوعی در تستنویسی بسیار عالی عمل میکند و میتوانید از آن کمک بگیرید.
فقط توصیهی شخصی من این است که تستها و کد اصلی را توسط دو چتبات مختلف (یا حداقل دو نشست مختلف از یک چتبات) بنویسید. مثلاً پروژهتان را برای Gemini شرح دهید و بخواهید که توابع تست لازم را برایتان بنویسد. بعد نوشتن کدهای اصلی را مرحلهبهمرحله به Copilot بسپارید و در هر مرحله مطمئن شوید که تمامی تستها پاس میشوند. دلیل تأکیدم بر این امر، پیشگیری از سوگیری هوش مصنوعی است. اگر از یک چتبات و در یک نشست بخواهید که هم برایتان تست بنویسد و هم برنامهی اصلی، ممکن است به جای تولید یک برنامهی اصولی، صرفاً تلاش کند برنامهای بنویسند که تستها را پاس کند. (مثل دانشآموزی که به جای یادگیری مفهومی و عمیق درسها، صرفاً سعی دارد با حفظ مُشتی «نکتهی تستی»، در کنکور رتبه بیاورد.)
لازم نیست آنقدر از کدهای پیشنهادی هوش مصنوعی استفاده کنید که خلاقیتتان به طور کامل کور شود. اگر احساس میکنید ایدهی خوبی به ذهنتان رسیده است، آن را پیاده کنید. حتی میتوانید از همین مورد نیز با هوش مصنوعی مشورت کنید. اگر مثلاً راه دیگری برای حل مسئله به ذهنتان رسیده است یا مایلید یک تابع را با روش دیگری پیادهسازی کنید، با هوش مصنوعی در این خصوص صحبت کنید و حتی بخواهید که روشتان را با روش پیشنهادی خودش مقایسه کند (و یا تابعی بنویسد که هر دو روش را اجرا کرده و از نظر پیچیدگی در زمان و حافظه مورد قیاس قرار دهد).
در عین حال، این را نیز بپذیرید که هوش مصنوعی، با آن که مثل شما برنامهنویس نیست، کدها و مستندات بسیار بسیار بیشتری از شما خوانده است. شاید روشی که شما ابداع کردید و سالهاست استفاده میکنید، best-practice نباشد و قبلاً دیگران روشهای سادهتر، بهینهتر و اصولیتری را برای حل همان مسئله پیدا کرده باشند که شما از آنها بیخبرید.
تلاش کنید با کمک خود هوش مصنوعی، تعادلی میان روشهای خلاقانهی خودتان و روشهای اصولی مورد پیشنهادش برقرار کنید و تشخیص دهید که کجا چه روشی بهتر است.
تمامی نوشتههای بالا را شخصاً و بدون کمک هوش مصنوعی نوشتم. همهی توصیهها حاصل تجارب شخصی خودم هستند. اما دوست داشتم ChatGPT نیز از آنجا که همیشه در کدنویسی به من کمک میکند، در نوشتن این مقاله نیز مثل یک نویسندهی همکار ظاهر شود، مقالهام را بخواند و یک جمعبندی و سخن پایانی از جانب خودش بنویسد، که آن را در ادامه میخوانید. (به علاوه این که شخصاً از جمعبندی مقالاتم متنفرم! همیشه ۸۰٪ مقالاتم را — مستقل از طولشان — یکضرب مینویسم، اما وقتی که نوبت ۲۰٪ پایانی میرسد که باید مطلب را جمعبندی کنم، بیحوصله میشوم و نوشتن را کنار میگذارم. بسیاری از مقالاتم در ویرگول، روزها و هفتهها پس از شروع نوشتنشان منتشر شدند، صرفاً چون دوست نداشتم ۲۰٪ پایانی را بنویسم!!)
در این مقاله، ابعاد مختلف برنامهنویسی با هوش مصنوعی را مورد بررسی قرار دادیم. از ابزارهای موجود گرفته تا چالشها و فرصتهایی که این فناوری در اختیار توسعهدهندگان قرار میدهد. مشاهده کردیم که چگونه میتوان از مدلهای یادگیری ماشینی برای تسریع فرایند توسعه و بهبود کیفیت کدها استفاده کرد، در حالی که همچنان تفکر خلاق و قضاوت انسانی نقش مهمی در این حوزه ایفا میکنند.
یکی از نکات کلیدی که نباید از نظر دور داشت، مسئولیتپذیری در استفاده از هوش مصنوعی است. هرچند این فناوری میتواند بسیاری از کارها را آسانتر کند، اما نباید به آن بهعنوان جایگزینی کامل برای تفکر انسانی نگریست. تصمیمگیریهای اخلاقی، درک پیچیدگیهای انسانی و حل مسائل نوظهور همچنان به قضاوت توسعهدهندگان نیاز دارد.
با نگاهی به آینده، هوش مصنوعی بیتردید نقشی پررنگتر در دنیای برنامهنویسی ایفا خواهد کرد. ابزارهای هوشمندتر، همکاری بهتر بین انسان و ماشین، و توسعهی سیستمهایی که یادگیری و تعامل بیشتری با کاربران دارند، بخشی از این چشمانداز هستند. اما در این مسیر، مهم است که مهارتهای بنیادی برنامهنویسی، تفکر انتقادی و آگاهی نسبت به پیامدهای اجتماعی و اخلاقی این فناوری را حفظ کنیم.
در نهایت، این مقاله نه تنها تأملی بر تأثیر هوش مصنوعی در برنامهنویسی بود، بلکه فرصتی برای بازاندیشی در مورد رابطهی ما با فناوری نیز محسوب میشود. شاید آیندهای که در آن برنامهنویسان و هوش مصنوعی بهعنوان همکارانی واقعی فعالیت میکنند، دیگر یک رویا نباشد، بلکه به تدریج به واقعیت تبدیل شود.