خلاصه کتاب کدنویس تمیز (The Clean Coder)

دستورالعملی برای برنامه‌نویسان حرفه‌ای سلام سلام ✋من هماشفیعی ام، یک جوان عاشق برنامه نویسی که توسعه دهنده اندروید هستم... ?آشنایی من با زبان‌های برنامه نویسی از دوران دبیرستان شروع شد که در کتاب درسی مبانی کامپیوتر ویژوال بیسیک تدریس میشد و همونجا بود که من به الگوریتم نویسی و دنیای برنامه نویسی علاقه مند شدم و بعد از اون در دانشگاه به طور کاملا اتفاقی رشته مهندسی کامپیوتر گرایش سخت‌افزار دانشگاه فردوسی مشهد قبول شدم از همون سال های ورودم به دانشگاه همزمان با درس خوندن، کار کردن رو هم شروع کردم و اینجوری شد که خیلی زود وارد بازار کار شدم اما از اونجایی که خیلی کمال گرام و هرکاری رو که شروع میکنم باید به بهترین شکل ممکن انجام بدم، ورودم به بازار کار باعث شد بیشتر برای درس خوندن تلاش کنم و اینجوری شد که تونستم بین هم ورودی های خودم معدل بالایی داشته باشم و ارشدم بدون کنکور وارد رشته مهندسی کامپیوتر گرایش نرم‌افزار دانشگاه فردوسی مشهد بشم، در دانشگاه به واسطه کانکشن های خوبی که ایجاد میشد نه تنها باعث شد پروژه های خوبی بگیرم بلکه از اون مهمتر باعث شد با کلی جوان بااستعداد و باانگیزه آشنا بشم که در حال حاضر برنامه نویسای حرفه‌ای چه در ایران و چه در خارج از کشور هستند.خب دیگه بیوگرافی بسه و بریم سراغ دلیل ایجاد این پست.مدتی بود که کتاب کدنویس تمیز روی میز مدیر فنی‌مون توجه‌امو جلب میکرد یک روز بالاخره بهش گفتم میشه من این کتاب یک هفته‌ای قرض بگیرم اونم قبول کرد و یک پیشنهاد جالبی داد و گفت وقتی که تموم کردی اگه تمایل داری میتونی یک جلسه بذاریم و راجع بهش صحبت کنیم. در واقع اینجوریه که در شرکتی که مشغول به کارم هر چند وقت یک بار یکی از اعضای تیم فنی یک جلسه‌ای در مورد مباحث جدید مرتبط با اندروید که اومده و لازمه به پروژه اضافه بشه یا بدهی فنی‌هایی که خوبه انجام بشه میذاره اما این دفعه این فرصت به من داده شد که جلسه در مورد رشد شخصی خودمون بذاریم.خلاصه قرار بر این شد که بعد از مطالعه کتاب برای به اشتراک‌گذاری دانش و درک مطالب کتاب، خلاصه‌ای از کتاب به بحث و تعامل گذاشته بشه و بعد به این نتیجه رسیدم که چرا خلاصه نویسی محدود به اعضای تیم بشه چرا اونو منتشر نکنم تا بقیه دوستان علاقه مند هم بتونن استفاده کنن؟خب دیگه خیلی حرف‌های پراکنده زدم بریم سراغ خلاصه کتاب.این کتاب درباره حرفه‌ای بودن در زمینه نرم‌افزار است و شامل تعداد زیادی توصیه عملی در تلاش به پاسخ گویی به سوالاتی از قبیل موارد زیر است:· یک حرفه‌ای (در زمینه‌ی) نرم‌افزار کیست؟· یک حرفه‌ای چگونه رفتار میکند؟· یک حرفه‌ای چگونه با مناقشه‌ها، برنامه‌های تنگاتنگ و مدیران غیرمنطقی کنار می‌آید؟· یک حرفه‌ای چه زمانی و چگونه باید "نه" بگوید؟· یک حرفه‌ای چگونه با فشارها کنار می‌آید؟من فرض میکنم شما این کتاب را انتخاب کرده‌اید، چون یک برنامه‌نویس کامپیوتر هستید و با مفهوم حرفه‌ای بودن آشنایید. در واقع باید آشنا باشید چون حرفه‌ای بودن، چیزی است که حرفه ما شدیدا به آن نیاز دارد.پس میخواهید یک توسعه‌دهنده نرم‌افزار حرفه‌ای باشید. بله؟ میخواهید سرتان را بالا گرفته و به دنیا اعلان کنید: "من یک حرفه‌ای هستم!". میخواهید که مردم با احترام به شما نگاه کنند و با شما متفاوت رفتار کنند. می‌خواهید مادران به شما اشاره کنند و به فرزندان خود بگویند که مثل شما باشند. تمام این‌ها را میخواهید‌. درست است؟مراقب چیزی که میخواهید، باشید!حرفه‌ای بودن، عبارتی مسئولیت آور است. بدیهی است که حرفه‌ای بودن یک نشان افتخار و غرور است اما نشانگر مسئولیت و پاسخگویی نیز هست. شما نمی‌توانید غرور و افتخار چیزی را داشته باشید که پاسخگوی آن نیستید.پذیرش مسئولیتحرفه‌ای بودن همان مسئولیت پذیری است. غیرحرفه‌ای بودن بسیار ساده‌تر است. غیر حرفه‌ای‌ها لازم نیست مسئولیت کاری که میکنند را بپذیرند، بلکه این مسئولیت را به کارفرمایشان محول میکنند. اگر یک غیر حرفه‌ای خطایی کند، کارفرمایش آن را جمع میکند اما زمانی که یک حرفه ای خطایی کند، خودش باید بهم ریختگی ناشی از آن را جمع کند.چگونه مسئولیت بپذیریم؟اول اینکه آسیب نزنید!واضح است که ما می‌خواهیم نرم‌افزارمان کار کند. مشتریان و کارفرمایان به ما پول می‌دهند تا نرم‌افزاری بسازیم که همان‌طور که آن‌ها میخواهند، کار کند. زمانی که باگ‌ها را می‌سازیم عملکرد نرم‌افزار ما آسیب می‌بیند. در نتیجه برای حرفه‌ای بودن، باید باگ‌ها را نسازیم.قطعا نوشتن برنامه بدون باگ عملا غیرممکن است اما باید مسئولیت آن را بپذیریم و پاسخگو باشیم... پس اولین چیزی که باید تمرین کنید عذرخواهی کردن است، عذرخواهی کردن لازم است اما کافی نیست. شما نباید خطاهای یکسانی را بارها و بارها مرتکب شوید. اما بایستی نرخ خطای خود را تا حد امکان به صفر نزدیک کنید.بخش کنترل کیفیت یا QA نباید چیزی پیدا کندزمانی که نرم‌افزار خود را منتشر می‌کنید، باید انتظار داشته باشید که QA هیچ مشکلی پیدا نکند. این کار شدیدا غیرحرفه‌ای است که عمدا کدی را ارسال کنید که میدانید از نظر QA معیوب است.کدام کد معیوب است؟ هر کدی که درباره آن مطمئن نیستید!هربار که QA یا بدتر از آن، یک کاربر، مشکلی پیدا کند، باید شگفت زده و اندوهگین شوید و برای جلوگیری از وقوع مجدد آن، مصمم شوید.باید بدانید که کار میکندچطور بفهمید که کد شما کار میکند؟ ساده است، آن را تست کنید. مجددا تست کنید. تمام زیروبر آن را تست کنید. آن را به هفت شیوه مختلف تست کنید!تست کردن زمانبر است-> تست های خود را خودکار انجام دهید یعنی تست‌های واحد بنویسید.به ساختار آسیب نزنهر بار که یک ماژول را بررسی نهایی میکنید باید تمیزتر از بررسی اولیه باشد.چرا بیشتر توسعه دهندگان از اعمال مداوم تغییرات به کد خود هراس دارند؟ آنها میترسند کد را بشکنند... چرا؟ چون تست ندارند.توسعه دهندگان حرفه‌ای به قدری از کد و تست‌های خود مطمئن هستند که گاه به گاه دیوانه‌وار تغییراتی فرصت طلبانه و تصادفی را در کد ایجاد میکنند.به طور خلاصه آنها طوری با نرم‌افزار رفتار میکنند که یک مجسمه‌ساز با خاک رس رفتار میکند به طور مداوم به آن شکل و قالب میدهند.اخلاق کاریحرفه شما، مسئولیت شما است. این وظیفه کارفرمای شما نیست که به شما آموزش دهد یا شما را به کنفرانس‌ها بفرستد یا برای شما کتاب بخرد. این چیزها مسئولیت خود شماست. وای به حال توسعه دهنده‌ای که حرفه خود را به کارفرمایش سپرده است.برخی از کارفرمایان مایل هستند برای شما کتاب بخرند و شما را به کنفرانس‌ها وکلاس‌های آموزشی بفرستند. بسیار خب آن‌ها به شما لطف میکنند، اما هرگز در دام این تفکر نیفتید که این مسئولیت کارفرمای شماست‌.تقریبا سه ساعت در روز را صرف یادگیری کنید.اینکه کار را با خودتان ببرید خونه مورد بحث نیست اما اینکه برای آموزش خودتان وقت بگذارید حرفه‌ایست.رشته خود را بشناسیدآیا میدانید چارت nassi schneiderman چیست؟ اگر جواب منفی است چرا نمیدانید؟ تفاوت ماشین حالت میلی و مور را میدانید؟ آنالیز تبدیل به چه معناست؟ معنی اصلاح داده ولگرد (tramp data) چیست؟ جدول پارناس چیست؟ حرفه‌ای‌ها بخش قابل ملاحظه‌ای از این‌ها را میدانند!!یادگیری مداومبرنامه‌نویسانی که قادر به یادگیری روش‌ها و تکنیک‌های جدید نیستند، از بقیه عقب مانده و کنار گذاشته خواهند شد.تمرینحرفه‌ای‌ها تمرین میکنند. انجام دادن کارهای روزانه تمرین محسوب نمیشه. انجام کار روزانه شما عملکرد شماست نه تمرین!برای تمرین میتوان الگوریتم‌های ساده رو نوشت مثل نوشتن عوامل اول یک عدد صحیحهمکاریحرفه‌ای‌ها در پروژه‌های اپن سورس همکاری میکنند.مربی‌گریبهترین راه برای یادگرفتن تدریس کردن است.حوزه خود را بشناسیدحوزه خود را بشناسید و در آن حوزه یک یا دو کتاب بخوانید. به عنوان مثال اگر در حال نوشتن سیستم حسابداری هستید باید رشته حسابداری را بشناسید.با کارفرما یا مشتری خود، شناخته شویدمشکلات کارفرمای شما، مشکلات شما است. باید درک کنید که آن مشکلات چه هستند. در هنگام توسعه باید با کفش‌های کارفرما راه برویم که مطئمن شویم ویژگی‌هایی که در حال توسعه آن هستیم واقعا نیازهای کارفرما را پاسخ خواهند داد.تواضعیک حرفه‌ای دیگران را به خاطر یک اشتباه تحقیر نخواهد کرد زیرا ممکن است نفر بعدی که اشتباه میکند خودش باشد.نه گفتنحرفه‌ای‌ها شجاعت نه گفتن به مدیران خود را دارند. بردگان اجازه ندارند نه بگویند. کارگران ممکن است برای نه گفتن مردد باشند اما از حرفه‌ای‌ها انتظار میرود نه بگویند.اگر شما به خوبی میدانید که آماده کردن صفحه ورودی تا فردا غیرممکن است اما بگویید "باشه سعی خودم را میکنم" کار خود را انجام نداده‌اید. تنها راه، برای انجام دادن کارتان در آن لحظه، این است که بگویید "نه این غیرممکن است".تعهد داشتنزبان تعهد یعنی: گفتن، قصد داشتن، انجام دادنسه بخش برای ساختن یک تعهد وجود دارد:۱. شما میگویید که آن را انجام خواهید داد.۲. قصد آن را پیدا میکنید.۳. واقعا آن را انجام میدهید.افراد بسیار کمی هستند که زمانی که چیزی میگویند، قصد آن را دارند و سپس آن را واقعا انجام میدهند.برخی دیگر هستند که چیزهایی میگویند و قصد آن را دارند اما هرگز آن را انجام نمیدهند.افراد بسیار بیشتری وجود دارند که وعده میدهند و حتی قصدی برای انجام آن ندارند.تشخیص عدم تعهدچند نمونه از کلمات و عباراتی که نشان‌دهنده دلیل بر عدم تعهد است:۱.لازم است/ باید:لازم است ما این را انجام دهیمکسی باید این اتفاق را رقم بزند۲ . امید و آرزو (کاش):امیدوارم تا فردا این را انجام دهم.کاش زمانی برای آن داشتم.۳. بیایید:بیایید گاهی اوقات قرار بگذاریم.بیایید این کار را تمام کنیم.تعهد چه شکلی است؟جملاتی مثل "من اینکار را تا سه شنبه تمام خواهم کرد".کدنویسیبرنامه‌نویسی یک فعالیت فکری چالش برانگیز و طاقت فرساست. این فعالیت، نیاز به سطحی از تمرکز و توجه دارد.ویژگی‌های کدی که مینویسیم.۱. اول اینکه کد شما باید کار کند. شما باید درک کنید که چه مشکلی را دارید حل میکنید.۲. کد شما باید مساله تعریف شده توسط مشتری را حل کند.۳. کد شما باید با سیستم فعلی متناسب باشد.۴. کد شما باید توسط دیگران برنامه‌نویسان قابل خواندن باشد.کد ساعت ۳ صبحفکر میکردم که دارم فداکاری میکنم و کار کردن در ساعت ۳ صبح همان کاری است که حرفه‌ای‌ها انجام میدهند. در حالی که آن کد در آینده به مشکلی بزرگتر تبدیل شد.کد اضطراببعد از یک دعوای حسابی با همسر بعد از آن سعی کنید برنامه ننویسید؟ آن زمان برای برنامه‌نویسی مناسب نیست. هر برنامه‌ای که تولید کنید بی‌استفاده خواهد بود. بنابراین اول باید نگرانی‌تان را حل کنید.موسیقیموسیقی ممکن است به شما برای نوشتن کد کمک کند اما من بعید میدانم.مسدود شدن ذهن نویسندهگاهی اوقات کد نمی‌آید. در محل کار نشسته‌اید و هیچ اتفاقی نمی‌افتد.راه حل: دو نفره کار کنید.اضافه کاریاضافه کاری میتواند مفید باشد و گاهی اوقات لازم است. اما این کار بسیار خطرناک است.اگر اضافه کاری بیش از دو یا سه هفته طول بکشد قطعا با شکست مواجه خواهد شد. در نتیجه نباید با اضافه کاری موافقت کنید مگر اینکه شخصا بتوانید از عهده آن برآیید.تحویل غلطبدترین مورد این است که وقتی میدانید کاری را انجام نداده‌اید بگویید آن را انجام داده‌اید.کمک کردن به دیگرانمسئولیت برنامه‌نویسان است که برای کمک به یکدیگر در دسترس باشند. این خارج از اخلاق حرفه‌ای است که خود را در یک دفتر یا اتاق از دیگران مجزا کنید و پرسش‌های دیگران را رد نمایید.مشارکت در پروژه‌های متن بازیک کاری که وکلا و پزشکان انجام میدهند انجام کارهای عام‌المنفعه است. حرفه‌‌ای‌ها هم در پروژه‌های متن باز مشارکت میکنند.جلساتنپذیرفتنشما مجبور نیستید در هر جلسه‌ای که دعوت میشوید شرکت کنید. در واقع بیش از حد رفتن به جلسات، غیر حرفه‌ای است. شما مسئول مدیریت زمان خودتان هستید.منبع: کتاب کدنویس تمیز (The Clean Coder) اثر رابرت سی مارتین (“عمو باب”)(راستی اگه دوست داشتی میتونی منو توی لینکدین هم دنبال کنی)