خلاصه‌ی The Clean Coder - قسمت ۰۴ - کد نویسی (بخش ۱)

(اگه قسمت‌های قبلی رو نخوندی، پیشنهاد می‌کنم قسمت ۰۰ رو اول مطالعه کنی)

(بخاطر طولانی بودن این قسمت، تو دو بخش پستش می‌کنم که وسطاش خسته نشیم ?)


مسائلی که تو این بخش مطرح میشه، چارچوب و قوانینی هست که عمو باب بعد از سعی و خطا تو چند دهه بهشون رسیده.

  • آماده باش
    • کد نویسی ذهن رو به چالش می‌کشه و انرژی زیادی از دولوپر می‌گیره. نیاز به سطح بالایی از تمرکز داره، سطحی که تو کمتر کاری بهش نیاز پیدا می‌شه. حالا واقعا اینجوره یا پیاز داغشو داریم زیاد می‌کنیم؟ بنظر می‌رسه اینجوره چون دولوپر باید بین مفاهیم مختلف و ظاهرا متضاد یه هماهنگی ایجاد کنه‌:
      • کد باید کار کنه. همه جزئیات باید جوری پیاده‌سازی بشن که شما همزمان باید از قوانین و امکانات زبان برنامه‌نویسی که استفاده می‌کنید، معماری پروژه و سایر موارد تبعیت کنید
      • کد باید مشکل مشتری رو حل کنه.
      • باید به کدهایی که از قبل وجود داره هماهنگ باشه و به درستی از اونا استفاده کنه. کد رو نباید شکننده کنه، انعطاف‌پذیریش رو کم کنه یا سیستم رو مبهم و غیر شفاف کنه.
      • کد باید خوانا باشه و بقیه‌ی دولوپرها بتونن نسبتا بدون مشکل اون رو بخونن و متوجه شن. این یکی از سخت‌ترین کارهایی هست که هر برنامه‌نویس باید توش مهارت کسب کنه ??.
    • ایجاد یه‌جور هماهنگی بین همه‌ی این مفاهیم به چند دلیل سخته:
      • به‌طور کلی حفظ تمرکز برای مدت زمان طولانی از نظر فیزیولوژیکی کار سختیه
      • مشکلات و حواس‌پرتی‌هایی که بخاطر کار تیمی ایجاد می‌شه رو هم به این اضافه کن
      • مشکلات و نگرانی‌های همیشگی زندگی هم که همیشه هستن!

⚠️ وقتی نمی‌تونی به اندازه‌ای که نیاز هست تمرکز کنی، کدی که می‌نویسی از دو حالت خارج نیست:

  • بعدا دوباره باید از اول بنویسی
  • دوباره کلی روش کار کنی تا مشکلاتشو حل کنی.

کد نوشتن وقتی که تمرکز نداری، هدر دادن وقت و انرژیه.

⚠️? وقتی خسته‌ای یا تمرکز نداری، کد نزن! به‌جاش سعی کن حواس‌پرتی‌ها رو حذف کنی و ذهنت رو آروم کنی.

  • ? طبیعتا بعضی از مشکلات هستن که نمیشه به این راحتی حلشون کرد. تو همچین مواقعی، این دو مورد کمک می‌کنن:
    • اون صدایی که مدام توی ذهنت راجب اون مشکل حرف میزنه رو ساکت کنی
    • تو ذهنت اون صدا رو ضعیف کنی یا موقتا ساکت کنی تا یه‌ضرب مزاحمت نباشه

