framework vs. library

به عنوان یک دانشجوی نرم افزار که از طریق دانشگاه با برنامه نویسی آشنا شد و به این حوزه علاقه مند شد همیشه واسم سوال بود که چرا دنیایه برنامه نویسی داره به سمت استفاده از فریم ورک میره بجای استفاده pure زبان های برنامه نویسی با اینکه زبان های pure آزادی عمل بیشتری رو بهمون میده.سر کلاس درس از اکثر استاد هام این سوال رو پرسیدم ولی خیلی جواب واضحی نگرفتم بعد از تحقیق بسیار که موضوع برای خودم روشن شد خواستم این موضوع رو برای کسانی که تازه وارد دنیا برنامه نویسی شدن باز کنم.در ابتدا باید بگم من مثال هام رو ممکنه با php و لاراول جلو ببرم ولی در کل این موضوعات برای تمام زبان های برنامه نویسی صدق میکنه.وقتی شما شروع به یادگیری یک زبان برنامه نویسی مثلا php میکنید شاید برای پروژه یادگیری خودتان یک سایت را شروع به طراحی کنید وقتی کمی جلو بروید یا سایت خود را به یک متخصص نشان بدهید ایرادات بسیاری از شما میگیره نه بخاطر کم وقت گذاشتن شما یا کم تجربه بودن شما....بخاطر اینکه شما وقت ندارید تمام موارد امنیتی که کشف شده اند و راه حلش پیاده سازی شده اند یا تمام ماژول هایی که توسط برنامه نویس های دیگر نوشته شده اند رو خودتان پیاده سازی کنید.اینجاست که نوشتن اپلیکیشن با زبان خام کار طاقت فرسایی است و استفاده از frameworkها و کتابخانه ها مطرح میشود.همونطور که از معنای لغوی این کلمات مشخصه framework یک چهارچوب برای شما اماده میکند و کتابخانه مجموعه از متد ها و ماژول هاست.از منظر شباهت این دو مفهوم، هردوی اینها برای حل مشکلات متداول و پیاده سازی مفهوم DRY(don't repeat your self) و تمیز کد نوشتن توسط برنامه برنامه نویس های دیگر نوشته شده اند.اما از منظر تفاوت این دو مفهوم باید به کلمه inversion controller مراجعه کرد.کتابخانه مجموعه ایی از متد های پرکاربرده که شما رو از پیاده سازی الگوریتم های پیچیده رها میکنه و شما فقط کافیه یک متد را صدا بزنید. مانند: کتابخانه های ریاضیاتی.اما framework ساختاری است که ممکنه شامل چندین کتابخانه و ماژول مختلف باشد که به مراتب ساختارمند تر و پیچیده تر از کتابخانه است اما به شما کمک میکند که طبق استاندارد های برنامه نویسی کدنویسی و تولید اپلیکیشن کنید.به صورت خلاصه شما هرجایی که نیاز داشته باشید یک متد از کتابخانه رو صدا میزنید اما در framework شما باید کدهای خود را داخل مسیرهایی که framework برایتان مشخص کرده قرار بدهید تا اون هنگام اجرا اپلیکیشن به کد های شما مراجعه کرده و از آنها استفاده کند.به این نحوه استفاده و فراخوانی inversion controller میگویند.مثلا اگر شما بخواهید با pure php شروع به پیاده سازی مدل mvc بکنید باید در ابتدا خودتان ساختار کنترلر را پیاده سازی کنید و ارتباطی که دستورات از view شما به کنترلر برسند و در آنجا پردازش شوند و سپس در مدل ذخیره شوند را خودتان پیاده سازی کنید اما وقتی لاراول این کار را با درنظر گرفتن تمام مسائل امنیتی انجام داده است چرا شما باید خودتان این کار را بکنید؟مسئله ایی که در مقایسه framework ها درنظر میگیرند و گفتنش در اینجا خالی از لطف نیست مسئله opinionated بودن یا سختگیر بودن framework هاست که باید به صورت موردی در هر framework بررسی بشود و در تعریف به میزان ازادی عمل برنامه نویس در دستکاری ساختار های اپلیکیشن برمیگردد.به طور مثال من بر اساس تجربه خودم میگم که angular یک framework سختگیره و vuejs یک framework بازتری هستش.نتیجه گیری:کتابخانه ها و framework ها کدهایی هستند که برای حل مشکلات متداول به کمک شما می آیند و توسط افرادی مانند خود شما نوشته میشوند با این تفاوت که کتابخانه هارا هر کجا که نیاز دارید از آنها استفاده میکنید اما framework ها برای شما تعیین میکنن که هر کدی کجا نوشته بشه که این استاندارد کد نویسی شما رو ارتقا میده.در آخر لازم به ذکر هستش که من برنامه نویس نیستم بلکه درحال یادگیری برنامه نویسیم و قطعا مقاله من ایراداتی رو داره که خوشحال میشم نظراتتون رو بخونم.