توسعهٔ فریمورک اختصاصی یا استفاده از نمونه‌های اپن‌سورس؟

توسعهٔ فریمورک اختصاصی یا استفاده از نمونه‌های اپن‌سورس؟

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

فریمورک چیست؟
بسته به موقعیتی که در آن قرار داشته باشیم معانی مختلفی برای Framework (چارچوب) می‌توان متصور شد اما در دنیای برنامه‌نویسی و توسعهٔ نرم‌افزار فریمورک‌ها به دولوپرها کمک می‌کنند تا دیگر نیازی به کدنویسی تَسک‌های رایج و تکراری نداشته و به‌ سادگی از کدهایی که قبلاً‌ نوشته شده، تست شده‌اند و کارایی آن‌ها به اثبات رسیده استفاده نمایند.

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

- سرعت توسعهٔ نرم‌افزار: تَسک‌هایی که برای پیاده‌سازی نیاز به ساعت‌ها کدنویسی و صدها خط کد دارند، می‌توانند با استفاده از فریمورک‌ها صرفاً ظرف مدت چند دقیقه عملی شوند که این مسئله در مقایسه با کدنویسی اختصاصی هم سریع‌تر است و راحت‌تر.

- امنیت: فریمورک هرچه معروف‌تر و محبوب‌تر باشد، بیشتر نوک پیکان هکرها قرار خواهد داشت و از همین روی دولوپرهای فریمورک‌ مد نظر تمام تلاش خود را به کار خواهند بست تا کلیهٔ تمهیدات امنیتی را در فریمورک مد نظر بگنجانند. به‌ عبارت دیگر، وقتی که پای امنیت یک فریمورک به‌ میان می‌آید، کامیونیتی پشت آن فریمورک نیز بسیار حائز اهمیت است. 

- هزینه: بسیاری از فریمورک‌های معروف رایگان هستند و از همین روی نرم‌افزارهای توسعه یافته با این دست فریمورک‌ها هم از هزینهٔ تمام‌شدهٔ به‌ مراتب کمتری برخوردار خواهند بود.

- پشتیبانی: فریمورک‌های معروف همگی از ساپورت خوبی نیز برخورداند و در واقع مستندات، تیم راهنما، کامیونیتی توسعه‌دهندگان،‌ فوروم‌های اختصاصی و ... همگی جزو پشتیبانی یک فریمورک محسوب می‌شوند.

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

- محدودیت: کِرنِل (هسته) هیچ فریمورکی را نمی‌توان دستخوش تغییر ساخت (البته می‌توان سورس‌کد توسعه داد اما اگر این‌ کار اصولی صورت‌ نگرفته باشد، پس از آپدیت فریمورک کلیهٔ اصلاحات از بین خواهند رفت!) به‌ عبارت دیگر، وقتی شما به‌ عنوان یک دولوپر فریمورکی را انتخاب می‌کنید، به‌‌ قول معروف می‌بایست پیه محدودیت‌هایش را نیز به تن خود بمالید. در همین راستا، پیش از انتخاب یک فریمورک برای پروژهٔ بعدی خود، اصلاً به بنچمارک‌ها و میزان محبوبیت فریمورک‌ها توجه نکرده بلکه بیش از هر چیزی، میزان تطابق آن فریمورک با نیازهای پروژه را مد نظر قرار دهید چرا که ممکن است فریمورکی بسیار محبوب باشد، اما پاسخگوی نیازهای پروژهٔ شما نبوده و محدودیت‌هایی برایتان داشته باشد.

- سورس‌کد در اختیار همگان است: از آنجا که فریمورک‌ها معمولاً اپن‌سورس می‌باشند، سورس‌کدشان هم به‌ سادگی در اختیار همگان قرار می‌گیرد؛ حتی افرادی با نیت منفی! که در چنین شرایطی اگر فریمورکی دارای یکسری نقاط ضعف امنیتی باشد، چنین افرادی به‌ سادگی قادر خواهند بود تا از همان نقاط ضعف برای حمله به اپلیکیشن شما استفاده کنند.

- جدای از زبان برنامه‌نویسی، زبان فریمورک را نیز باید آموخت: به‌ نظر می‌رسد که این مشکلی بسیار جدی باشد زیرا اگر شما اقدام به استفاده از فریمورکی همچون Laravel که برای زبان PHP طراحی شده کنید اما خیلی در این زبان مهارت نداشته باشید، به‌ صورت ناخودآگاه شما زبان این فریمورک را به‌ جای زبان پی‌اچ‌پی فرا خواهید گرفت (در اینجا منظور از زبان فریمورک همان سینتکس اختصاصی فریمورک است.) به‌ عبارت دیگر، از آنجا که فریمورک‌ها دارای کلاس‌ها، هلپرها و فانکشن‌های مخصوص به خود هستند، دولوپرهای تازه‌کار مواردی اینچنین را فرا گرفته غافل از اینکه اصلاً ربطی به زبانی که آن فریمورک برایش طراحی شده ندارند. در یک کلام، اگر شما کار با فریمورکی همچون لاراول،‌ جنگو یا جی‌کوئری را بلد باشید، این هرگز بدان معنا نیست که به‌ ترتیب به زبان‌های پی‌اچ‌پی، پایتون یا جاوااسکریپت مسلط هستید!

چه موقع دست به توسعهٔ فریمورک اختصاصی خود بزنیم؟
برای اینکه بتوان پاسخ جهان‌شمولی به این پرسش داد، متغیرهای بسیاری را می‌بایست مد نظر قرار دهیم که از جملهٔ مهم‌ترین آن‌ها می‌توان به موارد زیر اشاره کرد:

- تسلط به معماری‌های مختلف نرم‌افزار
- آشنایی کامل با دیزاین پترن‌ها
- تسلط به زبانی که برایش قصد داریم یک فریمورک توسعه دهیم
- تسلط به مبانی بهینه‌سازی سورس‌کد و ...

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

امروزه در مباحث استخدامی، جدای از تسلط بر یک زبان برنامه‌نویسی خاص، آشنایی با یکی از فریمورک‌های مطرح آن زبان نیز شرط لازم برای استخدام است و از همین روی به دولوپرهای تازه‌کار توصیه می‌شود پس از تسلط بر ساختار زبان برنامه‌نویسی انتخابی خود، کار با یک فریمورک را در نقشهٔ‌راه آموزشی خود قرار دهند.