پرش به مطلب اصلی
محمد مهدی سمیعی
محمد مهدی سمیعی
کارشناسی ۱۳۹۳

AI Software Engineer

در این حدود یک سال، هر وقت کسی از من می‌پرسید که چه طور دیتاساینتیست بهتری شویم، پاسخ می‌دادم که مهارت‌های مهندسی نرم افزارتان را بهبود ببخشید. چرا که معمولا کسی که چنین سوالی می‌کند یک سطح پایه‌ای از دانش هوش مصنوعی را دارد اما علاقه‌اش به هوش مصنوعی همچنان فراتر از SESoftware Engineering است و برای همین دنبال بهتر شدن در آن است. در واقع روند این گونه بوده که AI ابتدا کار خود AIکارها را بیشتر و بیشتر اتومات کرده و کاری کرده که افراد بیشتری بتوانند توسعه‌دهندهٔ AI باشند. این پدیده مخصوصا برای نیازمندهایی که با داده‌های غیرساختارمند که خوراک foundation model‌ها هستند، واضح‌تر است. 

فرض کنید چند سال پیش، برای طبقه‌بندی آگهی‌های دسته‌بندی‌شده در یک پلتفرم مثل دیوار، باید ویژگی‌ها یا Featureهای مربوطه را به صورت دستی استخراج می‌کردید و برای هر دسته الگوریتم‌های مختلفی امتحان می‌کردید تا بهترین نتیجه را بگیرید. مثلا برای تشخیص اینکه یک آگهی مربوط به فروش خانه است یا خودرو، باید با استفاده از NLPNatural language processing ساده، کلمات کلیدی را جدا می‌کردید، و شاید مدل‌های سنتی مثل SVMSupport Vector Machine یا Random Forest را با دنگ و فنگ زیاد آموزش می‌دادید.

بعدا حالا شبکه‌های از پیش آموزش‌دیده مثل ‌Bert آمدند که می‌توانستند در حکم یک نقطهٔ شروع عمل کنند و اندکی از کار را ساده‌تر کنند. اما امروز به لطف مدل‌های پایه مثل GPT شما می‌توانید فقط با چند خط کد و تجربه و دادۀ کمتری، مدل‌هایی بسازید که نه فقط دقت بالاتر، بلکه قابلیت تعمیم بیشتری دارند. این اتوماسیون موجب شده که دیگر صرف دانستن الگوریتم‌های پایه‌ای کافی نباشد؛ بلکه مهم‌تر این است که بدانیم چطور صورت مسئله را تعریف کنیم و راه‌حلی برایش پیشنهاد دهیم (جنبۀ محصولی قضیه) و چطور راه‌حل را پیاده‌سازی و اجرا کنیم (جنبهٔ نرم‌افزاری قضیه).

مهندس بودن مهم‌تر است!

اگر بخواهم خلاصه کنم، امروز «مهندس‌‌بودن» مهم‌تر از «دیتاساینتیست‌‌ بودن» است (و البته از آن ورش هم هست، مهندس نرم‌افزاری که گسترۀ قابلیت‌های هوش مصنوعی را نداند، شبیه حسابداری است که از وجود ماشین‌حساب آگاه نیست). در واقع گسترش یک فناوری می‌تواند تأثیر معکوسی روی آدم‌های آن حوزه داشته باشد.

برای مثال، در دههٔ ۱۹۹۰، با گسترش فناوری دوربین‌های دیجیتال، خیلی از شرکت‌ها و افرادی که سال‌ها در زمینهٔ عکاسی با نگاتیو و چاپ عکس‌های آنالوگ تخصص داشتند، به تدریج بخش بزرگی از بازار کار خود را از دست دادند. لابراتوارهای چاپ عکس کم‌کم ورشکسته شدند و عکاسان قدیمی، که کار با دوربین‌های مکانیکی و نگاتیوی را خوب بلد بودند، دیگر مثل قبل تقاضا نداشتند. در عوض، رشد فناوری دیجیتال باعث ایجاد فرصت‌های شغلی جدیدی شد: افرادی که دانش و مهارت کار با نرم‌افزارهای ویرایش عکس دیجیتال مثل فتوشاپ داشتند، یا کسانی که می‌توانستند دوربین‌های دیجیتال پیشرفته‌تر را برنامه‌نویسی و به‌روزرسانی کنند، بسیار مورد توجه قرار گرفتند. مثال خیلی انتزاعی که من دوست دارم در مورد اختراع ماشین حساب است. تا قبل از اختراع و گسترش ماشین حساب، محاسبان و حسابداران ماهر با ابزارهایی مثل چرتکه و جداول لگاریتمی و حتی با محاسبهٔ ذهنی یا قلم و کاغذ، سفارش‌های محاسباتی (مثلاً در بانک‌ها، اداره‌ها و شرکت‌های بزرگ) را انجام می‌دادند.

