منطق ایجنت‌ها › M3 — ابزار در عمل
۳.۳ فرّار تدریسی ~۳۵ دقیقه

Permission و بازبینی کار

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

در یک نگاه

این فصل فرّار است

نام حالت‌ها و شکل پنجره‌ها عوض می‌شود. منطقِ سه‌سطحی و قاعده‌های «هرگز خودکار تأیید نکن» پایدارند. رفرنس رسمی پایین همین فصل است.

آخرین به‌روزرسانی: ۱۴۰۵/۰۵/۰۴

۳.۳.۱

permission چیست و چه چیزی را تأیید می‌کنی

در فصل ۱.۲ فهمیدی چرا اصلاً permission وجود دارد: مدل خودش اجرا نمی‌کند، درخواست می‌دهد و برنامه اجرا می‌کند. آن فاصله، جای دروازه است.

و سیستمِ واقعی سه‌سطحی است:

و یک تفاوت مهم در «بله، دیگر نپرس»: برای دستورها معمولاً دائمی ثبت می‌شود (برای همان دستور در همان پروژه)، ولی برای تغییر فایل تا آخر همان session. یعنی تأییدِ دستور سنگین‌تر از آن است که به نظر می‌رسد.

۳.۳.۲

قبل از «بله» بخوان

حالا مهم‌ترین واقعیتِ این فصل، و دلیلی که permission را جدی می‌کند:

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

این تفاوت را با فصل ۱.۴ کنار هم بگذار: آنجا گفتیم فایل قانون «context است، نه پیکربندی اجباری» — یعنی ممکن است رعایت نشود. اما permission برعکس است: یک لایه‌ی واقعی است که بیرون از تصمیم مدل می‌ایستد.

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

و در لحظه‌ی خودِ پنجره، سه چیز را بخوان:

۳.۳.۳

دیدن تغییرات

وقتی می‌خواهد فایلی را عوض کند، معمولاً تغییرات را نشانت می‌دهد — چه خطی حذف می‌شود و چه خطی اضافه.

و اینجا چیزی هست که ارزش دانستن دارد: لازم نیست کد را بلد باشی تا این را بخوانی. سه چیز را نگاه کن:

و اگر تغییرات زیاد بود و مطمئن نبودی، بگو «اول توضیح بده هر تغییر چه می‌کند». این همان راستی‌آزماییِ بدون کد است که درس ۴.۵ کاملش می‌کند.

۳.۳.۴

این کدی که می‌بینم چیست

در فصل ۰.۳ گفتیم کد می‌بینی ولی کد نمی‌نویسی. اینجا حداقلی که برای شناختن لازم است — نه نوشتن.

وقتی دستوری می‌بینی، فقط این را تشخیص بده: می‌خواند، یا عوض می‌کند؟

و ساده‌ترین راه اگر مطمئن نیستی: بپرس. «این دستور دقیقاً چه می‌کند و اگر اجرا شود چه چیزی عوض می‌شود؟» — پرسیدن ارزان‌تر از برگرداندن است.

۳.۳.۵

dependency و requirement: چرا می‌خواهد چیزی نصب کند

گاهی وسط کار می‌گوید باید چیزی نصب شود. این طبیعی است: برای بعضی کارها ابزار جانبی لازم است — مثلاً برای خواندن یک قالب خاص فایل.

به آن چیزها dependency می‌گویند: چیزی که کارِ تو به آن وابسته است.

سه سؤال قبل از «بله»:

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

۳.۳.۶

چه چیزی را هرگز خودکار تأیید نکن

حالت‌هایی هست که پنجره‌های اجازه را کم می‌کنند یا کلاً برمی‌دارند. این‌ها وسوسه‌انگیزند چون کار را سریع‌تر می‌کنند. فهرستِ چیزهایی که هیچ‌وقت نباید بدون نگاه رد شوند:

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

ترجمه‌ی عملی‌اش برای تو: روی کامپیوتر کاری‌ات، آن حالت را روشن نکن. اگر کار زیاد کند شده، به‌جایش کار را به زمین بازی ببر (فصل ۰.۹).

نکته‌ی طلایی یک قاعده‌ی ساده که تقریباً همه‌ی خطاهای جدی را می‌گیرد: «خواندن» را آزاد بگذار، «نوشتن» را همیشه ببین، و «پاک‌کردن» را هیچ‌وقت خودکار نکن. با همین سه خط، هم سرعت داری هم محافظت.
ضدالگو زدنِ «بله، دیگر نپرس» برای اینکه پنجره‌ها اذیت می‌کنند. مخصوصاً برای دستورها، که آن تأیید معمولاً دائمی ثبت می‌شود — یعنی یک تصمیمِ خسته در ساعت یازده شب، تا همیشه اعمال می‌شود. اگر پنجره‌ها زیادند، یعنی کار را جای اشتباهی انجام می‌دهی، نه اینکه محافظت زیاد است.

تمرین (فکری)

سه پیشنهاد زیر را ببین و بگو کدام را تأیید می‌کنی و چرا. برای هرکدام سه سؤال بخش ۳.۳.۲ را بگذار: چه ابزاری، روی چه چیزی، برگشت‌پذیر است؟

  1. «می‌خواهم فایل‌های داخل پوشه‌ی نمونه‌ها/اسناد/ را بخوانم
  2. «می‌خواهم یک فایل تازه به اسم گزارش.md در همین پوشه بسازم
  3. «می‌خواهم یک دستور اجرا کنم که همه‌ی فایل‌های با پسوند .txt را در پوشه‌ی خانگی‌ات تغییر نام بدهد
پاسخنامه — سه جواب و دلیلشان

۱. تأیید. ابزار: خواندن. روی: پوشه‌ی نمونه‌ها، داخل پوشه‌ی کار. برگشت‌پذیر: خواندن چیزی را عوض نمی‌کند، پس بحث برگشت مطرح نیست. بی‌خطر.

۲. تأیید. ابزار: نوشتن. روی: یک فایل تازه در همان پوشه. برگشت‌پذیر: بله — فایل تازه چیزی را از بین نمی‌برد و پاک‌کردنش راحت است. ولی تغییرات را می‌بینم که مطمئن شوم فایل موجودی را بازنویسی نمی‌کند.

۳. رد. سه علامت خطر با هم: بیرون پوشه‌ی کار است (پوشه‌ی خانگی) · تغییر گروهی است (همه‌ی فایل‌ها) · و برگشت‌ناپذیر است، چون تغییر نام گروهی را به‌راحتی نمی‌شود برگرداند.

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

چرا این جواب خوب است: مورد سوم را نه به‌خاطر «حس بد» رد کرده، بلکه با سه معیار مشخص. و جای رد‌کردنِ خالی، یک درخواست جایگزین گذاشته.

برای عمق بیشتر

ذخیره شد