Clean Craftsmanship: Disciplines, Standards, and Ethics
در کتاب Clean Craftsmanship: Disciplines, Standards, and Ethics (صنعت گری تمیز: نظم و انضباط، استانداردها و اصول اخلاقی)، Robert C. Martin (عمو باب) افسانه ای، راهنمای قطعی هر برنامه نویسی برای خوب کار کردن را نوشته است. مارتین مقررات، استانداردها و اصول اخلاقی مورد نیاز شما را برای ارائهی سریع و کارآمد کدهای قوی و موثر گرد هم آورده است تا به تمامی نرم افزارهایی که مینویسید هر روز افتخار کنید.
مارتین، نویسنده کتاب پر فروش The Clean Coder، با یک راهنمای عملی، فنی و تجویزی برای پنج دستور العمل بنیادی از ساخت نرم افزار شروع میکند: توسعه آزمون محور، ریفکتور کردن، طراحی ساده، برنامه نویسی مشارکتی (جفت شدن) و آزمونهای پذیرش. سپس به سراغ استانداردها میرود و انتظارات اساسی که جهان از توسعه دهندگان نرم افزار دارد را ترسیم میکند و اینکه چگونه این انتظارات اغلب از منظر خودشان متفاوت هستند را روشن میکند و به شما در اصلاح این عدم تطابق کمک میکند. سرانجام، او به اخلاق حرفه برنامه نویسی میپردازد و ده قول اساسی را که همه توسعه دهندگان نرم افزار باید به همکاران خود، کاربران و بیش از همه به خودشان بدهند را توصیف میکند.
با راهنماییها و مشاورههای مارتین، همواره میتوانید کدی را بنویسید که اعتماد ایجاد کند تا اینکه آن را تضعیف کند و در میان کاربران و کل جامعه ای که برای بقای خود به نرم افزار وابسته هستند اعتماد ایجاد کنید.
قبل از شروع، دو مسئله وجود دارد که باید با آنها کنار بیاییم تا اطمینان حاصل کنیم که شما، خواننده نجیب، چارچوب مرجع ارائه شده در این کتاب را درک میکنید.
درباره اصطلاح صنعتگری (Craftsmanship)
آغاز قرن بیست و یکم با مجادلاتی بر سر زبان روبرو شد. ما در صنعت نرم افزار سهم خود را از این مجادله شاهد بودیم. اصطلاحی که اغلب به عنوان شکست فراگیر شد، صنعتگر (craftsman) بود. من کاملاً به این موضوع فکر کردم و با بسیاری از افراد با نظرات مختلف گفتگو کردم و به این نتیجه رسیدم که اصطلاح بهتری برای استفاده در متن این کتاب وجود ندارد. گزینههای دیگری هم برای صنعتگر (craftsman) در نظر گرفته شده بود، از جمله پیشه ور (craftsperson)، craftsfolk، crafter و موارد دیگر. اما هیچ یک از این اصطلاحات، جاذبههای تاریخی صنعتگر (craftsman) را به همراه ندارند و این جاذبههای تاریخی در اینجا برای انتقال پیام مهم هستند.
صنعتگر، شخصی را به ذهن متبادر میکند که در یک فعالیت خاص بسیار ماهر و متخصص است؛ کسی که با ابزارها و تجارت خود راحت باشد، به کار خود افتخار کند و بتوان به او اعتماد کرد تا با وقار و حرفه ای بودن خود رفتار کند.
ممکن است برخی از شما با تصمیم من مخالف باشید و درک میکنم که چرا ممکن است چنین باشد. من فقط امیدوارم که شما به هیچ وجه از آن به عنوان تلاشی برای انحصاری کردن اش تعبیر نکنید، چرا که این به هیچ وجه قصد من نیست.
در یک مسیر درست
با خواندن کتاب «صنعتگری تمیز: نظم و انضباط، استانداردها و اصول اخلاقی یک صنعتگر نرم افزار»، ممکن است که این احساس را پیدا کنید که این همان مسیر درست برای صنعتگری است. این ممکن است برای من باشد، اما لزوما برای شما نیست. من این کتاب را به عنوان نمونه ای از مسیر خودم به شما پیشنهاد میکنم. شما، البته که باید مال خودتان را انتخاب کنید.
آیا در نهایت ما به یک مسیر درست احتیاج خواهیم داشت؟ نمیدانم. شاید. همانطور که در این صفحات خواهید خواند، فشار برای تعریف دقیق حرفهی نرم افزار در حال افزایش است. بسته به حساسیت نرم افزار ایجاد شده، ممکن است بتوانیم از چندین مسیر مختلف حرکت کنیم. اما همانطور که در ادامه میخوانید، تفکیک نرم افزارهای حساس و غیر حساس ممکن است به همین سادگی هم نباشد.
من به یک چیز اطمینان دارم. روزهای «قضات» به پایان رسیده است. دیگر کافی نیست که هر برنامه نویسی آنچه را که از نظر خود درست است را انجام دهد. پای برخی از نظم و انضباط ها، استانداردها و اصول اخلاق به میان میآیند. تصمیمی که امروز پیش روی ماست این است که آیا ما برنامه نویسان آنها را برای خودمان تعریف میکنیم یا کسانی که ما را نمیشناسند بر ما اجبار خواهند کرد.
مقدمه ای بر کتاب
این کتاب برای برنامه نویسان و مدیران آنها نوشته شده است. اما به تعبیری دیگر، این کتاب برای تمام جامعه بشری نوشته شده است. این خود ما برنامه نویسان هستیم که ناخواسته خود را در نقطهی اتکای آن جامعه قرار داده ایم.
برای خودتان
اگر شما یک برنامه نویس با چندین سال تجربه هستید، احتمالا با حس رضایت از استقرار یک سیستم و کار کردن افراد با آن آشنا هستید. از اینکه شما سهمی در چنین دستاوری داشتید، احساس افتخار خاصی میکنید. شما به اینکه سیستم را بیرون دادید افتخار میکنید.
اما به روشی که آن سیستم را بیرون دادید افتخار میکنید؟ آیا افتخار شما افتخار تمام کردن است؟ یا افتخار شما، افتخار طرز کار است؟ آیا افتخار میکنید که سیستم مستقر شده است؟ یا به روشی که آن سیستم را ساختید افتخار میکنید؟
وقتی پس از یک روز سخت کد نویسی به خانه میروید، به خودتان در آینه نگاه میکنید و میگویید: «امروز خوب کار کردم»؟ یا باید دوش بگیرید؟
خیلی از ما در پایان روز احساس کثیفی میکنیم. خیلی از ما احساس میکنیم که در انجام کارهای غیر استاندارد گیر افتاده ایم. خیلی از ما احساس میکنیم که کیفیت پایین مورد انتظار است و برای دستیابی به سرعت بالا ضروری است. خیلی از ما فکر میکنیم که بهره وری و کیفیت رابطه عکس دارند.
در این کتاب، من سعی در شکستن این طرز فکر دارم. این کتابی است درباره خوب کار کردن. این کتابی درباره انجام یک کار خوب است. این کتابی است که مقررات و روش هایی را توصیف میکند که هر برنامه نویس باید بداند تا سریع کار کند، مثمر ثمر باشد و به آنچه که هر روز مینویسد افتخار کند.
برای جامعه
قرن بیست و یکم، اولین بار در تاریخ بشریت است که جامعه ما برای بقای خود به فناوری وابسته شده است و این فناوری تقریباً هیچ شباهتی به نظم یا کنترل پیدا نکرده است. نرم افزار ها، به همه جنبههای زندگی مدرن هجوم آورده اند، از دم کشیدن قهوه صبحگاهی تا تأمین سرگرمیهای عصرانه، از شستن لباس تا رانندگی با اتومبیل هایمان، از اتصال ما به یک شبکه گسترده جهانی تا تقسیم بندی ما از نظر سیاسی و اجتماعی. به معنای واقعی کلمه، هیچ جنبه ای از زندگی در دنیای مدرن وجود ندارد که تحت سلطه نرم افزار نباشد. در عین حال کسانی از ما که این نرم افزارها را میسازند، چیزی فراتر از گروهی از سرهم بندکنها نیستند که به سختی تصوری از کار ما دارند.
اگر ما برنامه نویسان درک بهتری از آنچه انجام میدادیم داشتیم، آیا نتایج 2020 مجمع نمایندگان آیووا وقتی که وعده داده شده بود آماده نبود؟ آیا در دو سانحه سقوط 737 مکس، 346 نفر جان خود را از دست داده بودند؟ آیا Knight Capital Group طی 45 دقیقه 460 میلیون دلار ضرر میکرد؟ آیا 89 نفر در تصادفات شتاب ناخواسته تویوتا جان خود را از دست داده بودند؟ آیا 228 سرنشین هواپیمای کره ای 801 هنوز زنده بودند؟
هر پنج سال تعداد برنامه نویسان در جهان دو برابر میشود. این برنامه نویسان در مورد کار خود بسیار کم آموزش دیده اند. به آنها ابزار نشان داده شده و چند پروژهی اسباب بازی هم برای توسعه داده شده است، و سپس در بین نیروی کار با رشد تصاعدی ریخته میشوند تا به تقاضای فزاینده برای نرم افزارهای بیشتر پاسخ بدهند.
هر روزه، خانههای پوشالی که ما آنها را نرم افزار صدا میزنیم، خودشان را عمیق و عمیقتر در زیرساخت ها، نهاد ها، دولتها و زندگیهای ما القا میکنند. و هر روز، خطر فاجعه بیشتر میشود.
از چه فاجعه ای صحبت میکنم؟ این نه فروپاشی تمدن ما و نه از هم پاشیدگی ناگهانی همهی سیستمهای نرم افزاری به یکباره نیست. خانههای پوشالی که در معرض فروپاشی اند، خودشان از سیستمهای نرم افزاری تشکیل نشده اند. بلکه این پایه شکننده اعتماد عمومی است که در معرض خطر است.
سوانح 737 Max بسیار بیشتری، حوادث شتاب ناخواسته Toyota، حوادث EPA فولکس واگن کالیفرنیا یا حوادث انجمن آیووا و خرابیها یا تخلفات نرم افزاری قابل توجه بسیار بیشتری و عدم وجود نظم، اصول اخلاقی و استاندارد ها، به کانون توجه عموم مردم بی اعتماد و عصبانی تبدیل خواهد شد. سپس آیین نامهها دنبال میشوند: آیین نامه هایی که هیچ یک از ما نباید بخواهیم، آیین نامه هایی که توانایی ما را در جستجوی آزادانه و گسترش صنعت توسعه نرم افزار فلج میکنند.
هدف این کتاب این نیست که جلوی هجوم سریع را برای استفاده هرچه بیشتر از نرم افزار بگیرد. همچنین هدف کاهش سرعت تولید نرم افزار نیست. چنین اهدافی، تلاشها را هدر خواهند داد. جامعه ما به نرم افزار نیاز دارد و فارغ از هر چیزی، به آن دست پیدا خواهد کرد. تلاش برای کنترل آن نیاز، جلوی فاجعه کاهش اعتماد عمومی را نخواهد گرفت.
بلکه، هدف این کتاب این است تا توسعه دهندگان نرم افزار و مدیران آنها نیاز به نظم و انضباط را احساس کنند و به آن ها، نظم و استاندارد هایی که در به حداکثر رساندن توانایی آنها در تولید نرم افزار موثر، قوی و مقاوم در برابر خطا نقش دارند را آموزش دهد. تنها با تغییر روش کار ما برنامه نویسان، از طریق بالا بردن نظم، اصول اخلاقی و استانداردهای خودمان، میتوانیم خانههای پوشالی را محکم کرد و از فروپاشی آنها جلوگیری کرد.
ساختار این کتاب
این کتاب در سه قسمت نوشته شده است که سه سطح را توصیف میکند: نظم و انضباط، استانداردها و اصول اخلافی.
نظم و انضباط پایینترین سطح است. این قسمت از کتاب، عملی، فنی و تجویزی است. برنامه نویسان با هر درجه ای، از خواندن و درک این قسمت بهره مند خواهند شد. در این قسمت چندین ارجاع به فیلم نیز وجود دارد. این فیلمها ریتم توسعه آزمون محور و نظم و مقررات ریفکتور کردن را به صورت بلادرنگ نشان میدهند. مطالب نوشته شده در این کتاب نیز سعی دارند تا این ریتم را حفظ کنند، اما هیچ چیز به اندازه همان فیلمها برای این منظور مناسب نیستند.
استانداردها، سطح متوسط هستند. در این بخش انتظاراتی که دنیا از حرفهی ما دارد، بیان شده است. این بخش خوبی برای مدیران برای مطالعه است، به طوری که آنها بدانند که چه انتظاری از برنامه نویسان حرفه ای باید داشته باشند.
اصول اخلاقی در بالاترین سطح است. این بخش، زمینه اخلاقی حرفهی برنامه نویسی را توصیف میکند. این کار را نیز به شکل سوگند یا مجموعه ای از عهدها انجام میدهد. این موضوع با بحثهای تاریخی و فلسفی زیادی همراه است که باید توسط برنامه نویسان و مدیران خوانده شود.
یادداشتی برای مدیران
این کتاب حاوی اطلاعات زیادی است که شما آنها را مفید خواهید یافت. همچنین این کتاب شامل کمی اطلاعات فنی نیز هست که احتمالا شما به آنها نیازی نخواهید داشت. توصیه من این است که مقدمه هر فصل را بخوانید و وقتی مطالب فنیتر از نیاز شما میشود، خواندن را متوقف کنید. سپس به فصل بعدی بروید و دوباره شروع کنید.
اطمینان حاصل کنید که قسمت دوم، استانداردها و قسمت سوم، اخلاق را بخوانید. اطمینان حاصل کنید که مقدمه هر یک از این پنج دستور العمل را نیز بخوانید.