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

درس13: نمونه های اولیه و استیکی نوتها (Prototypes and Post-it Notes)در خیلی از صنایع برای اینکه ایده های مختلفو امتحان کنن، از نمونه سازی اولیه استفاده میکنن، نمونه سازی خیلی ارزون تره به نسبت تلاش روی محیط و یا محصول واقعی، به عنوان مثال تولید کننده های خودرو، همیشه چندین نمونه از یک خودرو رو میسازن و جنبه های مختلف اونو تست میکنن، ایرودینامیک، اتاق خودرو و ... تو صنعت نرم افزار هم همینطوره ما به همین منظور از نمونه سازی بهره میگیریم، در معرض ریسک قراردادن محصول، بررسی شانس موفقیت و کاهش هزینه ها، ما هم ممکنه برای جنبه های مختلف یک نرم افزار نمونه های مختلف طراحی کنیم.نمونه سازی فقط شامل کد نمیشه، ممکنه شما روی یک استیکی نوت(برگه های رنگی لبه چسب دار) هم یک فرایند یا پروسه سیستمی رو نمونه سازی کنید. یا ممکنه یک یوزر اینترفیس رو نمونه سازی کنید روی یک تخته وایت بورد یا نرم افزارهای تولید موک آپ یوآی..نمونه سازی برای اینه که به سوالات کمی پاسخ بده برای همون هم خیلی ارزون و کم هزینه است به نسبت کدی که توی محیط پروداکشن زده بشه. به عنوان مثال اگر کدی رو برای نمونه سازی زدید، اون کد میتونه خیلی از جزئیاتو نادیده بگیره و فقط به همون نیتی که براش نمونه سازی کردیم زده بشه(مثلا میخایم دیتابیس خاصی رو تست کنیم، کدی مینویسیم که فقط ارتباط و موارد مد نظرمون برای تست با اون دیتابیس رو انجام بده ، نه اینکه براش صفحه لاگین بزنیم و منو بزنیم و مجوز پیاده کنیم و هیچ ولیدیتی رها شده نباشه و ...) یا اگر برای یوزر اینترفیس نمونه میسازیم دقیقا خلاصه به همون هدف باشه.اما اگر خودتونو در نقطه ای دیدید که ناچارید به جزئیات و همه جوانب هم بپردازید، با خودتون بسنجید که ایا اون شرایط، موقعیتی هست که بشه از مکانیزم کد رسام استفاده کرد و یدفعه کد پروداکشن رو بزنید.برای چه چیزهایی میشه نمونه سازی کرد؟برای هر چیزی که ریسک داره، ناواضح و فاینال نشده است براتون، یا قسمت مهم و حیاتی سیستم هست، یا از قبل انجامش ندادید، یا توی استفاده و یا اون روش و الگوریتم شک دارید و میخاید آزمایش کنید. محدودیتی توی حوزه های نمونه سازی نیست، چند مورد رو در اینجا لیست کردیم:· معماری نرم افزار· توسعه جدیدی روی نرم افزار فعلی· ساختار یا محتوای منبع های دیتای خارج از سیستم· ابزارهای ترد پارتی (third party tools)· مسائل پرفورمنسی· یوزر اینترفیس و طراحی ظاهرینمونه سازی یک تجربه یادگیری است، و نکته مهم در استفاده ازش همینه که چیزهایی رو تجربه و بهمون آموزش بده.مواردی که در نمونه سازی به کارمون میاد:· دیتای مورد استفاده نیازی نیست دیتای واقعی باشه، پس میتونید اگر در نمونه سازی تون نیاز به دیتا دارید با دیتای تستی و هجو اینکارو بکنید· ممکنه نیاز باشه شما فرمی بزنید با یک دکمه، که فشار همون دکمه اون پردازشی که میخاین نمونه سازی کنید رو انجام بده· چک کردن خطاها اون هم خطاهایی که در حوزه آزمایش شما نیست، لازم نیست(مثلا شما ثبت در دیتابیس خاصی رو میخاید تست کنید، حالا اینکه تکست باکس ایمیل رو کاربر توش عدد وارد کرده شاید در راستای ازمایش و نمونه سازی شما نباشه و نیازی نیست روش وقت بزارید)· استایل کدی که برای نمونه سازی مینویسید مهم نیست که تمام اصول و قوانین، یا داکیومنشن داشته باشه.· ممکنه این راحت تر باشه تا کدهای نمونه سازی رو با یک زبان اسکریپتی سطح بالا مثل پایتون یا روبی بزنید، و در صورتی که نمونه سازی موفق بود با کد اصلی تون به پروژه اضافه کنید مورد مدنظرو.· برای نمونه سازی در UI از نرم افزارها و ابزارهای موجود استفاده کنید تا خروجی بهتر و راحت تری داشته باشید.نمونه سازی معماری سیستمدر این مدل نمونه سازی شاید لازم نشه شما کدی بزنید و یک تخت وایت برد یا کاغذ بتونه بهتون کمک کنه که ماژولها، دامین ها و رفتار کلی سیستم رو نمونه سازی و روابط رو به نمایش در بیارید. در اینجا یکسری سوالاتی که باید از خودتون بپرسید در نمونه سازی معماری سیستم لیست کردیم:· آیا مسئولیت ها و کارکردهای مهم سیستم بیان شده و به نحو صحیح پیش بینی شده است؟· آیا ارتباط و همکاری بین کامپونتت های مختلف سیستم خوب تعریف شده؟· آیا وابستگی کامپوننت ها حداقل است؟(رعایت اصل decoupling)· آیا محل هایی که ممکنه داپلیکیشن در سیستم رخ بده قابل شناسایی و پیش بینی است؟· آیا تعاریف اینترفیس های کلاسها قابل قبول و مکفی است؟· آیا هر ماژول دسترسی به دیتاسورس لازمشو داره؟حواستون باشه که اگر برای نمونه سازی ای کد زدید، اون کد قراره از بین بره و کد نهایی نیست، دقیقا برخلاف متود کدهای رسام، پس اگر در شرایطی قرار گرفتید که اسپانسر یا صاحب پروژه یا مشتری جو روانی رو به سمتی میبره که همین نمونه سازی رو لانچ کنیم باید به خوبی توجیه شون کنید و اگر محیط پروژه پتانسیلشو داشت همون متود کدهای رسام رو باید پیاده کنید و نه نمونه سازی.معمولا استفاده از نمونه سازی، تا حد زیادی صرفه جویی میکنه در زمانمون، پول، جلوگیری از دردهای لانچ محصول اشتباه و دور از هدف و ...دروس مرتبط: 12, 14, 17, 27, 37, 45, 52منبع کانال تلگرامی: https://t.me/pragmaticprogrammer_fa