تمام حرفه ای ها، هنر خود را با مشارکت در تمرین های تیز کردن(چاقوی)مهارت، تمرین میکنند. موسیقی دانان، گام ها را تمرین میکنند. بازیکنان فوتبال، از میان موانع می دوند. پزشکان، فنوان جراجی و بخیه زدن را تمرین میکنند. وکلا، استدلال را تمرین میکنند. سربازان، ماموریت ها را تمرین میکنند. زمانی که عملکرد مهم باشد، حرفه ای ها تمرین میکنند. ما در این جا در مورد روش هایی صحبت میکنم که برنامه نویسان می توانند با آن ها، هنر خود را تمرین کنند.
تمرین کردن، مهفوم تازه ای در توسعه نرم افزار نیست اما تا پیش از تغییر هزاره، آن را به عنوان تمرین کردن به رسمیت نمیشناختیم. شاید اولین نمونه رسمی از یک برنامه تمرینی برای هر فرد این کد باشد
Main(){
Printf("Hello, world\n");
}
نوشتن و اجرای این برنامه ثابت میکند که ما میتوانیم هر برنامه ای را بنویسیم و اجرا کنیم.
بسیاری از برنامه نویسان از استعاره ای از هنر های رزمی برای جلسه تمرینی خود استفاده میکنند
کاتا
در هنر های رزمی، کاتا مجموعه ای دقیق از حرکات طرح ریزی شده است که یک جنبه از مبارزه را شبیه سازی میکند.
یک کاتای برنامه نویسی، مجموعه ای دقیق از کلید های فشرده شده و حرکات موس است که حل کردن برخی مسائل برنامه نویسی را شبیه سازی میکند. شما در واقع آن ها را حل نمیکنید. زیرا از قبل، راه حل را میدانید. در عوض حرکت و تصمیمات گرفته شده هنگام حل مسئله را تمرین میکنید.
مماس با بهتر شدن، خود یک هدف است. شما تمرین را بارها و بارها تکرار میکنید تا به مغز و بدنتان بیاموزید که چطور حرکت کرده و واکنش نشان دهند. همانطور که تمرین میکنید، ممکن است پیشرفت های ظریف و کارآمدی را در حرکات خود یا در راه حل بیابید.
مانند هر هنرمند رزمی کار، یک برنامه نویس باید چندین کاتا مختلف را بداند و آن هارا به طور مرتب تمرین کند.
کاتاهای بسیاری در http://katas.softwarecraftsmanship.org آورده شده اند. تعداد دیگری را میتوانید در http://codekata.pragprog.com پیدا کنید. برخی از کاتاهای مورد علاقه من عبارت اند از:
دوجو(Dojo)
گاهی اوقات گروهی از برنامه نویسان با یکدیگر ملاقات میکنند و دقیقا مانند هنر های رزمی کار با یکدیگر را تمرین میکنند.
برای مثال ۳ توسعه دهنده لپ تاپ های خود را باز کرده و با فشردن کلید ها به تبعیت از رهبرشان در حال انجام کاتای بازی بولینگ میشوند
وازا(WASA)
وازا بسیار شبیه به یک کاتای دو نفره است. به این صورت که یک یار نقش مهاجم را بازی میکند و یار دیگر، مدافع است. حرکات بارها و بارها حین تعویض نقش شرکت کنندگان، تکرار می شوند.
برای مثال یک مسئله ساده انتخاب مشود و یکی از برنامه نویسان یک تست واحد می نویسد و دیگری آن را باید پاس کند. سپس نقش ها معکوس می شوند.
فرض کنید اگر برنامه نویسان یک الگوریتم مرتب سازی(sort) را برای پیاده سازی انتخاب کنند، نویسنده تست می تواند به راحتی محدودیت هایی روی سرعت و فضای حافظه قرار دهد که یارش را به چالش بکشاند. این کار میتواند بازی را کاملا رقابتی کند و البته سرگرم کننده باشد.
رندوری(Randori)
رندوری با افراز زیاد بازی میشود به این صورت که در صفحه ای که در روی دیوار نشان داده میشود، یکی از افراد تستی می نویسد و سپس می نشیند. فرد بعدی، تست را پاس میکند و سپس تست بعدی را می نویسد این کار را میتوان به ترییت پیرامون یک میز انجام داد یا افراد میتوانند یک صف را تشکیل دهند تا حس حرکت داشته باشند.
متن باز
یک راه برای جلوگیری از پیر شدن و درجا زدن در برنامه نویسی، کاری است که وکلا و پزشکان انجام می دهند: انجام برخی کارهای عام المنفعه با مشارکت در یک پروژه متن باز. تعداد زیادی از این کارها وجود دارند و احتمالا برای افزایش مهارت هایتان، هیچ راهی بهتر از کار کردن روی چیزی که فرد دیگری به آن اهمیت می دهد وجود ندارد؛ بنابرین این اگر شما یک برنامه نویس جاوا هستید، در یک پروژه Rails مشارکت کنید. اگر تعداد زیادی برنامه ++C دارید یک پروژه پایتون پیدا کنید و به آن کمک کنید.
نتیجه گیری
به هر شیوه ای، حرفه ای ها تمرین میکنند. آن ها این کار را انجام می دهند زیرا به انجام دادن کار به بهترین شیوه ممکن، اهمیت می دهند. علاوه بر این در زمان خودشان تمرین میکنند زیرا درک میکنند که این مسئولیت آن ها است و نه مسئولیت کارفرمایشان که مهارت های خود را به روز نگه دارند.
تمرین کردن کاری است که زمانی که پولی نمی گیرید، انجام می دهید. شما تمرین می کنید تا بعدا به شما پول داده شود و نیز پول خوبی پرداخت شود.
این مطلب خلاصه ای از فصل ۶ کتاب The Clean Coder ترجمه حسین مسعودی و مهرداد عباسی بود
خیلی خوشحال میشوم اگر نظری داشتید اینجا بگذارید