با وجود LLMها، هنوز Ruby on Rails بهدرد میخوره؟
خلاصهٔ کاملتر
یکی از نویسنده پرسیده حالا که LLMها هستن و نوشتن کد خیلی ارزون شده، اصلاً Ruby on Rails دیگه منطقی هست؟ چرا همهچی رو با Rust بازنویسی نکنیم؟ جواب نویسنده یه «آره»ی واضحه. به گفتهی خودش، دلیلش همون دلیلای همیشگیه: ساختار مشخص، اختراع نکردن دوبارهی چرخ، آپدیتهای امنیتی و بهبود سرعت که با یه آپدیت ساده مجانی بهت میرسه.
نویسنده معتقده هر abstractionای که برای راحتتر کردن کار آدم ساخته شده، کار LLM رو هم راحتتر میکنه. نمیخواد مدل کلی توکن خرج نوشتن job queue و ORM کنه، وقتی میشه روی مشکل واقعی کاربر تمرکز کرد. فریمورک یه ساختار قابل پیشبینی میده که پیدا کردن راه تو پروژه و دیباگش رو ساده میکنه. تازه مدلها روی خود Rails هم آموزش دیدن.
مشکل اصلی بازنویسی به نظر نویسنده تسته، نه نوشتن کد. کلی از رفتار یه برنامه از خود فریمورک و زبان و کتابخونهها میاد. پس حتی اگه منطق کسبوکار عیناً منتقل بشه، رفتار عوض میشه. ممکنه باگی که کاربر بهش عادت کرده درست بشه، یا باگ تازهای بیاد. LLM هم جایی که تصمیم لازمه، یه تصمیم تصادفی میگیره که فقط تستها پاس بشن. کاربرای اونا روزی چند ساعت با برنامه کار میکنن و با جابهجا شدن یه آیکون هم شاکی میشن.
پیشنهاد نویسنده اینه که بهجای بازنویسی، از مدل بخوای همون برنامهی فعلی رو بهینه کنه. اینجوری احتمال عوض شدن رفتار خیلی کمتره. از طرفی خوندن کد هنوز مهمه، چون تصمیمهایی رو نشون میده که مدل هیچوقت ازت نپرسیده. چون کد Ruby و فریمورک Rails هست، میدونه وقتی agent یه عالمه تغییر پیشنهاد میده، کجاها رو باید دقیقتر نگاه کنه.
Ruby یه سری مزیت دیگه هم داره: reload لحظهای کد بدون صبر برای کامپایل، و REPL (یعنی محیطی که کد رو خطبهخط اجرا میکنی و جوابشو همون لحظه میبینی). نویسنده دیده coding agentها زیاد از اینها برای پیدا کردن سریع مشکل استفاده میکنن.
با این حال نویسنده به بازنویسی بعضی بخشها برای سرعت فکر میکنه، ولی با Go، نه Rust. Go سادهست، زود کامپایل میشه و خوندنش راحته، ولی Rust کامپایل کندتر و کد سختخونتری داره. برای فرانت هم Svelte رو دوست داره، ولی رفتن از HTMX به Svelte یعنی جدا کردن فرانت و بک و پر شدن صفحه از spinner. نتیجهش اینه که فعلاً با Rails ادامه میده و برای پروژهی جدید هم انتخابش میکنه.
نکات کلیدی:
- به گفتهی نویسنده، abstractionهایی که برای آدم ساخته شدن، کار LLM رو هم راحتتر میکنن.
- سختی اصلی بازنویسی کامل با Rust تست کردن رفتار برنامهست، نه نوشتن کد.
- درخواست «سریعترش کن» از LLM کمتر از بازنویسی رفتار برنامه رو عوض میکنه.
- reload لحظهای و REPL تو Ruby به agentها کمک میکنه مشکل رو سریع پیدا کنن.
- نویسنده برای بخشهای حساس به سرعت Go رو به Rust ترجیح میده، چون کامپایلش سریعتر و کدش خواناتره.




