چرا باید از فریمورک استفاده کنیم؟

سلام! ?توی اولین پست پول ریکوئستم میخوام در رابطه با موضوع “استفاده کردن یا نکردن از فریمورک ها” صحبت کنم. توی گروه های تلگرامی سوالات زیادی درباره این موضوع پرسیده میشه برای همین تصمیم گرفتم این مطلب رو بنویسیم تا برای دوستانی که سردرگم هستن کمکی باشه. مقدمه چینی بسه، بریم ببینیم داستان از چه قراره!فریمورک چی هست اصلا؟فریمورک یک چارچوب نرم افزاریه که کمک میکنه اپلیکیشن شما تحت ساختار خاصی ایجاد و توسعه داده بشه.برای استفاده از فریمورک شما باید از مجموعه قوانین خاصی پیروی کنید و با فرمت خاصی پروژتون رو توسعه بدید. مزیت پیروی از این قوانین منسجم بودن کد، صرفه جویی توی زمان، پایداری بیشتر، امنیت قابل اعتماد تر و قابلیت های دیگه ای هست که بسته به فریمورک مورد استفاده متفاوته. جالبه نه؟ ?تنها بخشی که ممکنه بخواد شمارو از استفاده از فریمورک منصرف کنه، مدت زمانی هست که شما باید صرف یادگیری قوانین، کلاس ها و ساختار فریمورک کنید. با توجه به اینکه یه مدت زمان میبره تا با فریمورک جدید آشنا بشید و بتونید باهاش کار کنید، منطقیه که اصلا سمت فریمورک بریم؟ باید بگیم بله، کاملا ارزشش رو داره!فریمورک استفاده کنیم یا نه؟جواب سوال خیلی واضحه و بستگی به پروژه شما داره. در صورتی که پروژه شما ممکنه از حد و سطح پروژه های ساده خارج بشه، قطعا شما احتیاج به یک فریمورک دارید. چون شما به عنوان یک برنامه نویس تنها یا حتی تیم، توانایی پوشش دادن همه جوانب یک اپلیکیشن رو بصورت “کامل” ندارید. دلیل دیگه ای که آدمو مجاب میکنه که برای پروژه های متوسط و بزرگ از فریمورک استفاده کنه، صرفه جویی توی وقت زمان پیاده سازی، توسعه و نگهداریه.در صورتی که از فریمورک استفاده نکنید (یا بخواید فریمورک شخصی بنویسید) چندین و چند مسئله هست که باید خوب راجع بهش فکر کنید:اصلا علم کافی برای پیاده سازی حرفه ای یک اپلیکیشن بدون فریمورک یا ساخت فریمورک اختصاصی رو دارید؟آیا کد هایی که نوشتید بهینه ست و توی بهترین حالت ممکن نوشته شده؟اگه مشکل امنیتی داشتید و هیچوقت متوجهش نشدید چی؟پیاده سازی وبسایت بدون استفاده از فریمورک های از پیش ساخته شده، چقدر میتونه زمان ببره؟اگر احتیاج داشتید پکیج از پیش نوشته شده ای به پروژتون اضافه یا کم کنید، بدون دردسر این کار انجام میشه؟اگر کسی برای توسعه اپلیکیشن به شما و تیمتون اضافه شد، چقدر طول میکشه به ساختار کد یا فریمورک شما عادت کنه و باهاش آشنا بشه؟کد های شما دارای داکیومنت کامل و جامع هست؟چقدر میتونید زمان صرف توسعه هسته فریمورکتون کنید و آپدیت نگهش دارید؟در صورتی که بتونید به سوالات بالا جواب منطقی و قانع کننده بدید، شما احتیاج به فریمورک ندارید، اما اگر جواب منطقی برای سوالات بالا نداشتید حتما یک فریمورک رو برای پروژه پیش روتون انتخاب کنید!چقدر آماده استفاده از فریمورک هستید؟موضوع دیگه ای که خیلی مهمه اینه که از لحاظ فنی آمادگی یادگیری و استفاده از فریمورک رو دارید؟جواب این سوال برای پلتفرم ها و زبان های مختلف متفاوته اما بصورت کلی برای شروع کار و استفاده از فریمورک شما باید قبلا تجربه پیاده سازی چندین اپلیکیشن رو داشته باشید و با الگو های مرسوم و روند تولید نرم افزار کاملا آشنا باشید. بدونید چه چالش هایی توی کد نویسی بدون فریمورک وجود داره و سعی کنید خودتون اون چالش هارو برای یادگیری بیشتر رفع کنید. یک مثال از زبان پی اچ پی میزنم. توی پی اچ پی در صورتی که شما شی گرایی و ساختار ام وی سی رو بلد نباشید به هیچ وجه نمیتونید نحوه کار فریمورک هایی از جمله لاراول، سیمفونی، کدایگنایتر و سایر متوجه بشید. توی اکثر فریمورک های زبان های دیگه هم این قضیه صادقه. مثلا اگه شما شی گرایی توی جاوا رو بلدید نباشید نمیتونید ساختار و روند ساخت اپلیکیشن اندروید رو یاد بگیرید.تجربه شخصیمن چند سال پیش زمانی که میخواستم اولین پروژه تجاری که سفارش گرفته بودم رو بنویسم، اصلا درکی از فریمورک نداشتم پس شروع کردم از صفر نوشتن همه بخش های وبسایت و پنل ادمین. نه تمپلیت انجینی استفاده میکردم نه کوئری بیلدر (چه برسه به اُ آر اِم). درواقع هر کوئری که میخواستم بزنم رو دستی مینوشتم. همینطور برای خودم ساختار درست کرده بودم که مثلا هر ماژول رو جدا داشته باشم که توسعه ام راحت تر باشه. تا حدی کمکم کرد این ساختار اما بازم همه چیز تو هم و بدون انسجام بود. این تجربه شد که دفعه بعد هرچیزی که لازم دارم رو توی کلاس بنویسم.پروژه بعدیم رو شروع کردم به نوشتن، برای امنیت سیستم کلاسی داشتم که متدی هایی برای اسکیپ کردن ورودی و … داشت. کلاسی داشتم که شامل متد هایی برای ایجاد، حذف، نوشتن، خوندن از فایل و آپلود کردن عکس بود. همینطور یک کلاس هم نوشته بودم که کار با تاریخ رو راحت تر کنه برام.توی این پروژه با شی گرایی خیلی خوب آشنا شدم و نتیجش تکرار کمتر کد ها، خوانایی بیشتر کد ها، و توسعه راحت تر نسبت به سیستم قبلی بود. اما باز هم مشکلات زیادی داشتم. مثلا برای اینکه قابلیت جدید اضافه کنم احتیاج داشتم تغییری توی ساختار دیتابیس بدم که این یعنی مکافات! باید میرفتم از دیتابیس بک اپ میگرفتم که نکنه یوقت خراب کاری کنم، بعد فیلد جدید رو اضافه میکردم، کد های جدید رو اضافه میکردم و وقتی همه چی اوکی بود دوباره یه بک آپ دیگه میگرفتم میبردم روی هاست اپلود میکردم. این بک آپ گرفتن و ریستور کردنا وقتی تعدادشون بالا میرفت دیوونم میکرد! خلاصه با مشکلات کلی آشنا شدم و خودم رو آماده کار با فریمورک میدونستم.اول از همه فریمورک کد ایگنایتر استفاده کردم که قابلیت های کمتری نسبت به بقیه فریمورک ها داشت، اما وقتی فهمیدم فریمورک ها چطور کنترلر و مدل و ویو رو از هم جدا میکنن و روند کارشون چطوریه، اومدم سمت لاراول. دیدم هر مشکلی که توی کد نویسی از صفر وجود داشت با استفاده از لاراول رفع میشه! مثلا همون بخش آپدیت کردن ساختار دیتابیس با یک فایل مایگریشن انجام و برای اعمالش روی سرور فقط یه کامند باید زده میشد! به همین راحتی!نتیجه گیری نهاییاگه از اون دست افرادی هستید که اعتقاد دارن باید همه چیز رو از صفر نوشت یا به قول معروف چرخ رو از نو اختراع کرد وگرنه برنامه نویس نیستیم، باید بهتون بگم که سخت در اشتباهید. برنامه نویس کار درست برنامه نویسیه که از تمام امکانات موجود استفاده کنه، اگر نقصی توی ابزار هایی که براش فراهم شده وجود داشت بتونه اون نقص هارو رفع کنه و بزاره تمام دنیا از نسخه اصلاح شدش استفاده کنن. کاری که روی گیت هاب و پروژه های اوپن سورس انجام میشه.درحال حاضر تعداد شرکت هایی که تمایل به استفاده از فریمورک برای پروژه هاشون دارن روز به روز در حال افزایشه و از اون سمت، شرکت هایی که اعتقاد به اختراع دوباره چرخ دارن در حال انقراض هستن. پس بهتون پیشنهاد میکنم توی زمینه کاریتون حتما اول پیش نیاز های کار با فریمورک رو یاد بگیرید و بعد به سمت استفاده و یادگیری یک فریمورک برید تا از بازار کار و رقابت عقب نمونید!