پیشنهاد بهبود تمرین

پیش از پیشنهاد بهبود تمرین چه نکاتی را باید در نظر بگیریم


خب، موردی پیدا کرده‌اید که دوست دارید در یک تمرین بهترش کنید. اول از همه، ممنون که اهمیت می‌دهید و وقت گذاشتید تا به ما بگویید! 💙

هنگام تغییر یک تمرین، چند نکته هست که باید در نظر بگیرید، و این نکته‌ها برای «تمرین‌های یادگیری» (آن‌هایی که مباحث را در برنامه‌ی درسی آموزش می‌دهند) و «تمرین‌های عملی» (بقیه) کمی متفاوت است. در ادامه به این تفاوت‌ها می‌پردازیم.

اما اول از همه، چند نکته‌ی کلی هست که باید در نظر بگیرید.

تغییر یک تمرین پیامدهایی دارد

تغییر یک تمرین پیامدهای نسبتاً زیادی دارد:

  1. افزودن Testهای جدید ممکن است راه‌حل‌های موجود را خراب کند. این باعث می‌شود کار هزاران نفر قدیمی شود، و اگر Testهای اضافه هیچ Bug موجودی را نشان ندهند، برایشان ناراحت‌کننده است.
  2. باید کار همه را دوباره Test کنیم، که هم هزینه‌ی زیست‌محیطی دارد و هم هزینه‌ی مالی.
  3. یک یا چند نگهدارنده باید وقت بگذارند و تغییرات را بررسی کنند، یعنی در آن مدت نمی‌توانند بهبودهای دیگری در مسیر ایجاد کنند.

به همه‌ی این دلایل، مراقب هستیم فقط تمرین‌هایی را تغییر دهیم که سود مشخص و قوی‌ای داشته باشند.

از گرایش به آنتروپی بپرهیزید

هدف مجموعه‌های Test تمرین‌ها، جامع بودن درباره‌ی همه‌ی حالت‌های ممکن نیست. تمرین‌های ما نرم‌افزار تولیدی نیستند و قرار هم نیست موارد استفاده‌ی دنیای واقعی را تقلید کنند. آن‌ها به‌عنوان مسئله‌های کوچک تمرینی طراحی شده‌اند تا به شما کمک کنند تسلط بر یک زبان برنامه‌نویسی پیدا کنید. بنابراین آگاهانه از پوشش همه‌ی حالت‌های مرزی، الزام اعتبارسنجی ورودی زیاد، یا دیگر دغدغه‌های مشابه دنیای واقعی پرهیز می‌کنیم. اگر بهبود پیشنهادی شما برای گرفتن یک حالت مرزی یا بررسی اعتبارسنجی ورودی باشد، بعید است پذیرفته شود مگر اینکه تفاوت چشمگیری در تمرین ایجاد کند.

تمرین‌های یادگیری

تمرین‌های یادگیری با یک هدف طراحی شده‌اند: آموزش مفاهیم. همه‌ی تغییرات یک تمرین، پیش و بیش از هر چیز بر اساس اینکه آموزش مفاهیم را بهتر می‌کنند یا نه ارزیابی می‌شوند.

تمرین‌های یادگیری (به‌ویژه) قرار نیست Testهایشان جامع باشد. آن‌ها همچنین اغلب می‌توانند کمی ساختگی یا دیرفهم باشند تا از مفاهیمی که دانشجو هنوز یاد نگرفته استفاده نکنند، یا اینکه دانشجو را زیر بار زیادی نبرند.

اگر تغییر پیشنهادی شما بالقوه بتواند از یادگیری مفهوم منحرف کند، احتمالاً رد می‌شود. اگر تغییر یادگیری را آسان‌تر کند، با جدیت بررسی می‌شود. اگر جایی میان این دو باشد، ممکن است پذیرفته شود، اما بعید است در اولویت قرار گیرد.

تمرین‌های عملی

نکته‌ی اصلی درباره‌ی تمرین‌های عملی این است که تقریباً همه‌ی آن‌ها در یک مخزن مرکزی قرار دارند (معروف به «Problem Specifications»). بنابراین ایجاد تغییر در یک تمرین، اثرهای زنجیره‌ای روی همه‌ی مسیرها دارد. این یعنی یک تغییر خوب قدرتمندتر است، چون به همه‌ی زبان‌ها کمک می‌کند. اما بار تغییر را هم بیشتر می‌کند، چون چند نگهدارنده از مسیرهای مختلف باید با تغییر موافقت کنند تا پذیرفته شود، و سپس نگهدارندگان هر زبان باید تغییرات را به پایین‌دست، در مسیرهای خودشان، منتقل کنند.

تغییرات در تمرین‌ها می‌تواند به این معنا هم باشد که مفاهیمی که در برنامه‌های درسی به آن‌ها پیوند خورده‌اند مبهم‌تر شوند، یا تمرین‌ها برای حل شدن به قابلیت‌های بیشتری نیاز پیدا کنند، و این جای باز شدن قفلشان را تغییر می‌دهد. این مورد هم باید پیش از پذیرفته شدن تغییرات، در همه‌ی مسیرها در نظر گرفته شود.

با اینکه سازوکارهایی داریم که فقط بعضی مسیرها موارد Test مشخصی داشته باشند، معمولاً آن را توصیه نمی‌کنیم، چون این دوشاخه شدن می‌تواند برای نگهدارندگان و دانشجویان سردرگمی ایجاد کند. پس هنگام پیشنهاد تغییر در تمرین‌های عملی، لطفاً تصویر بزرگ‌تر را در همه‌ی مسیرها در نظر بگیرید.

چگونه تغییراتتان پذیرفته شود

با اینکه دلایل زیادی برای نپذیرفتن پیشنهادها وجود دارد، اغلب اوقات افراد ایده‌های عالی‌ای مطرح می‌کنند که ما آن‌ها را می‌پذیریم!

ما تقریباً همیشه برای تغییرات در جمله‌بندی که به شفافیت اضافه می‌کنند هم باز هستیم، به‌ویژه در تمرین‌های یادگیری.

برای اینکه پیشنهادهایتان بهترین شانس تأیید شدن را داشته باشند، لطفاً پیشنهادهایتان را طوری بنویسید که نشان دهد موارد زیر را در نظر گرفته‌اید:

  • بهبود ملموسی که این تغییر ایجاد می‌کند (ترجیحاً با مثال‌های Code از اینکه تغییرتان چه چیزی را فعال می‌کند/متوقف می‌کند).
  • تأثیر بر راه‌حل‌های موجود، و اینکه چرا این کار ارزشش را دارد.
  • هر تغییری در مفاهیم آموزش‌داده‌شده یا استفاده‌شده.
  • درکی از اینکه چرا اوضاع ممکن است این‌طور باشد. (لطفاً نوشته‌ی ما درباره‌ی حصار چسترتون را بخوانید.)

و لطفاً یادتان باشد که نظرها را به‌عنوان نظر و واقعیت‌ها را به‌عنوان واقعیت بیان کنید. این معمولاً به سازنده‌ترین گفتگوها می‌انجامد.

باز هم ممنون که وقت گذاشتید و پیشنهادی دادید و این سند را خواندید!