کدنویس تمیز: دستورالعملی برای برنامه‌نویسان حرفه‌ای

کدنویس تمیز: دستورالعملی برای برنامه‌نویسان حرفه‌ای

امروزه افراد زیادی در زمینهٔ برنامه‌نویسی مشغول به کار هستند و روز به روز به شمار این افراد افزوده می‌شود اما سؤال مهمی که جزو دغدغهٔ اصلی برنامه‌نویسانی است که می‌خواهند وارد دنیای حرفه‌ای برنامه‌نویسی شوند این است که منظور از برنامه‌نویس حرفه‌ای کیست؟ آیا داشتن دانش در حوزهٔ یک یا چند زبان برنامه‌نویسی و نحوهٔ استفاده از لایبرری‌ها، فریمورک‌ها و … برای تبدیل شدن به یک برنامه‌نویس حرفه‌ای کافی است؟ در ادامه با سکان آکادمی همراه باشید تا پاسخ به این سؤال و دیگر سؤالات مربوطه را یافته و با ترجمهٔ کتاب The Clean Coder تحت عنوان «کدنویس تمیز: دستورالعملی برای برنامه‌نویسان حرفه‌ای» بیشتر آشنا شوید.

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

در پاسخ به سؤالات فوق باید بگوییم که فهم و درک این مدل رفتارها راهی به جز کسب تجربه یا استفاده از تجربهٔ دیگران ندارد؛ Robert Martin معروف به «عمو باب» تجربهٔ چند دهه برنامه‌نویسی خود را در کتابی با عنوان The Clean Coder جمع‌آوری کرده است. به جرأت می‌توان گفت که این کتاب یکی از بهترین و مؤثرترین کتاب‌هایی است که هر برنامه‌نویس برای حرفه‌ای شدن باید مطالعه کند. اکثر برنامه‌نویسانی که این کتاب را مطالعه کرده‌اند، دید و نگرش خود را تغییر داده و اذعان کرده‌اند که این کتاب تأثیر زیادی بر نوع رفتار، نگرش و تعاملات آنها با دیگران در زمینهٔ برنامه‌نویسی داشته است.

همان‌طور که از عنوان این کتاب مشخص است، در این کتاب رفتارهای یک کدنویس تمیز، شخصی که جزو دولوپرهای حرفه‌ای است، معرفی می‌شود. در کتاب کدنویس تمیز سعی شده است تجربیات مختلف به صورت داستان و مکالمات واقعی آورده شود و سپس مورد نقد قرار گیرند. همچنین این کتاب دربارهٔ حرفه‌ای بودن در زمینهٔ برنامه‌نویسی است و شامل تعداد زیادی توصیه عملی در تلاش برای پاسخ به سؤالاتی از قبیل موارد زیر است:
- یک حرفه‌ای (در زمینهٔ) نرم‌افزار کیست؟
- یک حرفه‌ای چگونه رفتار می‌کند؟
- یک حرفه‌ای چگونه با مناقشه‌ها، برنامه‌های تنگاتنگ و مدیران غیرمنطقی کنار می‌آید؟
- یک حرفه‌ای چه زمانی و چگونه باید «نه» بگوید؟
- یک حرفه‌ای چگونه با فشارها کنار می‌آید؟

برای آشنایی بیشتر با کتاب کدنویس تمیز، در ادامه بخشی از فصل دوم که به مسئلهٔ «نه گفتن» می‌پردازد، اینکه یاد بگیریم بگوییم نه را با هم می‌خوانیم:

بهترین نتیجهٔ ممکن، هدفی است که شما و مدیرتان به اشتراک می‌گذارید. نکتهٔ اصلی، یافتن آن هدف است که اغلب نیازمند مذاکره است. مذاکره گاهی‌اوقات می‌تواند همچون مکالمهٔ زیر دلپذیر باشد:
- مایک: پائولا، من نیاز دارم که صفحهٔ ورودی تا فردا آماده باشد. 
- پائولا: واقعاً؟ به همین زودی؟ خب، باشه، تلاش خودم را می‌کنم.
- مایک: این عالیه. ممنونم!

