داستان این دوره از اونجایی شروع شد که یک روز مشغول به کار بودم که گزارش یک باگ خطرناک رو بهم دادن و گفتن باید سریع رفع بشه. منم همراه اون برنامه نویسی که اون قطعه کد رو قبلا توسعه داده بود مشغول دیباگ و بررسی کد شدیم و در کمال ناباوری متوجه شدم مشکل خیلی چیز سادهای بوده که احتمالا علتش درک نادرست برنامه نویس از نحوه رفتار اشیاء و پیادهسازی نادرست اون بود. ایشون یک شی درست میکرد و همون شی رو بر روی تعداد زیادی رکورد استفاده میکرد و این باعث میشد که کد تخفیف به شکل اشتباهی برای خیلی از کاربران ارسال بشه که در نتیجه به ضرر مالی شرکت ختم میشد. این موضوع باعث شد به این فکر کنم که خیلی از ماها ممکنه شی گرایی رو به صورت خیلی پیش پا افتاده یاد گرفته باشیم و واقعا درک درستی از دلیل و فلسفه و چرایی شی گرایی نداشته باشیم.
سالها پیش، خود من خیلی وقتها از خودم میپرسیدم که واقعا این شی گرایی چه مزیتی میتونه داشته باشه؟! بیشتر به این فکر میکردم که مثلا توی زبانی مثل PHP همون نوشتن توابع میتونه روش بهتری برای نوشتن کدها باشه و اگه یه سری کلاس و شی داشته باشیم بیشتر میخواد پیچیدگی به پروژه اضافه کنه اما خب این تا زمانی بود که هنوز شی گرایی رو به درستی درک نکرده بودم. بعد از اون یکی از لذتهای واقعی من در کدنویسی، مدل کردن و حل مساله با شی گرایی بوده و هست.
واقعیت اینه که خیلی از ماها مثل خود بنده شی گرایی رو با یک دید خیلی محدود و سطحی یاد گرفتیم، بسنده کردیم به آموزشهایی که صرفا میگفتن شی و کلاس و مثالهایی از درخت و کوه و پیتزا میزدن. قطعا این مثالها برای شروع خوب بود ولی از یه جایی به بعد دیگه خیلی نمیتونست به درک و فهم ما از شی گرایی کمک کنه.
برای اینکه ببینیم آیا درک درستی از این موضوع داشتیم یا نه بهتره این سوالات رو از خودمون بپرسیم!
خب اگه اکثر این سوالات رو به درستی نمیتونید پاسخ بدید یا براتون خیلی گنگ و مبهمه، در جوابشون میتونم بگم شما هم درگیر همین مشکل عدم درک درست و صحیح از شی گرایی هستید.
کار از اونجایی خطرناک میشه که کسی که این شی گرایی رو به صورت سطحی درک کرده شروع به کار با فریمورکها میکنه و خب فریمورکی که تقریبا اکثر موارد پایهای رو حل کرده ابزار همیشگی اون شخص میشه. این خوشحالی موقتیه چون وقتی با پروژهای که به صورت ذاتی پیچیدگی داره رو به رو میشه، بدون تحلیل درست از مدلسازی مساله در بخشهای مختلف کدهایی رو تولید میکنه که به سال نرسیده هزینههای وحشتناکی برای نگهداریش ایجاد میکنه و احتمالا برنامه نویسهای جدید پیشنهاد بازنویسی جدید میدن و خب میدونیم که سازمانها و کسب و کارها هم اکثرا موافق بازنویسی مجدد یک سیستم نیستن و حق هم دارن چون تولید اون سیستم علاوه بر هزینه مالی زیاد، هزینه وحشتناکی از لحاظ زمانی ایجاد میکنه.
نتیجه میگیریم پیاده سازی درست یک مساله و مدل سازی خوب اون در شی گرایی میتونه کدهایی رو ایجاد کنه که در نهایت به راحتی میشه براشون تست نوشت، اونا رو توسعه داد و ازشون نگهداری کرد که که منجر به هزینه نگهداری کمتر با بهره وری بیشتر برای اون سازمان میشه و اینجاست که ارزش واقعی یک توسعه دهنده نرم افزار خودش رو نشون میده.
خیلیها این سوال براشون میاد که آیا مشکل ما فقط درک نادرست از شی گرایی است؟ آیا این محصول نرم افزاری تنها مشکلی که دارد پیاده سازی نشدن کدهای آن بر اساس یک ساختار درست شی گرایی است؟ هیچ مشکل دیگری ندارد؟
قطعا این سوالات همگی درست هستند، از مشکلات دیگهای که میتونه دردسرهای زیادی رو برای نگهداری یک کد بیس ایجاد کنه میتونیم عدم وجود تستهای خودکار، شناخت اشتباه از نیازمندیهای کاربر نهایی، عدم ترجمه صحیح نیازمندیها از سمت کسب و کار یا سازمان، عدم پیاده سازی معماری متناسب با نیازهای روز آن و ... نام ببریم.
خب چرا به شی گرایی اشاره میکنیم؟ چون این موضوع نسبت به اکثر موارد بالا (به جز موارد کسب وکار) پایهایتر محسوب میشه و اگر این رو اشتباه جلو بریم با یه درصد بالایی، در خیلی از موارد دیگه هم راه رو کج میریم.
هدف اصلی این دوره، مرور و باز تعریف مفاهیم شی گرایی از یک دیدگاه جدیده که به برنامه نویسان کمک میکنه در مواجهه با مسائلی که در شی گرایی مطرح میشه بتونن تصمیمهای بهتری بگیرن و کدهایی تولید کنن که هزینه نگهداری اون خیلی پایین باشه. با این روش هم خود برنامه نویس احساس بهتری نسبت به کدهای نوشته شده داره و لذت بیشتری از کدنویسی میبره و هم سازمان هزینههای کمتری برای تولید و نگهداری نرم افزار پرداخت میکنه.
این دوره به صورت ویدیوهای از پیش ضبط شده (تهیه شده از کلاس آنلاین) ارائه خواهد شد و محتوای ارائه شده در دوره به صورت سرفصل به سرفصل هست که در این بخشها صرفا کدهایی رو داریم که به عنوان Sample نوشته میشن، اما در بخش انتهایی دوره یک پروژه Meetup داریم که با فریمورک لاراول اون رو پیاده سازی میکنیم تا در یک پروژه با هدف مشخص استفاده از روشهای ارائه شده در دوره مرور بشه.