خلاصه‌ی The Clean Coder - قسمت ۰۶ - تمرین

این مقاله یکی از مجموعه مقالات کتاب the clean coder هست. برای پیدا کردن دید بهتر از کل این مجموعه و محتوایی که تو این مقاله می‌خونید، پیشنهاد می‌کنم مقاله‌ی صفرم رو هم یه نگاه بهش بندازید.همه‌ی افرادی که تو هر زمینه‌ای به‌طور حرفه‌ای کار می‌کنن، تمرینایی انجام می‌دن که مهارت‌هاشون رو حفظ و تقویت کنه. فرق نمی‌کنه وکیل باشن، سرباز، ورزشکار یا هنرمند. هر جا سرعت عمل مهم باشه، آدم‌های حرفه‌ای تمرین می‌کنن.یه ورزشکار هنرهای رزمی رو در نظر بگیرید. اونقدر تمرین کرده که وقتی توی مبارزه‌س، دیگه بدنش بصورت خودکار به خیلی از حمله‌های حریف عکس‌العمل نشون می‌ده و ذهن درگیر تک تک عکس‌العمل‌ها نمیشه و مشغول چیدن استراتژی‌های کلی‌تره. یا کسی که گیتار میزنه اگه حرفه‌ای باشه، همین که یه موزیکی تو ذهنش باشه، دستاش سریع اونو پیاده می‌کنن بدون اینکه ذهنش درگیر موقعیت انگشتاش و تارها و … باشه. [من: اگه این موضوع واستون جالبه می‌تونید راجب muscle memory مطالعه کنید].[بعضی از] برنامه‌نویس‌های حرفه‌ای هم همین کار رو می‌کنن. اون‌ها جلسه‌های تمرینی مثل رزمی‌کارها دارن. اسم‌های مختلفی رو این جلسه‌ها گذاشتن ولی معروف‌ترینش coding dojo یا «دوجو برنامه‌نویسی» هست. تو این جلسه‌ها بعضی از تمرین‌ها به‌صورت گروهی (مثل رزمی‌کارها) و بعضی‌ها به‌طور فردی (باز هم مثل رزمی‌کارها) انجام می‌شن. تمرین‌هایی که میشه انجام داد رو در ادامه با هم مرور می‌کنیم.Kataتعریف ویکی‌پدیا:کاتا، به معنای «فُرم» واژه‌ای ژاپنی است و به مجموعه حرکات از پیش طراحی شده‌ای گفته می‌شود که می‌تواند به‌طور انفرادی یا گروهی انجام شود.هدف از کاتا، انجام درست و بی‌عیب و نقص هر حرکته. درسته با کاتا نمی‌شه کسی رو شکست داد! ولی یه با این کار، یه رزمی‌کار داره روی حرکات و دقت مورد نیاز واسه شکست حریف تو مبارزه تمرین می‌کنه.با انجام این تمرین‌ها توی برنامه‌نویسی به مرور حس می‌کنیم که سرعت انجام کارها و سرعت حل مسألمون بهتر شده.? واسه تمرین چه‌چیزایی دقیقا می‌شه ازش استفاده کرد؟میان‌بُر(shortcut/hotkey)ی محیط توسعه (IDE) و سیستم عامل و چیزهای دیگه‌ای که همیشه ازشون استفاده می‌کنیم.تمرین دسیپلین‌های جدید مثل توسعه آزمون‌محور (TDD) و ادغام مستمر (CI/Continuous Integration) و غیره.انتقال مساله‌های پر استفاده‌ی برنامه نویسی و راه‌حل اون‌ها به ناخودآگاه که وقتی واقعا بهشون نیاز شد، بتونید خیلی سریع اونارو از غلاف در بیارید و ازشون استفاده کنید (یا به عبارتی خودشون از غلاف دربیان و شما فقط حالشو ببرین).مثل رزمی‌کارها، دولوپرها هم باید چند تا kata متفاوت بلد باشن و مرتب اون‌ها رو تمرین کنن که از حافظشون پاک نشه.Wasaمشابه kata ولی دو نفره‌س.تمام حرکت‌ها از قبل معلومه و به ترتیب یه نفر حمله و یه نفر دفاع می‌کنه و بعدش نقششون رو عوض می‌کنن.دولوپرها میتونن از یه تکنیک به اسم «پینگ پنگ» استفاده کنن. خلاصه‌ش اینه که یه نفر یه یونیت تست می‌نویسه و نفر مقابل باید کدی بنویسه که بتونه اون تست رو پاس کنه. بعد نقش‌هارو عوض می‌کنن و الی آخر.بسته به اینکه تو این پینگ پنگ چه مسائلی رو انتخاب کرده باشن، دو طرف می‌تونن همدیگه رو تو زمینه‌های متفاوتی نقد کنن.مساله از قبل معلوم باشه: نقد متمرکز میشه به سرعت عمل و استفاده از میانبرها و مسائل مرتبط با سرعتمساله‌ها جدید باشه: نقد متمرکز میشه به روش حل مساله.(البته نویسنده‌ی تست می‌تونه محدودیت زمان اجرا یا مقدار حافظه‌ی مورد استفاده و غیره هم بذاره واسه جالب کردن ماجرا)Randoriتعریف ویکی‌پدیا:کلمه‌ای ژاپنی به معنی تمرین سبک آزاد (free-style) در ورزش‌های رزمی.عمو باب از خاطرات روزهای جودو کاریش تعریف می‌کنه و می‌گه که بعضی از تمریناشون به این شکل بوده که که هر بار به جور تمرینی تعریف می‌کردن و انجام میدادن. مثل یه نفر دفاع کنه و سه نفر حمله، یا دو به دو و غیره.این سناریو جایگزین خیلی خوبی واسه دولوپرها نداره ولی بعضی‌ها یه همچین کاری می‌کنن:مواد لازم: چند عدد دولوپر، یه سیستم و یه پروژکتور که صفحه‌ی اون سیستم رو میندازه رو دیوار. یه نفر می‌ره پشت اون سیستم و یه تست می‌نویسه. نفر بعد می‌ره کدی می‌نویسه که تست پاس شه و یه تست دیگه می‌نویسه و نفر بعدی کدی می‌نویسه که پاسش کنه و باز هم یه تست جدید می‌نویسه و الی آخر.شاید واسه بعضیامون خیلی هیجان‌انگیز به‌نظر نرسه و یه جورایی فکر کنیم بی‌فایده‌س. نکته اینه که با این کار، ما متوجه می‌شیم که بقیه دقیقا چطور مسائل رو حل ‌می‌کنن! ?همین موضوع ساده می‌تونه باعث شه شما تکنیک‌ها و روش‌های جدید یاد بگیرید و به دولوپر بهتری تبدیل شید.جدای از تمرین، یه موضوع دیگه که خیلی مهمه و بعضی از حتی دولوپرهای حرفه‌ای هم توش می‌لنگن اینه که مسائلی که حل کردن و پروژه‌هایی که روش کار کردن، تنوع زیادی نداشته و در نتیجه تجربه‌های محدودی دارن (از نظر زبان برنامه‌نویسی، سیستم عامل، فریم‌ورک و حوزه‌ی کاری). این موضوع باعث میشه دولوپرها تو زمینه‌های معدود و محدودی رشد کنن و نتونن در زمان و به شکل مناسب به تغییرات صنعت نرم‌افزار عکس‌العمل نشون بدن. تو این حالت، به نسبت کسی که تجربه‌های بیش‌تری داره هم قاعدتا رزومه‌ی ضعیف‌تری دارن.یه روش خیلی خوب واسه جلوگیری از این موضوع، کار رو پروژه‌های open source هست. اون هم کار روی زبان‌ها و فریمورک‌هایی که معمولا روشون کار نمی‌کنید! قراره تنوع ایجاد کنیم بالاخره!? یه نکته اخلاقی هم اینکه تو تایم خودمون باید تمرین کنیم نه تو تایم شرکت. این وظیفه‌ی کارفرما نیست که هزینه‌ی تیز نگه داشتن تبر مهارت ما رو بده.جمع بندی فصل [عینا ترجمه کردم]:همه‌ی حرفه‌ای ها به یه شکلی تمرین می‌کنن. دلیل تمرین کردنشون هم اینه که واسشون مهمه که کار رو به بهترین شکل انجام بدن. نکته دیگه این‌که تو زمان خودشون تمرین می‌کنن چون متوجه این موضوع هستن که این وظیفه‌ی خودشونه که تبر مهارتهاشون رو تیز نگه دارن (نه وظیفه‌ی کارفرما!). تمرین، کاری هست که وقتی کسی بهت پولی نمیده انجام می‌دی. تو این کار رو می‌کنی که بعدا در ازاش پول دریافت کنی و پول خوب هم دریافت کنی!لیستی از سایت‌هایی که تو این زمینه به کمکتون میاد:codekata.pragprog.comcodingdojo.orgkatas.softwarecraftsmanship.org