این یک مکالمهٔ کوتاه و خوب بود و خالی از هرگونه مجادله و هر دو طرف با لبخند رفتند اما این در حالی است که هر دو طرف کاملاً غیرحرفه‌ای رفتار کردند! پائولا به خوبی می‌دانست که صفحهٔ ورودی بیشتر از ۱ روز زمان می‌خواهد ولی دروغ گفت (البته شاید این را اصلاً دروغ محسوب نکند). احتمالاً فکر می‌کند که بالاخره تلاش خود را خواهد کرد یا شاید امید ناچیزی داشته باشد که می‌تواند این کار را انجام دهد؛ اما درنهایت، حرفش هنوز یک دروغ است.

از سوی دیگر مایک، «تلاش خودم را می‌کنم» را به عنوان «بله» تلقی کرده بود. این کار بی‌معنی است چرا که او باید می‌دانست که پائولا تلاش می‌کرد از مجادله جلوگیری کند در نتیجه باید با گفتن «مردد به نظر می‌رسی؛ مطمئن هستی که می‌توانی تا فردا آن را انجام دهی؟» بر موضوع تأکید می‌کرد. در ادامه یک مکالمهٔ دلپذیر دیگر داریم:
- مایک: پائولا، من نیاز دارم که صفحهٔ ورودی تا فردا آماده باشد.
- پائولا: متأسفم مایک اما این کار بیشتر از آن طول می‌کشد. 
- مایک: فکر می‌کنی چه زمانی بتوانی آن را انجام دهی؟
- پائولا: تا ۲ هفته بعد از امروز چطور است؟
- مایک: باشه، ممنون (در حالی که چیزی را در دفترچه یادداشت خود می‌نویسد).

مکالمهٔ فوق همان اندازه که خوشایند بود، بسیار ناکارآمد و کاملاً غیرحرفه‌ای هم هست چرا که هر دو طرف در جستجوی خودشان برای بهترین نتیجهٔ ممکن، شکست خوردند. به جای پرسیدن اینکه «تا ۲ هفته بعد از امروز چطور است؟»، پائولا باید قاطع‌تر می‌بود و می‌گفت «مایک، این کار ۲ هفته از من زمان می‌گیرد».

از سوی دیگر، مایک بدون سؤال کردن، الساعه تاریخ را قبول کرده بود طوری که انگار اهداف خودش اهمیتی نداشتند. سؤالی که پیش می‌آید این است که آیا او واقعاً می‌خواهد به سادگی به رئیس خود گزارش دهد که نسخهٔ نمایشی (دمو) مشتری قرار است به خاطر پائولا به تعویق بیفتد؟ در یک کلام، این نوع از رفتار پرخاشگری منفعلانه، از لحاظ اخلاقی سزاوار سرزنش است.

