در آغاز سپتامبر ۲۰۲۱، Exercism v3 سرانجام منتشر شد. Angelika Tyborska یکی از نگهدارندگان کلیدی است که به ما کمک کرد کار را به سرانجام برسانیم. Angelika علاوه بر اینکه همسازندهی تمرینهای یادگیری و سیلابس Elixir بوده، در تمام مسیر توسعهی v3 هم صدایی کلیدی داشت و در طول فرایند ساخت، ایدهها و بینشهای خود را به آن افزود. او یکی از مشارکتکنندگان کلیدی Exercism است.
در این ارائهی ویدیویی، Angelika برای ما توضیح میدهد که v3 برای حل چه مشکلاتی طراحی شده بود، چه چیزهای کلیدی به پلتفرم اضافه شده و همهچیز چطور در کنار هم جا میگیرد، و در این مسیر تحلیلگرها، بازنماگرها و تمرینهای یادگیری تازه را بررسی میکند.
متن پیادهشده
تاریخچهی Exercism
Exercism مدتهاست که وجود دارد. نخستین بار در سال ۲۰۱۳، Katrina Owen آن را بهعنوان ابزاری برای دانشآموزانش ساخت. در v1، Exercism فقط مجموعهای از تمرینهای عملی جذاب بود. در v2، به پلتفرمی برای مربیگری کد بهصورت رایگان تبدیل شد.
v3 🚀 ۰۱.۰۹.۲۰۲۱
در اول سپتامبر، نسخهی ۳ Exercism منتشر شد.
در این ویدیو، تغییرات v3 را برایتان توضیح میدهم، میگویم چرا این تغییرات انجام شدند و چطور تجربهی شما را در Exercism بهتر میکنند.
دربارهی من
این منم [تصویری که در ۰:۳۸ نمایش داده میشود]. اسم من Angelika است. من بههمراه Tim، همنگهدارندهی دیگرم، ابزارها و بیش از ۳۰ تمرین یادگیری را برای مسیر Elixir در Exercism v3 ساختیم. باور دارم که Exercism با شکل تازهاش میتواند به بهترین ابزار برای یادگیری زبانهای برنامهنویسی جدید تبدیل شود.
چه چیزهایی در v3 تازه است؟
چه چیزهایی در Exercism v3 تازه است؟ پاسخ کوتاه: خیلی زیاد.
همهی تغییرات عمدهای که در v3 معرفی شدهاند، برای پرداختن به بزرگترین مشکلاتی هستند که افراد در v2 تجربه میکردند.
مشکلات v2
سه مشکل کلیدی هست که v3 به آنها میپردازد.
یک: راهاندازی اولیهی دشوار، دو: تمرین کد بدون یادگیری، سه: زمان طولانی پاسخ مربی.
مشکل ۱. راهاندازی اولیهی دشوار
مشکل شمارهی یک: راهاندازی اولیهی دشوار. برای شروع کار با Exercism، باید CLI مربوط به Exercism و زبان برنامهنویسیای که میخواهید امتحان کنید را نصب کنید و در ترمینال احساس راحتی داشته باشید. باید ویرایشگرتان را طوری تنظیم کنید که نحوهی نگارش زبان جدید را رنگآمیزی کند و به همین ترتیب. برای توسعهدهندگان کارکشته، همهی این راهاندازیها وقتگیر و آزاردهنده است. اما برای تازهکارها، میتواند مانعی باشد که عبور از آن ناممکن است.
راهحل: بگذاریم افراد در مرورگر کد بنویسند. هیچ راهاندازی اولیهای لازم نیست.
برای ممکنشدن این کار، Exercism اکنون یک ویرایشگر وب دارد و هر زبان برنامهنویسی اجراکنندهی تست مخصوص به خود را دارد که مأمور اجرای تستها برای تمرینهای Exercism است.
ویرایشگر وب
این ویرایشگر وب است [تصویری که در ۲:۲۵ نمایش داده میشود]. دو پنل دارد: کد منبع در سمت چپ و دستورها و مجموعهی تست در سمت راست.
هیچ ویژگی پرزرقوبرقی ندارد، چون هدفش جایگزینی برای ابزارهای محبوب شما نیست. هدفش این است که شما بتوانید نصب همهی ابزارها و وابستگیهای لازم را به بعد موکول کنید، تا زمانی که با زبان برنامهنویسی جدید راحتتر شده باشید و بدانید که میخواهید کار با آن را ادامه دهید.
ویرایشگر وب کاملاً اختیاری است. میتوانید همچنان از CLI استفاده کنید و با ابزارهای محبوبتان روی کامپیوتر خودتان کار کنید.
اجراکنندههای تست
برای اینکه ویرایشگر وب قابل استفاده باشد، باید راهی برای اجرای تستها روی راهحلی که در مرورگر مینویسید وجود داشته باشد. این کار بر عهدهی اجراکنندهی تست است.
هر زبان در Exercism اجراکنندهی تست خودش را دارد. اجراکنندهی تست مسئول گزارش نتایج تست است، اما تنها کارش این نیست. باید بدنهی تست را هم استخراج کند تا بدانید چه کدی در حال اجراست و بتوانید پیام خطا را تفسیر کنید، و همچنین خروجی تست را بگیرد تا بتوانید کدتان را در مرورگر با puts، print، console.log یا هر تابع چاپی که زبانتان ارائه میدهد دیباگ کنید.
اجراکنندههای تست برای حل تمرینها در مرورگر حیاتی هستند، اما روی راهحلهایی که از طریق CLI ارسال میشوند هم استفاده خواهند شد. وقتی راهحلهای اعضای جامعه را برای یک تمرین مرور میکنید، یا وقتی به دانشآموزی مربیگری میکنید، میتوانید ببینید که راهحل تستها را پاس میکند یا نه، بدون اینکه لازم باشد آن را دانلود و بهصورت محلی اجرا کنید.
مشکل ۲. تمرین کد بدون یادگیری
مشکل شمارهی دو: Exercism پلتفرمی برای تمرین کد است، اما هیچ منبعی برای یادگیری یک زبان خاص از صفر ارائه نمیداد. اول باید این کار را جای دیگری انجام میدادید.
تمرینهای Exercism طوری طراحی شده بودند که جذاب و چالشبرانگیز باشند، اما گاهی حتی سادهترین آنها هم برای شروع یادگیری یک زبان برنامهنویسی جدید بیش از حد دشوارند. این موضوع وقتی بیشتر خودش را نشان میدهد که بخواهید زبانی با نحوهی نگارش کاملاً متفاوت یاد بگیرید یا حتی زبانی که از پارادایم برنامهنویسی دیگری استفاده میکند.
راهحل: یادگیری را در کنار تمرین ارائه کنیم.
با اضافهشدن سیلابس و تمرینهای یادگیری، Exercism اکنون به ابزاری عالی برای شیرجهزدن مستقیم در یک زبان برنامهنویسی جدید تبدیل شده است.
سیلابس
سیلابس چیست؟ سیلابس درختی از مفاهیم است که هر زبان برنامهنویسی را تشکیل میدهند. سیلابس برای هر مسیر در Exercism منحصربهفرد است، چون هر زبان برنامهنویسی متفاوت است و مفاهیم متفاوتی دارد.
مفاهیم به یکدیگر وابستهاند و شاخههای گوناگون درخت را میسازند. برای اینکه قفل مفهوم بعدی باز شود، باید مفهوم قبلی در آن شاخه را یاد بگیرید.
برای نمونه، این آغاز سیلابس Elixir است [تصویری که در ۵:۱۰ نمایش داده میشود]. با مفهومی به اسم «basics» شروع میشود که اینها را پوشش میدهد: چطور یک ماژول تعریف کنیم، چطور یک تابع نامدار تعریف کنیم و مستندات کتابخانهی استاندارد را کجا پیدا کنیم. این دانش برای هر تمرین Exercism لازم است. برای باز شدن قفل هر مفهوم دیگری باید basics را یاد بگیرید. میتوانید مثلاً دربارهی «مقادیر منطقی» یاد بگیرید و وقتی مقادیر منطقی را دانستید، میتوانید دربارهی عبارت cond یاد بگیرید و به همین ترتیب.
برای اینکه تصویری کلی داشته باشید، این سیلابس کامل Elixir است [تصویری که در ۶:۱۶ نمایش داده میشود]. در حال حاضر بیش از ۵۰ مفهوم دارد، اما هنوز باید گسترش پیدا کند.
در بالای آن، مفاهیمی مثل رشتهها، لیستها، مپها و تاپلها را میبینید. در میانه: ماژول Enum، عبارات باقاعده، استراکتها و نوشتن typespec. و در انتها: پروتکلها، فرایندها و تسکها.
تمرینهای یادگیری
شما مفاهیم سیلابس را با حل تمرینهای یادگیری یاد میگیرید. تمرینهای یادگیری با تمرینهای عملی فرق دارند. این تمرینها برای آموزش مفاهیم برنامهنویسی به دانشآموزانی طراحی شدهاند که اصلاً زبان برنامهنویسی موردنظر را نمیشناسند، اما حداقل یک زبان دیگر و مفاهیم پایهی برنامهنویسی را میدانند.
مقدمه
هر تمرین یادگیری با یک مقدمه شروع میشود. مقدمه اطلاعات پایهای دربارهی مفاهیمی که این تمرین آموزش میدهد ارائه میکند. بیشتر تمرینهای یادگیری یک مفهوم واحد را آموزش میدهند، اما استثنا هم هست.
این نمونه، مقدمهای دربارهی مپهای Elixir را نشان میدهد [تصویری که در ۷:۱۲ نمایش داده میشود]. توضیح میدهد که مپها چه هستند، چطور یک مپ تعریف کنیم، چطور به یک مقدار در مپ دسترسی پیدا کنیم و به همین ترتیب. چند نمونهکد هم دارد تا نحوهی نگارش جدید را نشان دهد، اما آنقدر زیاد نیست که بتوانید فقط با کپیپیست کردن مقدمه تمرین را حل کنید.
دستورها
سپس دستورها میآیند. دستورهای تمرینهای یادگیری به تسکهای کوچک تقسیم شدهاند. این تسکها طوری طراحی شدهاند که دانشآموز را به استفاده از مهمترین بخشهای هر مفهوم ترغیب کنند.
برای نمونه، تمرین یادگیریای که مپها را آموزش میدهد، از دانشآموز میخواهد که یک مپ بسازد، سپس مقداری را از مپ بخواند، بعد مقداری را در مپ بهروزرسانی کند، بعد همهی کلیدهای مپ را بگیرد و به همین ترتیب.
هر تمرین یادگیری یک داستان دارد، اما این داستان خیلی مهم نیست. وجود دارد تا مجبور نباشید از مقادیر بیمعنایی مثل «foo bar» و «1 2 3» استفاده کنید، اما نقش مهمی در تمرین بازی نمیکند، برخلاف تمرینهای عملی.
راهنماییها
هر تسک یک فهرست کوچک از راهنماییها دارد، برای وقتی که دانشآموز گیر میکند. راهنماییها اغلب نشان میدهند که در هر تسک باید از کدام تابع خاص استفاده کرد و شما را به مستندات آن تابع هدایت میکنند.
تمرین کردن مفاهیم
اما حل یک تمرین یادگیری بهتنهایی برای تسلط واقعی بر مفهوم کافی نیست. باید آن را تمرین هم بکنید. به همین دلیل همهی تمرینهای عملیای را که از قبل در v2 وجود داشتند بررسی کردیم و چند مورد را انتخاب کردیم که بتوان با آنها هر مفهوم را تمرین کرد.
یک مفهوم واحد در درخت اینطور به نظر میرسد [تصویری که در ۹:۰۱ نمایش داده میشود]. نقطهها نمایندهی تمرینها هستند. اولین نقطه با آیکون لامپ، یک تمرین یادگیری است و نقطههای دیگر تمرینهای عملی هستند.
یک مفهوم بعد از حل چند تمرین اینطور به نظر میرسد [تصویری که در ۹:۳۷ نمایش داده میشود]. توجه کنید که بعضی از تمرینهای عملی این مفهوم هنوز قفلاند، با اینکه تمرین یادگیری کامل شده است. دلیلش این است که تمرینهای عملی به تمرین دادن یک مفهوم واحد محدود نیستند. ممکن است لازم باشد مفاهیم بیشتری جز اتمها [مفهومی که در تصویر نشان داده شده] یاد بگیرید تا قفل آن تمرینها باز شود.
تمرینهای یادگیری برای کسانی که از قبل به یک زبان مسلطاند قرار است پیشپاافتاده باشند. اما نگران نباشید، کاملاً اختیاریاند. میتوانید از حالت یادگیری به حالت تمرین تغییر دهید، که دسترسی فوری به همهی تمرینهای عملی جذاب را بدون نیاز به گذراندن سیلابس به شما میدهد.
سیلابس = تلاشی عظیم
یک نکتهی مهم که باید برای مدیریت انتظاراتتان بگویم این است که توسعهی سیلابس تلاشی بسیار بسیار عظیم است. هر مسیری نگهدارندگان فعال کافی ندارد که بتواند همین حالا سیلابسی آماده داشته باشد.
در زمانی که این ویدیو را ضبط میکنم [۴ سپتامبر ۲۰۲۱]، تمرینهای یادگیری فقط در این زبانها در دسترساند: Common Lisp، C#، Elm، Elixir، F#، Go، Java، JavaScript، Python، Ruby، Rust و Swift. مسیر Julia هم بهزودی سیلابس خود را راهاندازی میکند.
مشکل ۳. زمان طولانی پاسخ مربی
مشکل شمارهی سه: زمان طولانی پاسخ مربی. هر مسیری مربی کافی ندارد. بعضی مسیرها آنقدر مربی کم دارند که زمان انتظار برای مربیگری میتواند تا یک ماه طول بکشد. این موضوع همیشه برای دانشآموزان بسیار ناامیدکننده بوده است. این مسئله آنقدر برای Exercism اساسی است که از سه زاویهی متفاوت به آن پرداخته میشود.
بازخورد خودکار
راهحل شمارهی ۱ ارائهی بازخورد خودکار است. بخش زیادی از بازخوردی که مربیها برای دانشآموزان مینویسند تکراری است. اینکه بتوانیم اشتباههای رایج را بهصورت خودکار تشخیص دهیم و مستقیم به دانشآموز گزارش دهیم، همهچیز را عوض میکند.
دریافت بازخورد خودکار دربارهی اشتباههای رایج به دانشآموز اجازه میدهد پیش از درخواست مربیگری راهحلش را بهتر کند، که کار مربی را هم آسانتر میکند. این کار مربیها را از پرداختن به جزئیات خستهکنندهای مثل snake_case در برابر camelCase راحت میکند تا روی اصل راهحل تمرکز کنند. در بعضی موارد، بازخورد خودکار برای راضیکردن دانشآموز کافی است و او حتی درخواست مربیگری هم نمیدهد.
در v3، دو نوع ابزار برای بازخورد خودکار وجود دارد: «تحلیلگرها» و «بازنماگرها».
تحلیلگرها
تحلیلگر ابزاری است که در یک راهحل به دنبال ویژگیهای خاصی میگردد و فهرستی از نظرهای از پیش تعریفشده دربارهی آنچه پیدا کرده را به دانشآموز برمیگرداند. اینکه چه ویژگیهایی، کاملاً به زبان و تمرین خاص بستگی دارد.
برای نمونه، Elixir قرارداد نامگذاری بسیار خاصی برای توابع و متغیرها دارد. یکی از بررسیهایی که تحلیلگر Elixir برای هر تمرین انجام میدهد، بررسی همهی اسمهای متغیرها و توابع است. اگر اسمی پیدا کند که با snake_case نوشته نشده باشد، قرارداد نامگذاری را به دانشآموز یادآوری میکند.
بررسی دیگری که تحلیلگر Elixir میتواند انجام دهد، تشخیص استفاده از یک ماژول خاص است. برای نمونه، این بررسی [تصویری که در ۱۳:۲۰ نمایش داده میشود] که استفادهنکردن از ماژول Enum را بررسی میکند، مخصوص تمرین یادگیری بازگشت است. استفاده از ماژول Enum هدف تمرین یادگیری را بیاثر میکند، پس تحلیلگر به دانشآموز یادآوری میکند که این کار را نکند و بهجایش از بازگشت استفاده کند.
بازنماگرها
دومین ابزاری که به ما در ارائهی بازخورد خودکار در Exercism کمک میکند، بازنماگر است. بازنماگر راهحل را میگیرد و بخشهای غیرضروری را حذف میکند. قالببندی را یکسانسازی میکند، کامنتها و مستندات را حذف میکند و اسمهای توابع و متغیرها را با جانگهدار جایگزین میکند.
خروجی بازنماگر «بازنمایی» نامیده میشود. هر راهحلی که به Exercism ارسال میشود به بازنماگر داده میشود و بازنمایی آن بههمراه راهحل روی پلتفرم ذخیره میشود.
سپس مربیها به رابطی دسترسی خواهند داشت که میتوانند در آن بازنماییهای راهحلهای ارسالشده را مرور کنند. برای هر بازنمایی یکتا، مربی میتواند روی همان بازنمایی بازخورد بگذارد. بعد این بازخورد به هر دانشآموزی که راهحل مشابهی با همان بازنمایی ارسال کند نشان داده میشود. مربی فقط یک بار بازخورد مینویسد و آن بازخورد به همهی کسانی که به آن نیاز دارند میرسد.
خود بازنماگرها برای بعضی زبانها پیادهسازی و مستقر شدهاند، اما در زمانی که این ویدیو را ضبط میکنم [۴ سپتامبر ۲۰۲۱]، رابط مربیها هنوز در پلتفرم وجود ندارد، پس باید کمی صبر کنیم تا این قابلیت کاملاً در دسترس قرار بگیرد.
پرهیز از جلسههای مربیگری ناخواسته
راهحل دیگری برای صفهای طولانی مربیگری، پرهیز از جلسههای مربیگری ناخواسته است. در v2، برای تمرینهای اصلی مربیگری اجباری بود. ارسال یک تمرین اصلی یعنی خودکار درخواست مربیگری میدادید و بدون تأیید مربی نمیتوانستید به تمرین اصلی بعدی بروید. بسیاری از دانشآموزان زبان را با کار کردن روی تمرینهای اصلی یاد میگرفتند، پس به مربیگری نیاز داشتند تا آنها را در مسیر یادگیری هدایت کند.
دیگر اینطور نیست. نقش آموزشی تمرینهای اصلی و تأیید مربی را تمرینهای یادگیری و تحلیلگرها بر عهده گرفتهاند. در v3، مربیگری همیشه اختیاری است و باید صریحاً درخواست شود.
درخواست مربیگری
برای درخواست مربیگری، باید به ۲ پرسش پاسخ دهید: امیدوارید از این مسیر چه چیزی یاد بگیرید؟، و: یک مربی چطور میتواند در راهحلتان به شما کمک کند؟ وقتی مربی از قبل بداند دانشآموز از جلسهی مربیگری چه انتظاری دارد، میتواند درخواستهای مربیگریای را انتخاب کند که بیشترین تناسب را با دانش و سبک مربیگریاش دارند، و این احتمال را بالا میبرد که هر دو طرف از جلسهی مربیگری راضی بیرون بیایند.
صف مربیگری و موردعلاقهها
در صف مربیگری جدید، مربیها میتوانند آمارهایی دربارهی تاریخچهی مربیگری دانشآموز ببینند. میتوانند ببینند کدام دانشآموز هرگز قبلاً مربیگری نشده و ممکن است به بررسی دقیقتری نیاز داشته باشد، و کدام دانشآموز بارها مربیگری شده و میداند که کار چطور پیش میرود.
مربیها همچنین میتوانند سرانجام دانشآموزانی را که قبلاً مربیگری کردهاند پیدا کنند و با آنها رابطه بسازند. حتی میتوانند دانشآموزان را به موردعلاقهها اضافه کنند و از آن برای در اولویت قرار دادن مربیگری دانشآموزانی استفاده کنند که قبلاً تجربهی خوبی با آنها داشتهاند.
فهرستهای مسدودسازی
پس از هر جلسهی مربیگری، هم دانشآموز و هم مربی میتوانند طرف مقابل را مسدود کنند. دو فهرست مسدودسازی وجود دارد: دانشآموزان مسدودشده و مربیهای مسدودشده. اگر من بهعنوان مربی شما را بهعنوان دانشآموز مسدود کنم، باز هم ممکن است بعداً شما به من مربیگری کنید. طرف مقابل طبیعتاً متوجه نمیشود که مسدود شده، پس نمیتواند علیه شما تلافی کند.
میتوانید به هر دلیلی کسی را مسدود کنید، اما اگر آن فرد آییننامهی رفتاری را نقض میکند، لطفاً حتماً او را بهصراحت هم گزارش کنید تا از سایر کاربران محافظت شود.
کاهش پیامدهای منفی انتظارهای طولانی
در نهایت، آخرین گام در پرداختن به مشکل انتظارهای طولانی این است که مطمئن شویم حتی با وجود اینکه گاهی باید منتظر بمانید، پیامدهای منفی انتظار حداقل است. در v3، انتظار برای مربیگری جلوی حل تمرینهای دیگر را نمیگیرد. همچنان میتوانید در مسیر پیش بروید.
هر کدام از دو طرف میتواند جلسهی مربیگری را پایان دهد. اگر دانشآموز هستید و از روشی که یک مربی خاص با شما در پیش گرفته راضی نیستید، همیشه میتوانید درخواست روشی متفاوت کنید یا تصمیم بگیرید جلسه را ترک کنید. هر طور که جلسهی مربیگری تمام شود، دانشآموز میتواند برای همان راهحل درخواست جلسهی مربیگری جدیدی با مربی دیگری بدهد.
جایگاههای مربیگری
برای هر مسیر، میتوانید از ۱ تا ۴ جایگاه مربیگری داشته باشید. داشتن چند جایگاه مربیگری وقتی به کمکتان میآید که بخواهید برای یک تمرین دشوار که احتمال مربیگری سریعش کم است درخواست بدهید و در همان حال بتوانید برای تمرینهای دیگر هم مربیگری بگیرید.
جایگاههای مربیگری با کسب اعتبار باز میشوند. اعتبار برای منتشر کردن راهحلهایتان برای مرور همه، برای مربیگری دانشآموزان و برای مشارکت در هر یک از مخازن Exercism داده میشود. یعنی دانشآموزانی که بیشتر به پلتفرم مشارکت میکنند مربیگری بیشتری میگیرند.
خلاصه
اینها برخی از تغییرات عمدهای هستند که Exercism در اول سپتامبر ۲۰۲۱ داشته است.
تمرینهای یادگیری را اضافه کردیم تا بتوانید بدون ترک پلتفرم یاد بگیرید، ویرایشگر وب را تا بتوانید بدون نصب هیچچیز کد بنویسید، و تحلیلگرها و بازنماگرها را تا بازخورد خودکار فوری بگیرید. همچنین بسیاری از موانع آزاردهنده را از فرایند مربیگری برداشتیم.
و چیزهای تازهی بسیار دیگری هم برای کشف کردن هست: بخش مشارکت ما، نشانها، پروفایلهای جدید، یک صفحهی سفر با تمام تاریخچهی Exercism شما، و خیلی چیزهای دیگر.
به exercism.org سر بزنید و امتحانش کنید.
سپاسگزارم.