این تنها یک نگر(نظر) شخصی هست.
که من بنا به تجربه پیشینم در برنامه نویسی نوشته ام
روبی زبان خواناییست و ریلز هم فریمورکی عالی برای توسعه سریع وبسایت های نیمه حرفه ای هست، قبول
ولی از نگر کسی که با پیشینه PHP هست، ریلز یک فریمورک سطح پایین و روبی زبان نچسبیست
درمورد روبی:
ساختار حلقه ها و ساختار نوشتار(syntax) بسیار عجیب و غریب بویژه در شرط ها که در هیچ زبان دیگه ای ندیده بودم.
بمانند اینه که نچسبی جاوا و رو در ساختار نوشتار(syntax) کوتاه تری جا کنی
بنده پایتون هم کار کردم و پایتون و روبی از دید ساختار نوشتار(syntax) در چند جا نزدیک هستند ولی این آن کجا و این کجا …
مواردی که درمورد ریلز میپسندم:
۱. سریع بودن : که امروزه که جاوااسکریپت در بک اند هم استفاده میشه سریعه پس دیگه نمیشه به این ویژگی بعنوان یک ویژگی خاص ریلز تکیه کرد
۲. سیستم تمپلیت: ساختار ساده و دم دستی mvc که دسترسی به view رو راحت کرده: که امروزه حتی فریمورک های بک اند جاوا اسکریپتی هم این ویژگی رو دارن(امبر جی اس یک نمونه)
و چند مورد اینچنینی که ویژگی خاص ریلز نیستند پس دلیلی برای بیانشان نمیبینم.
مواردی که درمورد ریلز از آنها متنفرم:
۱. رکورد فعال یا ActiveRecord ریلز که سینتکس عجیب و غریبی برای ساخت تیبل و مادل داره
۲. و نچسب ترین مورد مایگریتها (migrations) ، بعنوان یک PHP کار عادت به ورود دستی SQL داشتم که با الگو برداری از فریمورک YII در PHP یک کتابخانه نوشتم و دیگه نیازی به ورود دستی SQL و یا ساخت دستی تیبل و مادل ندارم
۳. کانسول ریلز(rails console) یک محیط فوق العاده قرون وسطایی با دستور های عجیب و غریب که شرط میبندم حتی C++ کارها هم نمیتونن تحملش کنن!
در پایتون چیزی شبیه به این داریم به نام iPython ولی بازهم آن کجا و این کجا
۳. ActiveRelation ، اگه تاکنون ریلز کار نکردید و پیشینه PHP دارید این مورد اشک شمارو درمیاره!
یک کدر PHP میتونه بسادگی با کلیک و در محیط GUI تیبل هاشو بسازه و ریلیشن هاشو ست کنه
(امیدوارم کسی نگه با کار نکردن با ActiveRelation کسی برنامه نویس نیست)
به اندازه ای که بنده سه روز زمان گذاشتم برای درک ساختن ریلیشن های one to many و many to many ولی آخرش هم نفهمیدم چی در جریانه و یا به گفته ی برخی دوستان،
what the hell is going on?!
پایان:
زمانیکه به سوی ریلز اومدم ، نگاهی که بهش داشتم نگاه یک فریمورک ساده و نیرومند بود که میشه سریع درگیرش شد و فهمید توی قلبش چی میگذره
اما بر پایه تجربه پیشینم و پسندم(سلیقم) هیچ راهی بجز کنار گذاشتنش نداشتم.
پیشنهادم به کسانی از php دارن به ریلز میان این هست که پیش از اینکه زمان بذارید و ریلز کار کنید، درباره مواردی که نوشتم یه جستجوی کوتاه بزنید ببینید باهاشون چند چند هستید.
با کمال احترام به شما و نظرتون. باید بگم که در خیلی از مواردی که فرمودید در اشتباه هستید و یا اینکه درست کاربردشون رو درک نکردید.
من از روبی دفاع نمی کنم اما ایده من اینه که هر ابزاری استفاده ای داره.
برای مثال console ریلز ابزار فوق العاده ای هست. بهترین نیست اما خیلی خوب و اجازه می ده کارهای زیادی باهاش انجام بدید. مثل ران کردن کد تو ادیتور و …
در مورد sql و ActiveRecord هم باید بگم که این ابزار ایرادات خودش رو داره اما Migration ها ابزار بسیار خوبیه که خیلی از فریم ورک ها ازش استفاده می کنن و شخصا نمی تونم تصور کنم چه جوری ممکن بدون اونها کار کرد. با Ipython مقایسه کردید console رو، پیشنهاد می کنم نگاهی به pry بندازید.
در مورد مزایا هم باید بگم که ریلز سریع نیست. جاواسکریپت هم سریع نیست. و سرعت یه یحث نسبی هست.
خیلی احساس می کنم ناراحتی شما از روبی و ریلز برمی گرده به تجربه بدی که باهاش داشتین. و پیشنهاد می کنم مشکلاتتون رو در میون بزارین تا از نجربیات همدیگه استفاده کنیم.
درود خدمت شما . من بیشتر فکر می کنم شما بخاطر تجربه بد و همینطور موضوعی که بیشتر فکر می کنم بخاطر اینکه شما به نظرم بیشتر طراح سایت هستید نه برنامه نویس سایت یا همون مبحث بکند و فرونتد اند
این مشکل پیش اومده وگرنه بعید می دونم چیزی تو ترمینال باشه و بهش بگند قرون وسطایی
به نظرم یک بار دیگه تحقیق بکنید نسبت به این زبان ها
من نمی دونم چطور می شه یک برنامه نویس پی اچ پی از مایگریشن های تمیز بدش بیاد واقعا برام سواله . یکی از بدترین تجربه های من توی دیتابیس ها روی مای اسکوال بوده مخصوصا زمانی که می خواهید برای سیستم های کد باز آبدیت بنویسید .
ریلز مشکلات خودشو داره اما دلایلی که شما فرمودید بیشتر مزایای ریلز هستند و هرکدام با منطق درست شدند
ریلز بی جهت آنقدر محبوب نیست و پیشنهاد میکنم از یک منبع درست ریلز یاد بگیرید
دوما از کلمه متنفر زیاد استفاده نکنید برنامه open source پاش زحمت رفته
من خودم دوست ندارم جاواسکریپت کد کنم ولی هرگز نمیگم متنفرم .کار من نیست و برنامه نویس ها زیادی هستن کار میکنن باهاش به راحت و خوشحالند
از نظر من روبی هم فقط یک زبانه،
من سالها با php کار کردم ولی تخصص اصلی من نه روبی هست نه php اما حالا که از ضعف روبی نسبت به php گفتید میشه یکمی تکنیکی تر توضیح بدین؟
موجودیت کنسول یک طرف، ساختار نوشتار(syntax) یک طرف،
و برای من که با روبی نتونستم ارتباط بگیرم واقعا نچسب بود.
برای شما که با روبی و ریلز کار میکنید و ازش لذت میبرید قطعا نگرتون متفاوته
کاربرد ریلز کانسول این بود که تیبل ها و متد هارو یه چک اساسی کرد و این چیز بدی نیست ولی دلیل وجودش ، نبودن یک GUI خوب درکنار ریلز برای بررسی و ساخت تیبل ها و متد هاست، که ریلز روش خودش رو پیدا کرده و دست کدر رو هم تاجایی که من کار کردم باز نمیذاره که از کانسول استفاده نکنه (و من نپسندیدم)
بله درست میگید مایگریت ها ابزار های عالی هستند، ولی نه در ریلز. مساله همینه
اینکه هربار یک فایل با همون ساختار متنی عجیب و غریب میسازه
اینکه بخوای تغییری در یک تیبل بوجود بیاری اگر یه اشتباه کنی باید یک کامند رو چندین بار اجرا کنی و چند فایل رو تغییر دستی بدی که بفهمی کجا رو نام یک row رو به نادست نوشتی،
قرار بود Rapid development باشه نه این(و من نپسندیدم)
درمورد ipython هم برتری هاش در استفاده های متفاوتش رو میشه بحث کرد و قطعا با یه جستجوی ساده میشه یه دید کوچولو ازش پیدا کرد
همچنین درمورد سرعت:
بنده منظورم سرعت توسعه بود و نه سرعت پاسخ یا پردازش.
منابعی که من باهاش ریلز رو جلو رفتم یکی خود وبسایت ریلز بود و یکی هم یک سری فیلم آموزشی از لیندا
GUI؟ فکر نمیکنم این مساله اصلا درست باشه، چرا باید از GUI استفاده کنیم؟
اگر هم لازم باشه مگر PHP کنسول نداره؟ یا مگر با وجود Workbench مای سیکوئل کنسول نداره؟ psql و غیره هم هستند، بعید میدونم کنسول ربطی به داستان GUI داشته باشه
خب برگردیم به کاربرد کنسول
برای چک کردن مادل ها و در حقیقت تیبل ها در ریلز استفاده میشه، و یا حداقل یکی از استفاده هاش این هست
من میپسندیدم بجای اینکه اینکار رو از راه ترمینال انجام بدم، یه رابط کاربری داشته باشم که آزاد باشم باهاش کار کنم نه اینکه همه تغییراتم رو در مدل هام بدم و ناچار باشم توی کنسول مایگریت کنم و …
امید وارم روشن باشه
من تابحال کاری نداشتم که ۱۰۰ سرور نیاز داشته باشم و در این اندازه کار کنم
اگر در اون اندازه کار بشه بازهم قطعا راهی هست ولی اونوقته که پاسخ شماهم یک راه حل میشه ولی نه در استفاده در اندازه کوچک مثل یک وبلاگ یا …
درود دوست گرامی
هرچند سخن آغازین شما خیلی گیرایی نبود ولی چیزی که برداشت کردم رو پاسخ میدم:
خیر من طراح UI نیستم
و کار اصلیم هم برنامه نویسی نیست و بیشتر سمت شبکه ام ولی چند سالی هست که پروژه ای کار میکنم
تقریبا با ترمینال بزرگ شدم
همانگونه که در پاسخ به دوست گرامی سمیر هم نوشتم، مشکل من با درون کانسول هست نه خود کانسول!
هرچند منظور از خود کانسول ترمینال هستش، شما کانسول رو با ترمینال یکی نکنید
بله و زمانی که نام یک row رو به اشتباه بزنید همه ی دستورات کدتون اجرا میشه و در جایی که اشتباه نوشتید میشکنه و اجرا نمیشه تا دوباره برید و ارور رو درستش کنید. و پس از اونهم باز باید برگردید به ورژن قبل و دوباره برگردید و از دوباره انجامش بدید که یک کار رو ناچار میشید چند بار انجام بدید فقط به این دلیل که شاید integer رو int نوشته باشید و یا چنین چیزی!
این ایراد زبان نیست چون روبی زبانی اسکریپتی هست. بهر سو: این ایراد ریلز و سیستم کانسولش هست که من نپسندیدم
به عقیده من این سخت گیری بجاست چون درستی دیتابیس ضروریه
و شما اگر syntax migration بخونی چندبار دیگه به این خطاها نمیخوری
ریلز مانند هرابزاری یک کم مهارت در آن وقت میبره
در مورد کنسول پیشنهاد می کنم این مطالب رو مطالعه بفرمائید.
REPL امکاناتی به شما می ده فراتر از اون که فکرش رو بکنید. PHP هم REPL داره و لی به خوبی pry نیست و هیچ کدوم از اینا به خوبی REPL زبانی مثل Clojure نیستند. شما می تونین از اون console برای دیباگ کردن کدتون استفاده کنین و خیلی کار های دیگه.
این رو درست درک نکردم. عموما همه framework هایی که به نوعی MVC هستند همین داستان هست. Rails, Django, Larravel و غیره کاری هم به زبان نداره.
این رو هم اضافه کنم که در مورد GUI و دیتابیس از همون ابزار هایی که تو PHP استفاده می کنید اینجا هم می تونین استفاده کنین. فکر می کنم مشگل شما بیشتر با Migration ها هست. که یه جورایی شاید برای پروژه های شخصی و کوچیک زیاده کاری به نظر بیاد. اما با ابزار هایی که براش هست کار بسیار آسون می شه.
نظر شما کاملا محترم هست و ممنون از اینکه اینجا مطرح کردید چون ممکنه ذهنیت خیلی از دوستان دیگه هم باشه ازینرو لازم دونستم نکاتی رو عرض کنم.
بخشی از ایراداتی که شما گرفتید باعث سینتکس عجیب روبی و یا Active Record بود خیلی بی انصافیه که به خاطر سینتکس جدید از زمانی متنفر شد.
اگر اینجوری باشه قبل از آشنایی باید از زبان هایی مثل lips, Lua, Clojure و ده ها زبان دیگه متنفر باشید چون سینتکس اون ها هم خیلی متفاوته با یه چیزی شبیه PHP.
توی این پونزده شونزده سالی که کار بک اند انجام می دم قبل از Active Record هیچ orm یا شبه orm ای با این کیفیت ندیده بودم و اخیرا از روی اون دارن ایده های جدیدی میگیرن.
در مورد Migration ها کاربرد اصلی خودش رو توی سیستم های به نسبت بزرگ نشان خواهد داد می تونم بگم توی پروژه فعلیای که مشغول به کار هستم مایگرشن ها واقعا کمک بزرگی بوده.
در مورد بقیه موارد هم دوستان پاسخ دادند.
در کل من فکر می کنم مشکل اصلی ذهنیت شما بوده که در ابتدای کار ریلز را فریم ورک سادهای فرض کردید.
درسته که ریلز کار توسعه رو تسریع می بخشه ولی نمی شه گفت ساختار خیلی سادهای داره.
به نظر من ریلز فرم ورک خیلی خوبی اما اگه بخوام ازش ایراد بگیرم باید بگم که خیلی بیش از حد جادویی ( magical ) و implicit هست. و این خیلی وقتا می تونه اذیت کنه و یا دردسر هایی درست کنه که نشه به این آسونی درستش کرد