در تمام این موارد، هیچ یک از طرفین یک هدف مشترک قابل‌قبول را دنبال نکرده‌اند و هیچ کدام از آنها به دنبال بهترین نتیجهٔ ممکن نگشته‌اند. حال بیایید سناریوی زیر این را امتحان کنیم:
- مایک: پائولا، من نیاز دارم که صفحهٔ ورودی تا فردا آماده باشد. 
- پائولا: نه مایک. این یک کار ۲ هفته‌ای است.
- مایک: ۲ هفته؟ دولوپرها تخمین زده‌اند که این کار ۳ روز است و تا الان هم ۵ روز شده است!
- پائولا: دولوپرها اشتباه کرده‌اند مایک. آنها قبل از اینکه بازاریابی محصول در الزامات لحاظ شود، تخمین‌هایشان را زده‌اند. من حداقل به ۱۰ روز کار بیشتر برای انجام آن نیاز دارم. 
- مایک (عبوس و ناامید به نظر می‌رسد): پائولا، این قابل‌قبول نیست. مشتریان فردا برای نسخهٔ پیش‌نمایش می‌آیند و من باید به آنها نشان دهم که صفحهٔ ورود به سیستم کار می‌کند.
- پائولا: کدام بخش از صفحهٔ ورودی را نیاز داری تا فردا کار کند؟
- مایک: من صفحهٔ ورودی را نیاز دارم! من باید قادر به ورود باشم.
- پائولا: مایک، من می‌توانم فایل پیش‌نمایش (Mock-up) از صفحهٔ ورودی را بدهم که اجازه ورود را به تو می‌دهد. الان به کار می‌اندازمش. در واقع، این فایل نام کاربری و رمزعبور شما را بررسی نخواهد کرد، رمزعبور فراموش شده را به شما ایمیل نخواهد کرد، بنر اخبار شرکت در بالای آن نیست، دکمهٔ راهنما (Help) آن هم کار نخواهند کرد، این پیش‌نمایش کوکی را ذخیره نمی‌کند تا دفعهٔ بعد شما را به خاطر بیاورد و هیچ محدودیت پرمیشنی را برای شما ایجاد نخواهد کرد اما شما قادر خواهید بود با آن به سیستم وارد شوید. آیا برایتان مفید خواهد بود؟
- مایک: می‌توانم وارد شوم؟ 
- پائولا: بله می‌توانی وارد سیستم شوی.
- مایک: این عالی است پائولا. تو یک ناجی هستی! (دور می‌شود، دستش را در هوا مشت کرده و می‌گوید خودشه!)

آنها به بهترین نتیجهٔ ممکن رسیدند؛ این کار را با گفتن «نه» و سپس کار کردن روی راه‌حلی ادامه دادند که به صورت مشترک، برای هر دوی آنها دلپذیر بود. در یک کلام، آنها مانند حرفه‌ای‌ها عمل کردند. این مکالمه تا حدی خصمانه بود و تعداد کمی لحظات ناراحت‌کننده در آن وجود داشت اما زمانی که ۲ نفر قاطعانه اهدافی را دنبال کنند که آن اهداف در هماهنگی کامل نیستند، چنین لحظاتی انتظار می‌روند.

ترجمهٔ کتاب The Clean Coder به فارسی
اخیراً این کتاب توسط ۲ نفر از دوستان علاقمند به برنامه‌نویسی تحت عنوان «کدنویس تمیز: دستورالعملی برای برنامه‌نویسان حرفه‌ای» به فارسی ترجمه شده است.

در واقع، در این کتاب سعی شده مشاوره‌های کاربردی در مورد اکثر کارها از تخمین زدن و کدنویسی تا ریفکتورینگ و تست پوشش داده شود؛ تکنیک‌های مختلف را بررسی کرده و اکثر نگرش‌ها را بیان گردد. عمو باب در کتاب The Clean Coder نشان می‌دهد که چگونه می‌توان توسعهٔ نرم‌افزار را همراه با احترام، عزت نفس و افتخار انجام دهیم، خوب و تمیز کار کنیم، صادقانه ارتباط داشته باشیم و بتوانیم تخمین درستی از کارها داشته باشیم. همچنین تصمیمات سخت بگیریم و بفهمیم که هر چقدر دانش بیشتری داشته باشیم، مسئولیت بیشتری نیز بر دوش داریم و در یک کلام چگونه مانند یک برنامه‌نویس حرفه‌ای رفتار کنیم.

علاقمندان ورود به دنیای حرفه‌ای برنامه‌نویسی می‌توانند جهت آشنایی با دیدگاه‌های افراد خبره در زمینهٔ برنامه‌نویسی، مطالعهٔ بخش‌هایی از ترجمهٔ این کتاب و همچنین جهت خریداری این کتاب به سایت zerobook.ir مراجعه کنند (برای بهرمندی از کد تخفیف و ارسال رایگان در زمان پیش‌فروش کتاب نیز می‌توانید از کد تخفیف «programmer» هنگام سفارش استفاده کنید.