برنامه نویسی قبل و بعد از AI فقط درباره سرعت نوشتن کد نیست
ما از نسلی هستیم که برای ساختن یه نرم افزار باید ساعت ها دنبال جواب میگشتیم و امروز با ابزارهایی کار میکنیم که بخش زیادی از این مسیر رو کوتاه کردن
برنامه نویسی قبل و بعد از هوش مصنوعی
من از برنامه نویس هاییم که وقتی میخواست برنامه نویسی یاد بگیره هنوز خبری از این همه دوره فارسی و آموزش قدم به قدم و دستیار هوش مصنوعی نبود
نه اینکه منابع وجود نداشته باشه
منابع بودن ولی پیدا کردن چیزی که دقیقاً به درد مسئله تو بخوره خودش یه مهارت بود یه طوری که ما معروف شده بودیم به ریسرچر های حرفه ای گوگل ... هر چیزی و میتونستیم توی گوگل پیدا کنیم
واقعا یادش بخیر ... :)
بگذریم
خلاصه باید یاد میگرفتی چطور سوال درست بپرسی و چطور از بین جواب های مختلف به چیزی برسی که واقعاً مشکلت رو حل کنه
امروز اما شرایط کاملاً فرق کرده
یه مدل هوش مصنوعی میتونه در چند ثانیه برات کد بنویسه ساختار پروژه پیشنهاد بده و حتی بخش زیادی از کاری رو انجام بده که قبلاً باید ساعت ها براش وقت میذاشتی
این تغییر فقط سرعت برنامه نویسی رو بیشتر نکرده بلکه داره ماهیت یادگیری و توسعه نرم افزار رو هم عوض میکنه
ولی برای فهمیدن اینکه این تغییر دقیقاً چه معنایی داره بهتره برگردیم به زمانی که خودمون تازه داشتیم وارد دنیای کدنویسی میشدیم
چطور بدون هوش مصنوعی و منابع فارسی با آزمون و خطا برنامه نویسی میکردیم ؟
یادمه حدود ۱۶ سالم بود و هنوز SQL بلد نبودم
ولی داشتم یه نرم افزار دسکتاپ برای مدیریت آموزشگاه میساختم
میخواستم اطلاعات هنرجوها رو ذخیره کنم کلاس ها رو مدیریت کنم شهریه ها رو حساب کنم و یه سیستم داشته باشم که واقعاً توی یه آموزشگاه استفاده بشه
اون موقع نه درک درستی از دیتابیس داشتم نه دقیقاً میدونستم رابطه بین جدول ها چطور کار میکنه
ولی با کمک استک اورفلو داشتم SQL خالص مینوشتم
کد میدیدم میخوندم تغییرش میدادم اجرا میکردم و وقتی جواب نمیداد دوباره برمیگشتم سراغش
گاهی برای حل یه مشکل ساده ساعت ها وقت میذاشتم
ولی وقتی بالاخره جواب میداد یه حس عجیبی داشت
حس اینکه خودت یه چیزی رو از هیچ ساختی
نه اینکه فقط یه کد رو از جایی برداشته باشی و اجراش کرده باشی
اون موقع برنامه نویسی واقعاً سخت تر بود
اما یه چیزی هم داشت که شاید امروز کمتر حسش کنیم
هر چیزی که یاد میگرفتی واقعاً مال خودت میشد چون مجبور بودی برای رسیدن به جواب مسیرش رو طی کنی
مجبور بودی بفهمی چرا این کوئری کار میکنه چرا اون یکی خطا میده و چرا وقتی تعداد داده ها بیشتر میشه برنامه کند میشه
من اون موقع اسم خیلی از این مشکلات رو نمیدونستم ولی داشتم با خود مسئله درگیر میشدم
و همین درگیری کم کم از من یه برنامه نویس ساخت