واسه انجام این کارها می‌تونی زمانت رو تقسیم‌بندی (پارتیشن بندی) کنی. مثلا یه واحد مشخصی از زمان مثلا یک ساعت رو به کار کردن روی اون مساله اختصاص بدی. به احتمال زیاد مشکل تو اون یه ساعت حل نمی‌شه ولی احتمالش خیلی زیاده که نگرانی که اون مساله باعثش شده و اون صدای کذایی رو کم کنی.
تو حالت ایده‌آل، این یک ساعت باید از زمان شخصی خودت باشه. ولی احیانا اگه به خودت اومدی دیدی تو محل کاری و صدای تو ذهنت ول کن نیست، بهتره که یه ساعت وقت بذاری و آرومش کنی تا اینکه بخوای خودت رو وادار به کد زدن کنی و بعد مجبور شی روز بعد همه‌ی اون کد رو از اول بزنی یا کلی روش وقت بذاری (یا ازینا بدتر، اون کد مشکل دار تو سیستم باقی بمونه و چندین ماه یا چند سال بخوای کج دار و مریز باش تا کنی)

  • حس پرواز (The Flow Zone)
    • [اول این‌که عبارت حس پرواز نمی‌دونم چقدر جایگزین خوبی واسه flow zone یا اصطلاحا the zone هست ولی با توضیحاتی که تو موردای بعدی میگم، معنیش مشخص می‌شه]
    • حس پرواز یه حالتی که شما توش عملکرد، بازده و تمرکز فوق‌العاده‌ای دارید و می‌تونید بی‌وقفه کد بزنید. وقتی تو این حالتید، حس خیلی خوبی دارید و احتمالا حس می‌کنید روئین تنید.
      • یه نکته کوچیک که ممکنه یه مقدار بهتون کمک کنه اینه که «از حس پرواز فرار کنید» ?????. چرا آخه ???؟؟ واقعیت اینه که شما تو این حالت، عملکرد و بازده واقعا بالایی ندارید. حس پرواز صرفا یه حالت خفیف مدیتیشن‌طوره که توش ما حس می‌کنیم سرعتمون بالا رفته ولی نیمه‌ی تاریک ماجرا اینه که توی این حالت، یه بخش‌هایی از توانایی‌های منطقی ما عملکرد ضعیفی دارن.
      • واقعیت اینه که توی حس پرواز، حجم کاری که انجام می‌دید بیش‌تره. ولی مشکل اینجاس که تو این حالت حواستون به موضوعات مهم‌تر و کلی‌تر (big picture) نیست. به احتمال زیاد تصمیم‌هایی می‌گیرید که احتمالا بعدا مجبورید دوباره بیاید سراغشون و اصلاحشون کنید یا حتی همه‌ی تغییرات رو برگردونید به حالت اول.
      • البته این حس پرواز اینقدرا هم به‌درد نخور نیست [و نمی‌خوایم اونو دور بندازیم?] و وقتی داریم «تمرین» می‌کنیم اتفاقا خیلی حالت خوبیه. [یه بخش راجب «تمرین» داریم در آینده]
    • ?? موزیک گوش بدم وقتی دارم کد می‌زنم ?؟
      • عمو باب می‌فرماید که تجربه‌ی خوبی نداره ازش و وقتی موزیک گوش می‌ده، خوب کد نمی‌زنه. به‌نظر می‌رسه موزیک گوش دادن، یه بخشی از منابع حیاتی از ذهن که واسه کد تمیز (و مطابق طراحی) زدن نیاز داریم رو مصرف می‌کنه. ⚠️ اگه موقع کد زدن موزیک گوش می‌دید هم مراقب باشید که حس پرواز بهتون دست نده.
    • ? وقتی مشغول کد زدنی، تمرکز کردی و داری کد رو از یه گردنه‌ی حساس میگذرونی که یه نفر میاد و ازت سوال می‌پرسه. چه عکس‌العملی نشون می‌دی؟ کلافه و عصبانی می‌شی؟ یا کارت رو متوقف می‌کنی و بهش جواب می‌دی؟
      • اگه عصبانی می‌شی ممکنه به‌خطر این باشه که تو حس پروازی و دوست نداری کسی مزاحمت شه. یا داری تلاش می‌کنی که به حس پرواز برسی!
      • البته بعضی وقت‌ها هم دلیلش اینه که واقعا داری کاری که تمرکز زیادی لازم داره رو انجام می‌دی و نباید کارت قطع شه چون رسیدن به اون مرحله‌ی ذهنی که تو اون لحظه توش هستی، انرژی و تمرکز زیادی گرفته ازت و دوباره رسیدن بهش هم راحت نیست. تو این مواقع چی‌کار کنیم؟
        • ?? برنامه‌نویسی دونفره (pair programming) که باعث می‌شه وقتی اون وقفه (سوالی که یه نفر پرسیده، تماسی که گرفته شده یا غیره) رو هندل (مدیریت؟) کردی و برگشتی، نفر دوم که تو این بازه داشته به کار روی کد ادامه می‌داده بهت کمک کنه که دوباره بیای توی باغ (مدل ذهنیت از مساله رو بازسازی کنی)
        • ? استفاده از روش TDD (تو بخش‌های بعدی بیش‌تر توضیح داده ولی خلاصه‌ش اینه که هر چیزی رو که می‌خوایم کدش رو بزنیم، اول تستش رو می‌نویسیم، بعد حداقل کدی که باعث میشه اون تست با موفقیت اجرا شه رو می‌زنیم، بعد برای مابقی عملکردی که انتظار داریم تست نویسی می‌کنیم و دوباره کد و الی آخر). وقتی قضیه رو هندل کردی و برگشتی، می‌تونی به آخرین تستی که با موفقیت اجرا نشده نگاه کنی و سریع یادت بیاد کجای مساله بودی.
        • این واقعیت رو باید قبول کنی که بالاخره این موارد پیش میان و باهاش کنار بیای
        • ☺️ و در آخر اینکه یادت باشه که همیشه در رو پاشنه نمی‌چرخه و دفعه‌ی بعد که یه‌نفر وسط کار همکارش ازش سوال می‌پرسه تو همونی باشی که داره سوال می‌پرسه! خلق و خوی حرفه‌ای ها تو همچین مواقعی مودبانه است و دوست دارن به بقیه کمک کنن.