این افراد برای انجام محاسبات پیچیده، آموزش خاصی می‌دیدند، اما با ورود ماشین‌حساب‌های الکترونیکی و ارزان شدن آن‌ها، نیاز به این تخصص و شغل کاهش پیدا کرد. بسیاری از کسانی که شغل‌شان صرفاً انجام محاسبات دستی و عددی بود، کار خود را از دست دادند یا مهارت‌شان دیگر مزیت محسوب نمی‌شد. در عوض، شغل‌هایی برای افراد متخصص در زمینهٔ طراحی، تولید و تعمیر ماشین‌حساب و بعدها برنامه‌نویسی کامپیوترها و ماشین‌حساب‌های پیشرفته‌تر ایجاد شد.

و البته همۀ این‌ها به این معنی نیست که نقش دیتاساینتیست، توسط مهندسین نرم‌افزار جایگزین می‌شود. خود SE‌ها از دو جهت تحت‌فشار برای تغییر هستند. جهت اول از این حیث که به مرور این عامل‌های (Agent) هوش مصنوعی تبدیل به لگوهایی جدیدی برای ساختن سرویس‌ها و محصولات می‌شوند. همان‌طور که گفته شد مهندسین نرم‌افزاری که ندادنند چطور لگو‌ها رو باید در کنار هم قرار بدهند از دور بازی خارج می‌شوند (تحولاتی که در سمت MCPModel Context Protocol رخ می‌دهد، هر چند ضعیف اما آغازی بر همین سیل تغییرات عظیم‌تر است).

جهت دوم فشار از سمت مدل‌های جنریتور اما به نظرم آخرالزمانی‌تر خواهد بود و آن هم وقتی است که دیگر برای فرآیند ساخت محصول نیازی به مهندس نرم‌افزار نباشد و همه چیز با یک توضیح زبان طبیعی قابل انجام باشد. ظهور ابزارهای کدنویسی اتومات‌تر مثل cursor و تلاش برای استفاده از LLMLarge Language Modelها در جهت پیاده‌سازی صفر تا صدی یک محصول در این جهت‌اند. در واقع ممکن است چندی مهندسین نرم‌افزار دلخوش به رشد هوش مصنوعی، محصولات بیشتر و هوشمندانه‌تری را راحت‌تر طراحی و پیاده‌ کنند، اما شاید در ده سال خودشان توسط AI بلعیده شوند.

وظیفۀ ما چیست؟

در وهلۀ اول که ما نقشی در تحولات این دنیا نداریم، بایستی شل کنیم. در وهلهٔ دوم اما اگر فکر می‌کنید شما را برای شل‌کردن نساخته‌اند، می‌توانید امیدوار باشید که هر چه قدر شغل‌هایی از زیر این هرم حذف شوند، شغل‌های جدیدتری نیز به رأس آن به مرور اضافه می‌شوند. باید سعی کنیم با تغییرات هم‌سو شویم و جایگاه خودمان را در این هرم بسازیم. این یعنی چند کار مهم: اول، یادگیری مداوم و به‌روزنگه‌داشتن مهارت‌ها، مخصوصا در بخش‌هایی که انقلابی‌ترند.

دوم، توسعۀ توانایی حل مسئله، یعنی این‌که فقط بلد بودن یک ابزار کافی نیست، بلکه باید بتوان مسائل واقعی را فهمید و آن‌ها را به مسائل قابل‌حل تبدیل و در نهایت راه‌حل‌ ممکن برایشان ارائه کرد. سوم و نکتۀ مهم اما تمرکز بر ارتباطات انسانی است. با اتوماسیون شدن بسیاری از فرایندهای فنی، ارزش کارهایی بالا می‌رود که نیازمند تعامل (در عین اختلافات سازنده) و ارتباط مؤثر و البته جلب اعتماد هستند. توانایی کار گروهی و ارتباط مؤثر با ذی‌نفعان پروژه به همان اندازۀ مهارت‌های تکنیکی مهم هستند. به هر صورت ما اکنون کمابیش در همان موقعیت دههٔ ۹۰ عکاسان آنالوگ هستیم...

امروز که این آگهی فرصت شغلی را دیدم برایم جالب بود. سابقا عنوان مشابهی مثل ML Engineer هم وجود داشته اما آن بیشتر ناظر به استفاده از مهارت‌های مهندسی نرم برای Deploy مدل‌های ML‌ای است. اما عنوان AI Software Engineer به عکس، بیان می‌کند که نقش شما مهندسی نرم‌افزار است و باید بلد باشید چگونه از مدل‌های هوش مصنوعی در جهت ساخت محصول استفاده کنید. به نظرم این تازه آغاز یک مسیر است و احتمالا آرام آرام طی چند وقت آتی بقیه شرکت‌های محصول‌محور هم به چنین role‌هایی متمرکز خواهند شد. پس بروید کوبر یاد بگیرید که خربزه آب است.