چرا برنامه نویسی با هوش مصنوعی دیگه شبیه قبلنا نیست؟
امروز برای ساخت یه سیستم لازم نیست همه چیز رو از صفر تایپ کنی
میتونی از هوش مصنوعی بخوای یه ساختار اولیه برای پروژه طراحی کنه مدل دیتابیس پیشنهاد بده کوئری بنویسه رابط کاربری بسازه تست تولید کنه و حتی بخش زیادی از کد رو پیاده سازی کنه
این یعنی زمان کمتری صرف کارهای تکراری میشه و فرصت بیشتری برای تمرکز روی خود مسئله داری
اما این تغییر یه سوال مهم ایجاد میکنه
اگر دو نفر به یک ابزار قدرتمند دسترسی داشته باشن چرا خروجی یکیشون یه سیستم قابل اتکا میشه و خروجی اون یکی یه پروژه شلوغ و پر از بدهی فنی؟
اینجاست که تفاوت بین کدنویسی و مهندسی نرم افزار خودش رو نشون میده
البته این به معنی ضعیف بودن هوش مصنوعی نیست
مدل های جدید توی خیلی از زمینه ها از چیزی که چند سال پیش تصور میکردیم بهتر شدن
میتونن درباره معماری بحث کنن کد رو بررسی کنن خطاهای پیچیده رو پیدا کنن و برای مسئله هایی که قبلاً نیاز به تجربه زیادی داشت راه حل پیشنهاد بدن
پس مسئله دیگه این نیست که هوش مصنوعی فقط یه ابزار ساده برای تولید کده
مسئله اینه که ما چطور از این ابزار استفاده میکنیم و چقدر میتونیم خروجی اون رو به یه سیستم واقعی تبدیل کنیم

