درود بسیار بر دوستان گرانقدر
درنوشتۀ پیشین گفتم دو تا مفهموم ساده اما بسیار مهم در مهندسی نرم افزار هست که اگر به اونها آگاه نباشید و اونها رو بکار نبندید در آیندۀ پروژه تاثیر ناخواسته و بدی داره. نخستینِ اونها را با هم شناختیم و گفتم پیش از دست بردن به هر کاری باید بخشهای تردید برانگیز پروژه رو شناسایی کنید و آنگاه تلاش کنید تا برای اون مسائل راه حلی بیابید. اکنون زمان اون رسیده تا راه حلی که یافتید رو بررسی و آزمایش کنید و ببینید پاسخگو هست یا نه. به این کار میگن :«اثبات مفهوم» و در این نوشته باهاش آشنا میشیم
پس از امکان سنجی
خُب، تا اینجا نیازها رو از مشتری چمع آوری کردیم، اونها رو بتندی بررسی کردیم و دیدم که فلان کار و بهمان قابلیت به نظرمون سرطان میاد و ما فعلا نمیدونیم که باید چی کارشون کرد اما خودمون رو نباختیم و رفتیم دنبالش تا ببینیم ملّت کفار چی کار کردن و راه حلش چیه. برخی مسائل راه حلشون ساده است و زمانی که راه حلش رو یافتیم دیگه نیازی به آزمون کردن ندارند. ما بی درنگ میتونیم از همون راه حل بهره ببریم یا دست آخرش باید یه کم دانش و آگاهی مون رو افزون کنیم و یه شماری کتاب و مقاله و مستندات و .. بخونیم تا بر اون راه حلی که پیدا کردیم مسلط بشیم. اما همیشه کار به این سادگی نیست و برخی ایده ها، راه حل ها، پیشنهادات و نظرات نخست یابد آزموده بشن تا ما بدرستی بدونیم که پاسخگوی نیاز مشتری هستند یا خیر. بنابراین در بسیاری از موارد پس از بررسی های امکان سنجی و یافتن پاسخهای احتمالی نوبت به آزمودن اون پاسخها میرسه. در این آزمون میخواهی ثابت کنیم پاسخ ما درسته و اون کار با راهی که ما میخواهیم بریم شدنی است. به این کار میگن اثبات مفهوم و بخشی بسیار بسیار مهم از فاز امکان سنجی شمرده میشه. هر راه حلی که برای نخستن بار داره پیاده میشه یا در کارا بودنش کوچکتری تردید هست باید نخست آزموده بشه و از فاز اثبات مفهوم بیرون بیاد تا بتونه در پروژه استفاده بشه
نادیده انگاشتن اثبات مفهوم
اگر برای یک پاسخ یا راه حل فاز اثبات مفهوم رو طی نکنیم چی پیش میاد؟ خیلی ساده است : شما نمیتونید با اطمینان به ادامه پروژه بپردازید چون هیچ آزمونی روی راه حل پیشنهادی شما انجام نشده و هیچ آشکار نیست که راه حل شما در کار هم بتونه پاسخ گو باشه. فراموش نکیند که مسائل نرم افزاری وجوه و ابعاد پنهان بسیاری دارند و شما هر چند هم باهوش و آگاه باشید (که نیستید، هیچ کس نیست) شانس بسیاری هست که اشتباه کنید. شاید یه چیز مهم رو در این میانه نبینید، چیزی رو از قلم بندازید یا مطلبی رو درست نفهمیده باشید . در نتیجه با پشتوانه ای خیالی کارتون رو ادامه بدید و سپس ببینید چیزی که بهش اطمینان داشتید پاسخگو نیست. برای من بقدری این موضوع روشن و آشکار شده (به این دلیل که این بحث رو جدی نمیگرفتم) که براستی نمیدونم چه نمونه هایی براتون بیارم که خوب باشه اما تلاش خودم رو میکنم: زمانی ما درگیر یک پروژه وب سایتی بودیم و مشتری چیزی میخواست که با آژاکس به تنهایی شدنی نبود. ما تو همون فاز جمع آوری نیاز این دشواری رو فهمیده بودیم و داشتیم روی امکان سنجی اش کار میکردیم. پیش از این نمونۀ همین کار رو دیده بودیم و میدونستیم میشه اما بلد نبودیم که چه باید کرد اینه که یکی از بچه ها رو فرستادیم دنبال تحقیق. اون دوستون پس از یکی دو روز تحقیق با دست پر برگشت و راه حلی پیشنهاد داد که در ظاهر بی هیچ کم و کاستی دقیقا همون کار رو میکرد و ما هم عین گوشت کوب و سرمست از این پیروزی بزرگ راه حل رو پذیرفتیم و رفتیم سراغ کارهای دیگه. چند روز پس از اون بچه ها داشتند با گرافیستمون سر و کله میزدند که من رسیدم و فهمیدم داستان اینه که اینا میخوان یه جلوه ای به یک عکسی بدن که هیچ کس نمیدونه اصلا همچین چیزی میشه یا نه؟ هر کی یک تزی میداد اما همه اون کارها خیلی دراز بودن و نمیشد دونه دونشون رو روی عکس مادرآزمون کرد. من پیشنهاد دادم یه عکس بیخودی درست کنند و این نظریات روی اون عکس امتحان بشه. در پایان در یک سایتی یه مقاله ای نوشته بود و ساخت جلوه ای همسان (اما نه یکسان) با اونچه که ما میخواستیم رو بیان کرده بود. همه بچه گفتن آقا دیگه همینه و مشکل حل شد و … اما گرافیستنمون هر چی تلاش کرد نتونست با پیروی کردن از نوشته های اون سایت جلوۀ مد نظر رو در بیاره. همه کف کرده بودن و نمیدونستن کجای داستان اشکال داره اما من دلم همچون سیر وسرکه میجوشید، بدو بدو رفتم پشت یکی از سیستم ها نشستم و فاز آژاکس و جاوا اسکریپت رو گرفتم اما هر چی خودمو پاره و پوره کردم دیدم اون تزی که درباده اش گفتم شدنی نیست که نیست و هر چی هم اندیشه کردم نفهمیدم کجای کار ایراد داره اما مهم این بود که ایراد داشت! اینجا بود که برای نخستین بار اهمیت اثبات مفهوم رو درک کردم و درسته که پروژه یکم به فاک رفت اما به هر حال زود متوجه شدیم و داستان بخوبی و خوشی به پایان رسید
از این تجربه ای که براتون گفتم به جز اهمیت اثبات مفهوم چیز دیگری هم بدست میاد و اون اینه که برای اثبات مفهوم نیازی نیست چیزی رو سرتاسر و با همه جزییات و ریزه کاری هاش اثبات و آزمایش کنید. ایدۀ هسته ای و پایه ای راه حلتون رو شناسایی کنید و سپس با یکی دو آزمون ساده و با کمترین جزییات ممکن اون ایده رو آزمون کنید. البته دقت کنید که منظورم از جزییات چیزهایی هستند که در اثبات اون ایده تاثیری ندارند بنابراین هوشیار باشید که ناخودآگاه چیز مهمی را بجای جزییات حذف نکنید. اگر تردید دارید که چیزی مهم هست یا نه ریک بیخودی نکنید و اون چیز ر هم در آزمون هاتون بگنجونید. یکی دو آزمون بسیار ساده اما کارا ترتیب بدید و اون چیزی که پیشنهاد داید رو آزمایش کنید. اینقدر این کار رو تکرار کنید تا به یک راه حل کارا درست دست پیدا کنید.
- اثبات مفهوم : Prove of Concept
- PoC : Prove of Concept
- راه حل پیشنهادی : Proposed Solution
- راه حل پذیرفته شده : Approved Solution
- راه حل پیاده سازی شده، راه حل بکار بسته شده : Implemented Solution
- راه حل اثبات شده : Proved (demonstrated) Solution
- ایده اساسی، ایده کلیدی، ایده پایه ای، ایده مادر : Core (main, key) Idea