زبانهای برنامهنویسی توی عصر AI چی میشن و چه بلایی سرشون میاد؟
خوزه والیم، خالق زبان زیبای Elixir، یه مقالهی فکری نوشته دربارهی اینکه وقتی ایجنتها بیشتر کد رو مینویسن، سر زبانها، ابزارها و کامیونیتیهاشون چی میاد.
چند تا نکتهی خلاصه از صحبتهاش:
۱- کامیونیتی: هر زبانی دور یه سری سلیقهی مشترک شکل گرفته؛ پایتون «یه راه واضح برای هر کار»، روبی «خوشحالی برنامهنویس»، لیسپ «تغییر خود زبان». وقتی دیگه خودمون کد نمینویسیم، حس تعلق به این کامیونیتیها چی میشه؟
۲- اکوسیستم: فاصلهی اکوسیستمها کم میشه، چون پورت کردن کتابخونهها یا پیادهسازی الگوریتمهای یه مقاله با ایجنت خیلی ارزونتر شده و زبانهای کوچیکتر سریعتر به بزرگترها میرسن. ولی از اون طرف، وقتی ساختن یه کتابخونه ارزون باشه، چرا کسی بیاد روی یه کتابخونهی مشترک همکاری کنه؟ خودش به ایجنت میگه دقیقاً همونی که لازم داره رو بسازه.
۳- سینتکس: سینتکسهای خوشگل (مثل optional chaining بهجای چند تا null check) دیگه اولویت نیست، چون ایجنت از boilerplate خسته نمیشه و از دیدش همهچیز توکن ورودی و توکن خروجیه. به نظرش زبانی که ادعا کنه «برای ایجنتها ساخته شده» و تمرکزش روی سینتکس باشه، داره حول محدودیتهای امروز مدلها طراحی میشه.
۴- کامپایلرها از بین نمیرن: اینکه ایجنت مستقیم اسمبلی بنویسه منطقی نیست؛ کسی نمیخواد برای هر معماری یه نسخهی جدا نگه داره. تازه هیچ زبونی توی همهچیز خوب نیست؛ Rust، زبانهای اثبات قضیه مثل Lean، Erlang/Elixir برای سیستمهای توزیعشده، SQL، هر کدوم تضمینها و سطح انتزاع خودشون رو دارن.
۵- تضمینهای قویتر: اگه ایجنت کد مینویسه، میشه trade-offهای زبان رو بازنگری کرد. مثلاً type inference برای آدمها خوبه چون نوشتن تایپ حوصلهسربره، ولی ایجنت حوصلهاش سر نمیره. نوشتن صریح تایپها اطلاعات بیشتری به کامپایلر میده و دست زبان رو برای تایپسیستم قویتر باز میذاره. به نظرش زبانها در آینده با این متمایز میشن که چقدر تضمین میدن: از طراحیای که حالت نامعتبر رو غیرممکن کنه، تا تایپ و اثبات، تضمینهای runtime، و تست و fuzzing.
۶- دیتابیس برنامه بهجای LSP: پروتکل LSP برای IDE و آدمها طراحی شده و با فایل و خط و ستون کار میکنه، که ایجنتها دقیق دنبالش نمیکنن. پیشنهادش اینه که اطلاعاتی مثل سیمبلها، رفرنسها و call graph به شکل یه دیتابیس با زبان کوئری در دسترس باشه. آدم حال نداره برای پیدا کردن رفرنس یه تابع کوئری بنویسه، ولی ایجنت راحت مینویسه، حتی کوئریهایی مثل «همهی مسیرهایی که یه مقدار میتونه nil بشه». برای همین هم جادوهایی مثل monkey-patching که کد رو غیرمحلی میکنن، بیشتر مشکلساز میشن.
۷- در نهایت Observability بهجای دیباگر: breakpoint گذاشتن و خطبهخط جلو رفتن کار آدمه. ایجنت میتونه سریع کد رو instrument کنه، trace جمع کنه و اطلاعات رو کنار هم بذاره. پس باید runtime و state سیستم رو جوری در اختیارش بذاریم که بتونه برنامهنویسانه کوئری بزنه، حتی روی پروداکشن. اینجا هم طبیعتاً یه اشاره به Erlang VM میکنه که این قابلیتها رو از اول داشته.
جمعبندی خودش: زبانها قرار نیست از بین برن، ولی سؤال اصلی عوض میشه. اگه دیگه برای «آدمی که کد مینویسه» بهینهشون نکنیم، برای چی بهینهشون کنیم؟
🔗 منبع
✉️ t.me/MatinSenPaii
Post #1497
114
Forwarded from Matin SenPai (᯽マティ️️ン先輩)
- ❤ 1