در دنیای کدنویسی با هوش مصنوعی AI چطور بازنده نباشیم!؟
کدنویسی با هوش مصنوعی AI رو خیلی ها در موردش نوشتن اما این نوشته با مطالبی که تا حالا خوندید کمی متفاوت هستش، بیشتر مطالب دنبال فروختن فرمولهای خفن در مورد AI هستند یا درباره هشدار ترسناک در مورد هوش مصنوعی.
این بار قرار هست بگیم چطور از AI استفاده نکنیم؛ چیزی که نوشتم حاصل تجربه عملی و همفکری با همکاران و اساتید و گاهی مطالعه های پراکنده است، صرفا یک ترجمه متداول نیست، مثل همیشه سعی میکنیم با لحن طنز آمیز صحبت کنیم که خوندنش، خسته کننده نباشه.
البته پیشنهاد میکنم مطلب رو تا آخر بخونید چون ترتیب رو برای هر شخصی ممکنه متفاوت باشه ولی اول خب عناوین رو مینویسم یه نگاه کلی داشته باشیم:
- خواندن و تصحیح کدهای AI
- عمیق شدن در بخش تخصصی به ویژه syntax برنامه نویسی
- افزایش دانش عمومی دیجیتال
- کد با هوش مصنوعی؛ احساسات بد علامت خطر یا نگرانی بی مورد؟!
- شناخت و اعمال رویکرد کدنویسی
- چالش بین مدل های مختلف هوش مصنوعی برای نوشتن کد
- مشکوک بودن به کد AI
- کیفیت کد در برنامه نویسی مهم تر از نوشتن کد
قبل از شروع بگم تولید کد با AI شاید یکی از حساس ترین موضوعات این حوزه باشه و باید بدونیم تو چه مرزی پرخطری می کنیم. مثلا: اگر یک تصویر با AI تولید کنیم در حالت فاجعه بار یک تیراژی از طرح چاپ شده و ضرر قابل لمس هستش و جبرانپذیرتر.
اما اگر کدهایی که میزنیم حساسیت لازم رو نداشته باشیم، اول این که کد تقریبا یه لایه انتزاعی هستش و به سادگی نمیشه مشکلاتش رو درک کرد، در ثانی عواقب میتونه خیلی فاجعه بار باشه مثلا ممکن باعث leak شدن اطلاعات هزاران نفر بشه و اعتبار شغلی شما برای همیشه نابود کنه. صرفا اینو بیان کردیم تا بدونید چرا دونستن این مطالب مهمه.
خواندن و تصحیح کدهای نوشته شده با هوش مصنوعی AI
شاید از نظر من مهم ترین موضوع این باشه، بزرگترین دامی که من دیدم اکثریت افراد باهاش درگیر هستند اینه کد های AI مثل وحی مُنزل مورد استفاده قرار میگیره، این یعنی آغاز یک بدبختی بزرگ، حتی این جمله هم بارها شنیده شده «مگه کد AI رو میخونید!!!؟؟» این دیگه رسما میشه که تسلیم بی قید و شرط 😉
قرار نیست AI جای شما فکر کنه قرار اون کمک کنه سریع تر کد بزنید، همین. وقتی درکی از کدهای اون ندارید و فقط اونو چشم بسته استفاده میکنید مشکلات خیلی زیادی ایجاد میشه که شاید تقریبا با بیش از نصف دامهایی که در ادامه می گیم، در ارتباط باش.
قرار نیست شما کامپایلر بشید و خط به خط رو تفسیر کنید، قراره بفهمید چه کرده و اگر هیچ وقت کدی که تحویل شما شده رو حتی کار هم میکنه تصحیح نکردید و یا این موقعیت خیلی کمتر پیش میاد براتون مسلما دارید وارد یک سیاه چاله میشید که مشکلاتش شما رو خواهد بلعید.
من تراز و استاندارد نیستم، ولی شخصا حداقل ۵۰٪ از کدها تصحیح میکنم گاهی «حتی قبل تست کار کردن یا نکردن» و مجبورش میکنم کد ها رو با کامنت به من بده که بتونم دقیق تر مطالعه و تصحیح کنم.
عمیق شدن در بخش تخصصی به ویژه syntax برنامه نویسی
شاید دومین موضوع مهم این باشه، قدیما که AI نبودش، شما باید تسلط بسیار زیادی رو نحو کد یا همون syntax داشتید وگرنه کارتون راه نمیافتادش، اما دام اصلی کجاست اینجاست که شما فکر کنید یاد گرفتن سینتکس ضروری نیست در زبان برنامهنویسی، خب شاید بگید مشکل این چیه!
مشکل بر میگرده به بخش مطالعه کد و تصحیح، بذارید مثال دقیق تری بگم مثلا زبان اصلی که انتخاب کردید پایتون باشه، ولی یه جا مجبوری کد rust بزنی خب اینجا ضرورتی ایجاد نمیشه.
ولی کد پایتون شده بخشی از زندگیت و در سینتکس هم مشکل داشته باشی، این میشه یه معضل عمیق چون باید کدی که وارد میکنید، بعدا دیباگ کنید و اگر تسلط نسبتا کافی نداشته باشید یک جنگل تاریک طراحی میکنید که در آینده وقت نگهداری پروژه توی اون گم میشید. این موضوع ضرورت برای موضوع قبله که اشاره شده.
افزایش دانش عمومی دیجیتال
خب اینجا مساله صرفاً کدنویسی نیست دانش عمومی مثلا دونستن پروتکل ها و یا رفتار سیستم عامل و یا هر چیزی دیگهای که با بستری که توش کار میکنید مرتبط هستش.
شهود، شما رو برای هدایت AI قوی تر میکنه، مثال بسیار ساده بزنم مثلا دوست دارید ارتباط بسیار سریع داشته باشید در سطح وب، بعد این به هوش مصنوعی بگید من دنبال ارتباط سریع هستم، شاید اون لحظه هوش مصنوعی به کیفیت کد شما فکر کنه الگورتیم رو بهبود داده شده تحویل بده.
ولی وقتی بدونید مثلا web socket یک روش ارتباط سریع در بستر TCP هستش میتونید خیلی سریع هدایت کنید AI رو که مسیر صحیح تر رو بره، البته مثال رو ساده گفتم گاهی این کمبود دانش ممکنه وقت بیشتری از شما بگیره، گاهی ممکنه باعث بشه حتی مسیر کاملا اشتباهی رو برید که یه سنیور با دیدنش شاخ در بیاره!
کد با هوش مصنوعی؛ احساسات بد علامت خطر یا نگرانی بی مورد؟!
یکی از چیزایی ممکنه درگیرش بشید این که حس بدی زمان کار با AI داشته باشید، باید اول عوامل این حس بد رو شناسایی کنید و باهاش مبارزه یا جدی بگیریمشون:
حس عدم کنترل کد هوش مصنوعی
مثلا یکی از چیزایی که برای انسان ذاتا ناراحت کننده هستش، حس عدم کنترل هستش، مثلا وقتی به این حس برسیم کدهایی که دارم استفاده میکنیم، از کنترل کاملمون خارج شده یک زنگ خطر هستش و گاهی این احساست بیمورد هستن باید یاد بگیرید اونا رو نادیده بگیرید.
گاهی نه واقعا به این حس اتکا کنیم و مثلا با نوشتن تست اعتماد پذیری به کد رو بالا ببریم. اما برای نوشتن تست باید استراتژی های مختلفی داشته باشیم، پیشنهاد عملی طراحی تست روی کاغذ هستش: ابعاد مختلف تست رو با نگاه بسیار بد بینانه و سناریو های عجیب روی کاغذ طراحی کنید و بعد همین رو هم از AI درخواست کنید.
اینجوری با دو رویکرد مختلف امکان بررسی کد وجود داره و اعتماد پذیری نسبت به کد بالا میره، و نکته بعدی اینه تست هایی که واقعا عجیب هستند در پیاده سازیشون دقت بیشتری بشه یا دستی کدش رو بزنید یا کد زده شده رو با شدت بیشتر بررسی کنید.
این یکی از راههای افزایش کنترل بر روی حس عدم کنترل هستش، حتی اگر این حس رو مطلقاً نداشته باشین افزایش اعتماد پذیری هیچ ضرری نداره، اما اگر بخواید این رویه رو به صورت افراطی پیاده کنید از این خودش یک دام جدی هستش که پروژه ما یه تست بزرگ میشه که دست و پا در آورده😁
حس تقلب و هویت غیر حرفهای برنامه نویس
مورد بعدی حس تقلب و زیر سوال رفتن هویت حرفهای و حرفه هستش گاهی واقعا وقتی یه چیزی رو با کمک AI مینویسید حس تقلب کردن بهتون دست میده حس میکنید با هویت حرفهای خودتون به شدت تعارض داره و چون واقعا هویت حرفهای یک برنامه نویس با عمیق شدن و دقیق شدن گره خورده [بود].
این مورد قابل درک هستش اما میشه با نوشتن دستی کد در چند قسمت جدی از پروژه کمی این حس رو تقلب رو تقلیل داد و خواندن و تصحیح کد هم که خودش این حس رو کم میکنه، ولی این نباید مانع عمیق شدن شما در درک مسائل و استراتژی پروژه شه.
شاید این جمله گنگ باشه ولی بذارید دقیق توضیح بدم: تصویر کنید شما یک سنیور واقعی و مدیر پروژه همزمان هستید. [حتی اگر نیستید این فرض رو جدی بگیرید] اگر یک سنیور واقعی بخشی از کد رو به یک کارمند programmer یا کارآموز بده به هویت حرفهای اون خدشه وارد نمیشه.
اما نکته مهم اینجاست، یک سنیور هیچ وقت به کد های زیر دستش ۱۰۰٪ اعتماد نداره و ابعاد پروژه رو کامل درک کرده و در عمیق ترین قسمت ها هم میدونه چی میخواد و کد های تحویل گرفته رو review میکنه، بهتر از قبل هر push یا commit این کار رو انجام بدید:
یعنی با خودتون یک قرارداد جدی داشته باشیم خب الان میخوام push کنم، بررسی کد ها از سطح راهبردی تا سطح تکنیک منطبق با خواسته و رویکرد های تیم ماست، حس تقلب رو تا حدی زیادی کم میکنه و هویت حرفهای شما رو بازسازی میکنه.
ترس از ضعیف شدن مهارت کدنویسی
اصلی ترین مورد به در این حوزه به نظرم ترس از ضعیف شدن مهارت و پایین رفتن اعتماد هستش، اگر بخواهیم بدون تعارف صحبت کنیم، تجربه نشون داده وقتی ذهن تنبل میشه از حالت sharp بودن خارج میشه و واقعا حوصله حتی کارهای ساده تر رو نداره اگر از قدیمی تر ها بپرسید خیلی شماره تلفن ها رو واقعا حفظ بودن اما امروز همون افراد دیگه شماره ها رو حفظ نمیکنند. و بعضیاشون واقعاً این توانایی رو از دست دادن!
این هیچ اشکالی در مورد شماره تلفن نداره، اما موضوع آمادگی حل مسئله طروات ذهنی هستش، خیلی جدی این موضوع تقریبا میشه گفت خطرناک ترین نقطه هستش، یکی از راه حل هایی که تا به کمک به طروات ذهن میکنه اینه که: task های پروژه رو دستی کد بنویسم و اصلا هم تعارف نکنیم.
حس کنید همین کد دستی نرمش ذهنی برای ماست و شاید سرعت مثل قبل نباشه شاید اشکالاتش اول زیاد به نظر برسه ولی واقعا اگر واقع بینانه نگاه کنید و خودتون رو با AI مقایسه نکنید این کار باعث بخشی از اعتماد به نفستون حفظ بشه و طراوت ذهنی شما بازآفرینی بشه، گاهی میشه پیشنهاد کرد برای حل مشکل ها حتی سرچ کنید فضای کلاسیک حل مساله تو ذهنتون باشه.
مثلا درک یک قطعه کد در stackoverflow و بازسازی مناسب اون نسبت به آنچه نیاز پروژه شماست خودش یک کارگاه ورزش ذهنی هست.
یک روش دیگه انجام پروژههای حساس است. بعضی حوزهها وجود دارند که مدلها در آنها ضعیفتر عمل میکنن یا کمک محدودی میدهند. خوبیشون این هست که حتی اگر بخواید از AI استفاده کنید، باز هم مجبور میشید خودتون بیشتر فکر و تلاش کنید. البته منظورم نوشتن کدی نیست که به دیگران آسیب بزنه؛ بلکه یک کارگاه sandbox و تفریحی در کنار کار اصلی است تا دیوار محکمی جلوی تنبلی ذهن قرار بگیره.
نمونههایی از این پروژهها:
- پیادهسازی یک الگوریتم رمزنگاری از صفر (بدون کتابخانههای آماده)
- نوشتن یک memory allocator یا garbage collector ساده
- حل مسائل سنگین الگوریتمی یا ریاضی که مدلها در آنها ضعیفتر هستند
- مهندسی معکوس یک پروتکل باز و مستند
این پروژهها رو باید بهصورت مستمر و تفریحی در کنار کار اصلی انجام بدید، نه یکبار. استمرار اینجا کلیدی هست.
باید اعتراف کرد انسان ذاتاً رفاهطلب هست. برای حفظ ورزیدگی ذهن باید قانون جدی برای خودتون بگذارید. اگر تجربه یا روش دیگری دارید، خوشحال میشم بخونم چطور با این موضوع برخورد میکنید.
فشار مقایسه کدنویسی با AI
مورد بعدی به نظرم AI باعث میشه فشار مقایسه زیاد بشه، فشار مهارت مقایسه من با AI، فشار مقایسه من با دیگری که با سرعت بیشتری کار رو پیش میبره، بذار اینجوری بگم قدیم اگر این فشار مقایسه وجود شما رو به سمت تلاش بیشتر حرکت میداد، الان به سمت افزایش هزینه در AI تبدیل شده.
در گذشته من با دیدن سرعت و مهارت یکی دیگر ترغیب میشدم تلاش بیشتر و مطالعه بیشتری داشته باشم تا نتیجه بهتری بگیرم اما الان حس بد به جای این که تلاش و مطالعه تبدیل بشه به هزینه بیشتر در مدلهای قوی تر تبدیل شده، اول باید مقایسه واقع بینانه باشه: سوال اصلی اینه آیا هزینه کردن برای AI بده یا استفاده از اون؟
به نظر جواب درست اینه: قطعا خیر! پس چی بده ؟
در دام هزینه و رقابت در استفاده از هوش مصنوعی افتادن واقعا بده!
رسیدن به یک فرمول معقول و حساب شده که شما کمترین میزان آسیب و بالاترین میزان بهرهوری رو داشته باشه میتونه یک راه حل صحیح باشه، یعنی نه سرعت رو فدای تعصب های عجیب بکنیم، نه مهارت و عمیق شدن رو قربانی سرعت کنیم و نه حتی جایگاه خودمون رو فراموش کنیم و خودمون رو با AI مقایسه کنیم.
در واقع به عبارت ساده تر مقایسه مثل یک شمشیر دولبه هستش اگر مقایسه صحیح باشه باعث افزایش کیفیت و بهرهوری میشه اگر اشتباه باشه باعث کاهش اعتماد به نفس و گرفتن تصمیمات احساسی و عجولانه میشه.
اما این موارد که در بخش احساسات مطرح شده کاملا یک امر شخصی هستش و قابل اندازه گیری به سادگی نیست، پس حتما فرمول مناسب هر فرد با دیگری متفاوت خواهد بود. فراموش نکنید فرمول مناسب خودتون رو خودتون طراحی کنید. نه من و نه هیچ کس دیگه فرمول عمومی برای اصلاح این وضعیت نداره، بهتر رویکرد و روش خودتون رو همین امروز طراحی یا بازطراحی کنید.
شناخت و اعمال رویکرد کدنویسی
این یکی خیلی جالبه قاعدتاً هر پروژه و هر فردی و هر محیطی یک رویکرد خاصی دارند و درک این رویکرد کاملا به توسعه دهنده و پروژه بستگی داره.
اگر شما بخواید با رویکرد دیگران یا رویکرد AI کد رو اضافه کنید وارد، یک اشتباه راهبردی هستش، حالا شاید سوالی پیش بیاد این رویکرد در کجای یک پروژه و نفهته هستش!
خوب شاید بیش از ۱۰ مورد باشه نیاز به رویکرد داشته باشه از syntax گرفته تا نگاه شخصی شما به مساله یا حتی نیازهای پروژه که رویکرد رو مشخص میکنه و یا محیط که توش هستید، مثلا تو وردپرس رویکرد نوشتن تابع snake_case هستش و ولی تو لاراول camelCase هستش هر دو php هستند.
ولی خب مثلا به AI بگی من یک تابع تبدیل اعداد فارسی-عربی به لاتین میخوام، اون اصلا خبر نداره رویکرد محیطی شما برای انتخاب اسم تابع چی هستش، البته مثال رو خیلی ساده سازی کردم، اما یه مثال رویکردهای دیگه: مثلا شما در پروژه آموزشی به رویکرد سادگی و قابل فهم بودن نیاز اساسی دارید مثلا این کد جذاب تره:
def find(items, target):
return target in items
ولی جایی نیازمند کیفیت و امنیت هستید خب این کد بیشتر به درد میخوره:
def find(items, target):
if items is None:
raise ValueError("items cannot be None")
if not isinstance(items, list):
raise TypeError("items must be a list")
for i, item in enumerate(items):
if item == target:
return i
return -1
یه جایی مثلا براتون سرعت مهمه:
def find(items, target):
# فرض که لیست مرتب هستش
left, right = 0, len(items) - 1
while left <= right:
mid = (left + right) // 2
if items[mid] == target:
return mid
elif items[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
خب هر سه یه کار انجام میدن ولی رویکرد ها متفاوت هستش درک این موضوع به هدایت AI توسط شما کمک میکنه!
چالش بین مدل های مختلف هوش مصنوعی برای نوشتن کد
همیشه مدل ها رو دعوت کنید کد ها و رویکردتون رو نقد جدی کنن، بهتره بگید نقد بیرحمانه و یا نقد کشنده تو به این کد یا انتخاب چیه، اینجوری وارد دو مینوی «خود گویی خود خندی عجب مرد هنرمندی» نمیشید، این مساله صریح بیش از این بهش نمیپردازیم.
یکی از چیزایی که عاشقشم اینه که بین مدلا خاله زنک بازی در بیارم. 😁
حالا از شوخی گذشته در مسائل مهم به یک مدل اکتفا نکنین، مساله در مرحله اول با دو مدل مورد اطمینان خودتون مطرح کنید که من مثلا ترجیحم grok, claude هستش، پاسخ تولید شده از دیگری رو برای اون یکی بفرستید، ازش بخواین پاسخ اون یکی AI رو نقد کنه، مساله براتون خیلی مهم بود چندین رفت برگشت انجام بدید و تعداد مدل ها رو زیاد کنید، البته نه جوری که از اصل موضوع جا بمونید، ولی اینم ایده خوبیه برای رسیدن به جواب بهتر.
فرمول پیشنهاد-تجربی من اینه:
- نقد جدی کد و رویکرد انتخابی خودم، ارائه به ۲ AI و تعامل مدلها
- پیدا کردن راه حل برای حله مساله ارسال به ۳ مدل مختلف و تعاملها
- انتخاب lib و یا ابزار حداقل ۲ مدل و تعامل
- مشکلات عمیق و کمیاب: جستجو واقعی – مطرح کردن مشکل بین مدل هایی که دسترسی بیشتری به نت دارند مثل grok و تعامل مدلها + دخیل کردن نتایج جستجو
مشکوک بودن به کد AI
شاید این بخش با گذر زمان کمتر بشه ولی همیشه خواهد بود و شاید این موردی باشه که بیشتر مخالفت رو داشته باشن ولی به قول کانت: من به همه چیز شک میکنم به تنها چیزی که نمیتونم شک کنم اینه دارم شک میکنم پس مبنای همه چیز ذهن منه 😆
اما موضوع جدی اینه که معمولا یک نیاز باعث میشه که شما به AI مراجعه کنید و دنبال پاسخ نیازتون باشید اما هرگز نه میشود، نه حوصله و زمان اجازه میده همه ابعاد یک نیاز رو به AI منتقل کنید.
اون بیچاره هم که چیزی هم اطلاعی جامع نداره ولی سعیشو میکنه، در ضمن مشکل دیگه اینه AI حتی اگر برای مشکل شما رو هیچ راه حل واقعی نداشته باشه نمیگه «نمیدونم»، شما رو «می فرسته پی نخود سیاه» و اینجا شما به محض این پیشنهاد یا حل نیازتون سریع سعی کنید بهش شک کنید و زیر بار نقد جدی ببرید قبل از این که حتی تستش کنید تا بتونید کد یا راه حل بهتری داشته باشید یا آگاهانه اونو بپذیرید.
کیفیت کد در برنامه نویسی مهم تر از نوشتن کد
اول آرزو نکنیم و اول شلاق دستمون بگیریم 😅 شاید جمله کمی خندهداره باشه ولی خب یه ایهام خوب هستش که رویکرد درستی در مواجهه با هوش مصنوعی داشته باشیم، واقعیت اینه AI برای این بوجود نیومده آرزوهای شما رو مثل غول چراغ جادو برآورده کنه، برای این بوجود اومده دستیار شما باشه.
شما دستیارتون رو باید هدایت کنید نه این که باهاش از آرزوهاتون حرف بزنید انتظار داشته باشید برآورده کنه،. چرا حالا میگم شلاق دستتون بگیرید چون این هدایت باید بیرحمانه باشه، کوتاه نیاین و با اغماضهای زیاد سریع به هدفتون یا آرزوتون برسید نه این اشتباه هست.
حتی اگر شما کوچکترین اغماضی نکنید و کد رو تلاش کنید در بالاترین کیفیت تولید کند باز هم مشکلاتی گریباگیر شما خواهد شد وای به اون روزی که ضریب حساسیتتون به جای ۱۰۰٪ باشه ۳۰٪ اون روز روز سیاه شماست، در ضمن یکی از اهداف این دستیار افزایش کیفیت کد هستش نه صرفا نوشتن کد. پس سعی کنید به کیفیت ۱۰۰٪ کد برسید نه این که به کد برسیم به هر قیمتی!
کیفیت کد؛ اعلام دغدغهکدنویسی به AI
این یکی احتما جالبه مثلا شما دنبال یک کتابخونه برای انجام یک کار هستید، به AI میگی اونم ۳ تا کتابخونه پیشنهاد میده و استفاده میکنی.
اما اگر دغدغتون رو مطرح نکنید ممکنه چالش برانگیز بشه، مثلا اگر قرار پروژه «بزن در رو »باشه، اینجا بهتره بگی دغدغهام اینه کار کردن باهاش ساده باشه، اگر من پروژه قرار تو بلند مدت استفاده بشه اینجا باید بگی دغدغهام این break change این کتابخونه کم باشه.
در واقع این مطرح کردن دغدغه میتونه فلیتر های مناسب تری برای پیشنهادات AI داشته باشه. اما بهتر اینه دغدغههاتون رو بر اساس اولیت بفرستید: مثال: تقدم انتخاب بلوغ کتابخونه و break change کمتر، راندمان بالاتر و در آخر سادگی کار کردن.
در ضمن این که جویا بشید ببنید ترند مورد استفاده چیه و چرا ترند تر شده میتونین با دغدغههای جدی خودتون تطبیق بدید.
در نهایت، AI فقط وقتی خطرناکه که تو تصمیم بگیری دیگه فکر نکنی؛ وگرنه فقط یه ابزار پر سروصداست که باید یاد بگیری چطور کنترلش کنی نه اینکه بذاری کنترلش کنه، تجربیات شما چیه!؟
اول از همه کوچک ترین عضو مجموعه 4xmen بنده حقیر هستم.
در ثانی یک توسعه دهنده هستم زمینه های تخصصی کارم :
Delphi, Rust ,PHP, JavaScript, Unreal engine, asm, Dart
و علاقه مند به لینوکس، RCE ، کریپتوگرافی هستم.
تا الان حضرت حق اینا رو به ما داده و هر وقت که بخواد ازمون میگیره دست خودشه.
یا حق، با حق، تا حق


شاید امروز جواب خیلی از سؤالها را بتوان از AI گرفت، اما تولید مطالب تخصصی، تجربهمحور و عمیق هنوز به انگیزه نیاز دارد. این نظرات و بازخوردهای شماست که به ما نشان میدهد ادامه دادن این مسیر ارزشمند است.
دیدگاه شما چیست؟