منطق ایجنت‌ها › M2 — حل مسئله و طراحی راه‌حل ⭐
۲.۴ پایدار تدریسی ~۳۰ دقیقه

از ایده تا spec

قبل از این فصل: فصل ۲.۱

در یک نگاه

۲.۴.۱

spec چیست و چرا بدون آن گم می‌شوی

spec یعنی نوشتنِ قبل از شروع اینکه دقیقاً چه می‌خواهی. نه یک سند رسمی — نصف صفحه کافی است.

چرا لازم است؟ چون بدون آن، دو اتفاق می‌افتد که هر دو را احتمالاً تجربه کرده‌ای:

و یک فایده‌ی سومِ کمتر واضح: خودِ نوشتن spec، مشکل را روشن می‌کند. خیلی وقت‌ها وسط نوشتنش می‌فهمی که خودت هم دقیقاً نمی‌دانستی چه می‌خواهی — و پیدا کردن این، ارزان‌تر از فهمیدنش بعد از دو روز کار است.

۲.۴.۲

اجزای یک spec کوچک

پنج تکه، و هیچ‌کدام بیش از چند خط:

  1. ورودی چیست؟ دقیقاً چه فایلی، از کجا، با چه قالبی. «فایل فروش» کافی نیست؛ «فایل CSV که هر دوشنبه از پنل می‌گیرم، با این ستون‌ها» کافی است.
  2. خروجی چیست؟ چه چیزی، در چه قالبی، کجا ذخیره شود.
  3. چه کاری روی ورودی انجام شود؟ قاعده‌ها — همان چیزی که معیار «قاعده‌مندی» فصل ۲.۱ می‌سنجید.
  4. «تمام شد» یعنی چه؟ بخش بعدی.
  5. چه چیزی جزو این کار نیست؟ این تکه را همه جا می‌اندازند و مهم‌ترین است — بخش ۲.۴.۴.

و نکته‌ی مهم: spec را برای خودت می‌نویسی، نه برای ایجنت. اینکه بعداً همان را به ایجنت بدهی خوب است، ولی ارزش اصلی‌اش این است که مجبورت می‌کند قبل از شروع فکر کنی.

۲.۴.۳

تعریف «تمام شد»

این مهم‌ترین بخش spec است، و باید قابل‌بررسی باشد — یعنی بشود نگاهش کرد و گفت بله یا خیر.

مقایسه کن:

مورد سوم را می‌شود امتحان کرد. دو مورد اول را نه.

به‌خاطر بسپار اگر نمی‌توانی بنویسی «تمام شد» یعنی چه، هنوز آماده‌ی شروع نیستی. و اگر تعریفت را نمی‌شود با نگاه‌کردن به خروجی بررسی کرد، هنوز به‌اندازه‌ی کافی مشخص نیست.

ساده‌ترین راه برای رسیدن به یک تعریف خوب: یک نمونه‌ی ورودی بردار که جوابش را از قبل می‌دانی. آن‌وقت «تمام شد» یعنی «روی این نمونه، همان جوابِ درست را بدهد». این روش در درس ۴.۵ کامل می‌شود.

ایده مبهم، در سرت بنویسش spec ورودی · خروجی · قاعده «تمام شد» · بیرونِ دامنه بشکنش مراحل قدم‌های کوچک (۲.۵) بیشتر آدم‌ها از ایده مستقیم به کارکردن می‌پرند و وسطش گم می‌شوند. تکه‌ی وسط ارزان‌ترین قسمت کار است و بیشترین وقت را نجات می‌دهد.
از ایده تا مراحل. spec پلی است که بدون آن، مستقیم از ابهام به کار می‌پری.
۲.۴.۴

کوچک نگه‌داشتن دامنه

رایج‌ترین دلیل شکستِ اولین پروژه‌ها این نیست که سخت‌اند. این است که بزرگ‌اند.

و بزرگ‌شدن معمولاً بی‌سروصدا اتفاق می‌افتد: «حالا که دارم این را می‌سازم، بگذار این را هم اضافه کنم…» — هر بار منطقی به نظر می‌رسد و دفعه‌ی دهم دیگر نمی‌دانی کجای کاری.

دو ابزار ساده:

این همان چیزی است که در ماژول ۹ به‌عنوان معیار انتخاب پروژه‌ی پایانی برمی‌گردد: کوچک، واقعی، مالِ خودت.

۲.۴.۵

نمونه: spec کار ۰.۱۰ اگر از اول می‌نوشتیم

در فصل ۰.۱۰ درخواست را آماده به تو دادیم. حالا ببینیم spec‌اش چه شکلی بود:

حالا نگاه کن به تکه‌ی «تمام شد»: این دقیقاً همان سه چیزی است که در بخش ۰.۱۰.۴ گفتیم بگرد. یعنی آن راستی‌آزمایی، در واقع همین spec بود که از قبل نوشته شده بود — تو فقط نمی‌دانستی اسمش این است.

نکته‌ی طلایی spec را با ایجنت بنویس، ولی نه با «برایم spec بنویس». بگو «من این را می‌خواهم — چه چیزهایی هست که مشخص نکرده‌ام؟» فهرستی که می‌گیری، دقیقاً همان ابهام‌هایی است که اگر الان جوابشان را ندهی، وسط کار غافلگیرت می‌کنند. این همان مخالف‌خوانی فصل ۲.۳ است، روی spec.
ضدالگو نوشتن یک spec ده‌صفحه‌ای که همه‌ی حالت‌ها را پیش‌بینی کند. آن spec نوشته نمی‌شود، یا اگر نوشته شود کسی نمی‌خواندش. نصف صفحه که «تمام شد» را روشن تعریف کند، از ده صفحه‌ی کامل بهتر است — چون نوشته می‌شود و به کار می‌رود.

تمرین (فکری)

برای یکی از سه کارِ بالای بک‌لاگت یک spec یک‌صفحه‌ای بنویس. همان کاری که در فصل ۲.۲ برایش ابزار انتخاب کردی.

هر پنج تکه را بنویس. روی دو تکه بیشتر وقت بگذار: «تمام شد» و «بیرونِ دامنه».

بعد آن را به ایجنت بده و بپرس «چه چیزی را مشخص نکرده‌ام؟» — و جوابش را به spec اضافه کن.

پاسخنامه — یک نمونه‌ی خوب را ببین

ورودی: فایل CSV سفارش‌ها که هر دوشنبه از پنل می‌گیرم؛ ستون‌ها: تاریخ، مشتری، محصول، تعداد، وضعیت.

خروجی: یک فایل متنی در پوشه‌ی گزارش‌ها، با نام هفته-YYYY-MM-DD.txt.

قاعده‌ها: فقط ردیف‌های «تحویل‌شده» حساب شوند · جمع به تفکیک محصول · ردیف‌هایی که تاریخشان خوانده نمی‌شود جدا فهرست شوند.

تمام شد یعنی: «روی فایل هفته‌ی گذشته که خودم دستی حسابش کرده‌ام، همان سه عدد را بدهد و آن دو ردیف تاریخِ خراب را هم پیدا کند.»

بیرونِ دامنه: فرستادن گزارش برای کسی · مقایسه با هفته‌های قبل · مرتب‌کردن خود فایل ورودی.

ابهامی که ایجنت پیدا کرد: «مرجوعی‌ها چه می‌شوند؟» — اصلاً به آن فکر نکرده بودم. اضافه شد به قاعده‌ها.

چرا این جواب خوب است: «تمام شد» به یک نمونه‌ی واقعی با جوابِ معلوم وصل است، و بند آخر نشان می‌دهد spec واقعاً بازبینی شده.

ذخیره شد