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

تجزیه‌ی مسئله و نقشه‌ی راه

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

در یک نگاه

۲.۵.۱

چرا کار بزرگ شکست می‌خورد

در فصل ۱.۲ حلقه‌ی ایجنت را دیدی و در ۱.۳ دیدی که context با هر دور بزرگ‌تر و شلوغ‌تر می‌شود. حالا این دو را کنار هم بگذار.

وقتی یک کار بزرگ را یک‌جا می‌سپاری، سه چیز اتفاق می‌افتد:

سومی مهم‌ترین است. مشکل کار بزرگ این نیست که سخت است؛ این است که تا آخرش نمی‌فهمی درست پیش می‌رود یا نه.

۲.۵.۲

شکستن به مراحل

معیارِ یک مرحله‌ی خوب ساده است:

به‌خاطر بسپار هر مرحله باید خروجی‌ای داشته باشد که بتوانی نگاهش کنی و بگویی درست است یا نه. اگر مرحله‌ای خروجیِ قابل‌دیدن ندارد، مرحله نیست — بخشی از مرحله‌ی بعدی است.

مثال. کار: «از فایل سفارش‌ها یک گزارش هفتگی بساز.»

شکستن بد: ۱) فایل را بخوان ۲) پردازشش کن ۳) گزارش بده. قدم دوم خروجیِ قابل‌دیدن ندارد — «پردازش» یعنی چه؟

شکستن خوب:

  1. فایل را بخوان و بگو چند ردیف دارد و ستون‌هایش چیست. ← می‌توانم ببینم درست خوانده یا نه.
  2. ردیف‌های مشکل‌دار را فهرست کن (تاریخ خراب، خانه‌ی خالی). ← می‌توانم ببینم همان‌هایی را پیدا کرده که خودم می‌دانم هست.
  3. جمع به تفکیک محصول را بده، فقط برای ردیف‌های سالم. ← می‌توانم یکی‌اش را دستی چک کنم.
  4. خروجی را در قالب نهایی بنویس.

حالا اگر عددِ آخر غلط باشد، دقیقاً می‌دانی کدام قدم را باید نگاه کنی.

۲.۵.۳

کشیدن نقشه از A به B

روشی که برای هر کاری جواب می‌دهد، و عمداً از آخر شروع می‌شود:

  1. B را بنویس — وضعیت نهایی. این همان «تمام شد» spec است.
  2. A را بنویس — همین حالا چه داری.
  3. از B رو به عقب بیا: «برای اینکه B ممکن شود، بلافاصله قبلش چه چیزی باید آماده باشد؟» و همین را تکرار کن تا به A برسی.

چرا از آخر؟ چون وقتی از اول جلو می‌روی، کارهایی می‌نویسی که به نظر لازم می‌آیند. وقتی از آخر عقب می‌آیی، فقط کارهایی می‌نویسی که واقعاً برای رسیدن به B ضروری‌اند. این تفاوت معمولاً نصفِ فهرست را حذف می‌کند.

A الان ۱ بخوان و بشمار قابل‌بررسی ۲ مشکل‌دارها قابل‌بررسی ۳ جمع بزن قابل‌بررسی B گزارش نهایی ولی نقشه را از B به عقب می‌کشی، نه از A به جلو هر قدم یک خروجی دارد که می‌شود نگاهش کرد — پس خطا همان‌جا پیدا می‌شود، نه آخر کار.
نقشه‌ی مسیر. اجرا از راست به چپ است، ولی طراحی از چپ به راست.
۲.۵.۴

تشخیص وابستگی: چه چیزی باید اول باشد

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

برای هر مرحله یک سؤال: «برای انجام این، چه چیزی باید از قبل آماده باشد؟» هر چیزی که در جواب آمد، باید قبلش بیاید.

دو تله‌ی رایج:

و اگر دو مرحله به هم وابسته نیستند، ترتیبشان مهم نیست — آن را بگذار که ارزان‌تر است، تا زودتر یاد بگیری.

۲.۵.۵

کوچک‌ترین قدمی که می‌شود همین حالا برداشت

نقشه که آماده شد، یک خطر می‌ماند: نگاه‌کردن به نقشه و شروع‌نکردن.

پس یک سؤال آخر: کوچک‌ترین کاری که همین حالا می‌شود انجام داد و چیزی به من یاد می‌دهد چیست؟

دقت کن: نه «اولین مرحله»، بلکه کوچک‌ترین کاری که یاد می‌دهد. گاهی این یعنی رفتن سراغ پرریسک‌ترین قسمت با یک نمونه‌ی کوچک، فقط برای اینکه بفهمی اصلاً شدنی است یا نه.

مثال: اگر کل نقشه‌ات به این بستگی دارد که ایجنت بتواند آن PDF فارسی را بخواند، همان را اول امتحان کن — با یک صفحه. اگر نشد، کل نقشه عوض می‌شود و بهتر است الان بفهمی، نه بعد از سه مرحله. (اینکه چه چیزی روی فارسی کار می‌کند، درس ۴.۲ است.)

این همان چیزی است که ریسک را جلو می‌آورد: اول چیزی را امتحان کن که اگر جواب ندهد، همه‌چیز عوض می‌شود.

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

تمرین (فکری)

spec درس قبل را به مراحل بشکن و ترتیبشان را توجیه کن.

از B شروع کن و عقب بیا. برای هر مرحله بنویس خروجی قابل‌بررسی‌اش چیست — اگر نتوانستی بنویسی، آن مرحله باید با بعدی یکی شود.

بعد وابستگی‌ها را مشخص کن، و آخرش بگو کوچک‌ترین قدمی که همین حالا می‌شود برداشت کدام است — و چرا همان.

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

B: فایل گزارش هفتگی در پوشه‌ی گزارش‌ها.

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

مراحل با خروجی: ۱) تعداد ردیف و اسم ستون‌ها را بگو (می‌بینم درست خوانده) · ۲) ردیف‌های مشکل‌دار را فهرست کن (با آن دو ردیفی که خودم می‌دانم مقایسه می‌کنم) · ۳) جمع به تفکیک محصول (یکی را دستی چک می‌کنم) · ۴) قالب نهایی.

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

کوچک‌ترین قدم: «مرحله‌ی ۱ روی فایل هفته‌ی گذشته. پنج دقیقه طول می‌کشد و به من می‌گوید آیا آن ستون تاریخ اصلاً درست خوانده می‌شود یا نه — که کل بقیه به آن بستگی دارد.»

چرا این جواب خوب است: وابستگی غیرفنی واقعاً پیدا شده، و کوچک‌ترین قدم به خاطر ریسک انتخاب شده نه به خاطر ترتیب.

ذخیره شد