تفاوت کدنویسی سریع با مهندسی نرم افزار واقعی
فرض کن از هوش مصنوعی میخوای یه لیست محصولات با قیمت نهایی و تخفیف بسازه
مدل میتونه خیلی سریع یه کد تمیز تحویلت بده
محصولات رو میخونه برای هر محصول تخفیف رو پیدا میکنه قیمت نهایی رو حساب میکنه و نتیجه رو برمیگردونه
روی چند تا محصول همه چیز خوبه
ولی وقتی تعداد محصولات زیاد بشه چی
اگر برای هر محصول یه کوئری جدا به دیتابیس زده بشه با مشکل N plus 1 روبرو میشی
یعنی به جای اینکه اطلاعات رو با چند کوئری منطقی بگیری برای هر ردیف دوباره میری سراغ دیتابیس
حالا فرض کن صفحه اول فروشگاه ده تا محصول نشون میده
اگر برای هر محصول یه کوئری جدا برای پیدا کردن تخفیف اجرا بشه حداقل یازده کوئری خواهی داشت
این عدد برای ده محصول شاید خیلی نگران کننده نباشه ولی وقتی تعداد محصولات زیاد بشه و همزمان کاربران زیادی درخواست بدن فشار روی دیتابیس میتونه جدی بشه
اینجا مسئله فقط سرعت نیست
مسئله اینه که یه تصمیم ساده توی لایه دسترسی به داده میتونه روی کل سیستم اثر بذاره
اگر رابطه محصول و تخفیف درست طراحی شده باشه شاید بتونی با prefetch related داده ها رو یکجا بگیری
اگر رابطه از نوع ForeignKey مناسب باشه شاید select related انتخاب بهتری باشه
اگر تخفیف ها بر اساس تاریخ و وضعیت فعال بودن انتخاب میشن باید به ایندکس ها و منطق انتخاب تخفیف هم فکر کنی
اگر قیمت نهایی فقط یه مقدار ساده نیست و به کمپین و گروه مشتری و موجودی و شرایط پرداخت وابسته است دیگه مسئله فقط یه کوئری نیست
اینجا داری درباره مدل کردن منطق کسب و کار حرف میزنی
مشکل N plus 1 در جنگو و تاثیر آن روی عملکرد دیتابیس
یکی از مثال های ساده برای فهمیدن تفاوت بین کد کار میکنه و کد مقیاس پذیره مشکل N plus 1 در جنگوئه
فرض کن میخوای لیست کاربران رو همراه با شهر محل زندگی اون ها نمایش بدی
یه پیاده سازی ساده ممکنه برای هر کاربر دوباره سراغ جدول شهرها بره
users = User.objects.all()
for user in users:
city = City.objects.get(id=user.city_id)
print(f"{user.name} lives in {city.name}")این کد ممکنه روی چند کاربر کاملاً درست کار کنه
ولی اگر ده هزار کاربر داشته باشی به جای یه کوئری برای دریافت کاربران و یه کوئری برای دریافت شهرها ممکنه هزاران کوئری اضافه اجرا بشه
راه حل اینه که قبل از نوشتن کد بفهمی رابطه بین داده ها چیه و چطور باید اطلاعات مرتبط رو واکشی کنی
users = User.objects.select_related("city")
for user in users:
print(f"{user.name} lives in {user.city.name}")در این حالت جنگو میتونه اطلاعات کاربر و شهر مرتبط رو با استفاده از JOIN در یک کوئری واکشی کنه
البته انتخاب بین select related و prefetch related به نوع رابطه بستگی داره و همیشه نمیشه یکی رو جایگزین دیگری کرد
نکته مهم اینه که بهینه سازی فقط یه تکنیک برای سریع تر کردن کد نیست
بهینه سازی یعنی بدونی داده ها چطور در سیستم حرکت میکنن و چه هزینه ای برای پردازش اون ها پرداخت میکنی
چرا تجربه پروژه واقعی هنوز توی برنامه نویسی اهمیت داره؟
کسی که فقط کد میزنه ممکنه یه راه حل درست و قابل اجرا تحویل بده
ولی کسی که سیستم رو میشناسه از خودش میپرسه این تصمیم چه اثری روی بقیه بخش ها داره
آیا داده ها درست انتخاب شدن
آیا منطق تخفیف در همه جای سیستم یکسانه
آیا با افزایش تعداد محصولات هزینه این عملیات چقدر میشه
آیا این کد توی درخواست های همزمان رفتار قابل پیش بینی داره
و آیا فردا وقتی یه قابلیت جدید بهش اضافه کنیم مجبور میشیم نصف پروژه رو دوباره بنویسیم
این تفاوت بین کد نوشتن و مهندسی نرم افزاره
البته اینجا یه نکته مهم هم وجود داره
ما نباید تجربه رو با تعداد سال هایی که کد زدیم اشتباه بگیریم
ممکنه یه جونیور با کمک هوش مصنوعی امروز یه سیستم رو سریع تر از یه برنامه نویس قدیمی بسازه
ممکنه توی یه فریم ورک جدید از ما مسلط تر باشه
ممکنه حتی یه راه حل بهتر برای یه مسئله مشخص پیدا کنه
و این اتفاق بدی نیست
اتفاقاً یکی از جذاب ترین بخش های این دوره همینه
قبلاً برای رسیدن به یه سطح مشخص از توانایی فنی باید مسیر طولانی تری رو طی میکردی
امروز ابزارها بخشی از این مسیر رو کوتاه کردن
ولی کوتاه شدن مسیر به معنی حذف شدن عمق نیست
فقط یعنی فرصت داری زودتر به مسئله های بزرگ تر برسی
آیا هوش مصنوعی جای برنامه نویس ها رو میگیره؟
به نظرم جواب این سوال رو نمیشه با یه بله یا نه ساده داد
بخشی از کارهایی که قبلاً برنامه نویس ها انجام میدادن امروز خیلی راحت تر قابل انجامه
نوشتن کدهای تکراری تبدیل کردن یه ساختار به ساختار دیگه و حتی پیاده سازی بعضی قابلیت های معمولی دیگه مثل گذشته زمان زیادی نمیبره
پس طبیعیه که ارزش بعضی مهارت های قدیمی کمتر بشه
ولی این به معنی بی ارزش شدن تجربه نیست
برنامه نویسی فقط نوشتن کد نیست
برنامه نویسی یعنی ساختن چیزی که قراره توی دنیای واقعی کار کنه
و برای این کار باید بتونی مسئله رو بفهمی نیازمندی ها رو تحلیل کنی و تصمیم هایی بگیری که فقط امروز جواب ندن
به نظرم برنامه نویس هایی که خودشون رو فقط به سرعت تایپ کد محدود کردن بیشتر از بقیه تحت تاثیر این تغییر قرار میگیرن
ولی کسی که درک عمیقی از سیستم داره میتونه از هوش مصنوعی به عنوان یه ابزار قدرتمند برای بهتر ساختن استفاده کنه
چطور با هوش مصنوعی برنامه نویس بهتری بشیم ؟
من دیگه نمیخوام وقت زیادی رو صرف نوشتن کدهای تکراری کنم
میخوام اون زمانی که قبلاً صرف تایپ کردن میشد رو بذارم برای فهمیدن مسئله
برای طراحی بهتر
برای بررسی دقیق تر
برای اینکه بفهمم یه سیستم چرا اینطوری کار میکنه و چطور میشه بهترش کرد
به نظرم چند تا مهارت توی این دوره اهمیت بیشتری پیدا میکنن
- درک عمیق از دیتابیس و نحوه اجرای کوئری ها
- توانایی طراحی معماری مناسب برای پروژه
- شناخت منطق کسب و کار و تبدیل نیازمندی ها به ساختار نرم افزاری
- توانایی بررسی و تست کدی که هوش مصنوعی تولید میکنه
- شناخت مفاهیم امنیت و عملکرد در پروژه های واقعی
- توانایی استفاده درست از ابزارهای هوش مصنوعی برای افزایش سرعت توسعه
این ها مهارت هایی هستن که کمک میکنن از یه اپراتور ساده تبدیل بشی به یه مهندس نرم افزار که میتونه با ابزارهای جدید بهتر و سریع تر کار کنه
برنامه نویسی امروز سخت تر شده یا لذت بخش تر
گاهی فکر میکنم برنامه نویسی امروز از یه طرف خیلی راحت تر شده و از یه طرف سخت تر
راحت تر شده چون برای پیدا کردن جواب لازم نیست مثل گذشته ساعت ها بین منابع مختلف بگردی
سخت تر شده چون حالا با ابزارهایی روبرو هستی که میتونن در چند دقیقه بخش بزرگی از یه پروژه رو تولید کنن
و همین باعث میشه تشخیص دادن اینکه چه چیزی باید ساخته بشه و چطور باید ساخته بشه اهمیت بیشتری پیدا کنه
من هنوز اون حس ۱۶ سالگی رو یادمه
وقتی برای نوشتن یه کوئری ساده باید کلی جستجو میکردم
وقتی یه خطا میدیدم و نمیدونستم دقیقاً باید دنبال چی بگردم
وقتی بعد از چند ساعت بالاخره یه بخش از نرم افزار آموزشگاه درست کار میکرد
اون سختی بخشی از لذت برنامه نویسی بود
اما فکر نمیکنم لازم باشه برای لذت بردن از برنامه نویسی دوباره همون سختی ها رو تجربه کنیم
میتونیم از هوش مصنوعی استفاده کنیم تا سریع تر به مسئله های جذاب تر برسیم
تا به جای اینکه چند ساعت صرف نوشتن یه کد تکراری کنیم وقت بیشتری برای طراحی و حل مشکلات پیچیده داشته باشیم
آینده برنامه نویسی متعلق به چه کسانیِ؟
ما از نسلی هستیم که برای نوشتن یه کوئری ساده باید کلی جستجو میکردیم
نسلی که گاهی برای حل یه باگ چند ساعت با کدها درگیر میشد
نسلی که خیلی از چیزها رو با آزمون و خطا یاد گرفت
و حالا رسیدیم به جایی که یه ابزار میتونه بخش زیادی از اون کارها رو برامون انجام بده
من از این تغییر نمیترسم
چون میدونم برنامه نویسی فقط چیزی نیست که روی صفحه تایپ میشه
بخش مهمش چیزیه که قبل از تایپ کردن توی ذهنت اتفاق میفته
اینکه مسئله رو چطور میبینی
چطور ساده اش میکنی
چطور به یه ساختار قابل اجرا تبدیلش میکنی و چطور مطمئن میشی چیزی که ساختی واقعاً توی دنیای واقعی کار میکنه
شاید برنامه نویسی آینده کمتر درباره حفظ کردن سینتکس باشه و بیشتر درباره درک سیستم و تصمیم گیری مهندسی
و شاید جذاب ترین بخش این دوره همین باشه
اینکه با ابزارهایی که هر روز قدرتمندتر میشن چقدر میتونیم بهتر فکر کنیم و بهتر بسازیم
به نظرم برنامه نویسی قبل و بعد از AI یه تغییر ساده در ابزارها نیست
ما داریم وارد دوره ای میشیم که ارزش درک سیستم و تصمیم گیری مهندسی بیشتر از قبل خودش رو نشون میده
ارسال دیدگاه