خلاصه کتاب Pragmatic Programmer. درس 12

درس12: گلوله های رسام (Tracer Bullets)ما معمولا از لفظ تارگت زدن استفاده میکنیم تو پروسه توسعه نرم افزار، هرچند که توی واقعیت اسلحه ای دستمون نمیگیریم که به چیزی شلیک کنیم ولی این لفظ تارگت زدن، تشبیه خوبیه.احتمالا تابحال توی برنامه تلویزیونی یا فیلمی دیدید که عده ای وقتی در حال تیراندازی هستند مسیر تیرشون مشخصه مخصوصا توی شب بیشتر به چشم میاد، به این مدل گلوله ها رسام میگن. اونها مسیر تیراندازی رو از لحظه شلیک تا برخوردشون به هدف نشون میدن، سربازا با کمک این مدل گلوله ها میتونن از صحت نشونه گیری و برخورد تیرهاشون به هدف متوجه بشن، به این سبک اونا فیدبک ریل تایم میگیرن توی شرایط واقعی. مشابه همین اصلو ما توی پروژه ها ممکنه که پیاده بکنیم، وقتی شما دارید چیزی رو میسازید که از قبل وجود نداشته. ما مجبوریم که با اصل گلوله های رسام عمل کنیم، در یک مسیر به سمت هدف، فیدبکها رو روی سیستم در شرایط واقعی بگیریم. از اونجایی که کاربرانتون سیستمی به اون شکل ندیدن تا بحال، نیازمندیها بصورت کامل کلیر نیست، شما ممکنه الگوریتم، کتابخونه یا ابزاری رو استفاده کنید توی اون پروژه که تابحال باهاش کار نکردید و با بسیاری از ناشناسها درگیر هستید.برنامه نویسهای عملگرا توی یک چنین شرایطی ترجیح میدن معادل گلوله های رسام رو توی نرم افزار بکار ببرن.کدی که در تاریکی می درخشدبرای این منظور، ما دنبال یکسری از نیازمندیهای اولیه و کلیر شده از سیستم میگردیم تا خیلی سریع تبدیلشون کنیم به خروجی و قابل ارائه و فیدبک بگیریم، و این عملو به صورت تکراری انجام بدیم. از نیازمندیهای اصلی شروع کنید اونایی که سیستمو تعریف میکنن، قسمت هایی که شک دارید و فکر میکنید بیشترین ریسکو بهمراه داره هم در میارید و اولویت بندی میکنید.این مدل توسعه بر این پایه پیش میره که پروژه هیچ وقت تموم نمیشه، همیشه تغییراتی پیش میاد که انجام داده بشه، و همیشه چیزهای جدیدی ممکنه اضافه بشه. در مقابل مدلهای سنتی که پروژه تقسیم میشد به ماژولهای مختلف و ساب اسمبلی ها، اینها باهم ترکیب میشدند و تا موقعی که تکمیل نمیشد پروژه، برای تست زیر دست کاربر نمیرفت.مدل توسعه ای رسام مزیت هایی داره:· کاربرها ی چیزی رو میبینن و لمس میکنن که پروژه در حال انجامهاگر به شکل موفق با کاربر ارتباط بگیرید(در درس 52 مفصل راجعش میگیم)، اونها رو درگیر میکنید، بهتون فیدبک میدن، تارگتهایی که وضوح پایین تری داره رو روشن میکنن براتون و پروگرس پروژه هم براشون ملموس میشه.· برنامه نویسها به یک ساختار میرسنترسناک ترین کاغذ، کاغذیه که روش هیچ چیزی نوشته نشده. حاصل ارتباطی که با مشتری و تیم گرفته میشه برای کلیر کردن تارگت ها و فیدبک گرفتن از کارهای قبلی، این به افراد تیم کمک میکنه که به ساختاری برای خودشون روی پروژه برسن و توی شرایط بلاتکلیف و مبهم قرار نگیرن.· شما یک اینتگریشن پلتفرم داریدشما به محیط توسعه ای میرسید که میتونید تیکه های مختلف کدو که تغییر یا اضافه میکنید، بعد از تست، دپلوی کنید، برخلاف مدلی که ارائه های بیگ بنگی میکنن. شما هر روز چیز جدیدی رو دپلوی میکنید یا حتی بیشتر از 1 بار در روز، به همین دلیل دیباگ کردن و تست کردن اجزای دپلوی شده کوچیکتر به مراتب راحت تر و سریع تر انجام میشه.· همیشه چیزی برای نشون دادن داریدمعمولا اسپانسر و یا سرمایه گذار پروژه ها، یا مشتریها، دلشون میخاد سریعتر یک چیز شماتیکو به عنوان دمو ببینن، با این متود رسام شما همیشه چیزی برای نشون دادن دارید.· حس بهتری از پیشرفت پروژه داریدچون بلاک های توسعه ای کوچیک تر و پی در پی انجام میشه، برنامه نویسها تسک ها رو به ترتیب دان میکنن و فیدبک میگیرن و پروگرس پروژه ملموس تره براشون تا به نسبت اپدیت های بزرگ و هفته ای.** گلوله های رسام همیشه هدف نمیزننکارکرد این گلوله ها این بود که مسیر هدفو برامون روشن میکردن توی تاریکی، بهمون فیدبک میدادن که دقتو بالا ببریم و هدفو بزنیم، حالا ممکن بود اولین تیر به هدف اصلی بخوره یا نه یکمی اونور تر بخوره اما مسیرش چشمونو باز میکرد که اصلیه رو بزنیم تو تیرای بعدی.توی کدم همینطوره، شما این تکنیکو جاهایی به کار میبرید که 100 درصد مطمئن نیستید که دارید کجا میرید توی سیر پروژه، نباید شوکه بشید اگر اولین تلاشهاتون اشتباه از آب در بیاد، کاربر بهتون بگه این اون چیزی که میخاستم نیست، یا مشکل ساختار دیتا داشته باشید یا پرفورمنس و ... اما همین تغییرات و ارائه ها قراره مسیره تارگتو براتون روشن بکنه.** کد رسام در مقابل پروتوتایپینگ(نمونه سازی)ممکنه خیلی ها فکر کنند که این مدل رسام همون نمونه سازیه فقط یک اسم خشن گذاشتیم روش، نه تفاوت هایی وجود داره:- کد رسام کدنهایی محسوب میشه دقیقا مثل تیر رسامی که شاید اولین گلوله تون بخوره وسط هدف، کدشم همینطوره، درسته که شما این کدو میزنید تا فضا رو بشناسید و فیدبک بگیرید ولی با این نیت میزنید که توی محیط واقعی تست و فیدبک بگیرید و اگر اوکی بود توی سیستم نهایی میمونه، ولی تو نمونه سازی شما ممکنه کدی رو بزنید به عنوان سمپل و بعد توی شرایط واقعی عوضش کنید چون اونو به نیت نمونه سازی زدید فقط.- نمونه سازی خیلی ارزون تر و سبک تر از کدهای اصلی هست چون شما فقط برای تست شرایط یا دیتای خاص اون رو میزنید، حتی نمونه سازی فقط به کد ختم نمیشه شاید اصلا کدی در کار نباشه و شما برای جنبه های UI ای نمونه سازی کنید.پروتوتایپینگ رو میتونید به عنوان شناسایی و جاسوسی درنظر بگیرید که قبل از شلیک رسام اتفاق میفته و میتونه بهتون خیلی گرای موثری بده.دروس مرتبط: 13, 27, 40, 49, 50, 51, 52منبع کانال تلگرامی: https://t.me/pragmaticprogrammer_fa