Clean Code – کتابی که هر توسعهدهندهای باید بخواند
Clean Code (کد تمییز) : راهنمای توسعهی نرمافزار به روش چابک
این کتاب سعی دارد توسعهی نرمافزار به روش چابک (Agile) را به شما آموزش دهد. داستان نوشتن کتاب از آنجا شروع شد که رابرت.سی.مارتین (Robert C. Martin معروف به عمو باب) نویسندهی این کتاب، مدتها قبل، سردمدارانِ تفکرِ اجایل را به یک دورهمی دوستانه دعوت کرد. هدف اصلی این دورهمی بررسی نقاط اشتراک متدهای توسعه نظیر اسکرام، کریستال، ایکس.پی، پراگماتیک و … بود. نهایتاً نتیجهی این گردهمایی به نامگذاری متدها و طبقهبندی روشهای مختلف زیر پرچمی تحت عنوان اجایل/چابک (یا Adaptive) منتهی شد. از دیگر ثمرات این جلسه، توافق بر سر ۴ ارزش (Value) کلیدی و ۱۲ اصل(Principle) دیگر مبتنی بر ارزشهای فوق بود که میتوانید در اجایلمانیفستو مطالعه کنید.
بعدها عمو باب به کمک سایر همکارانش در موسسهی Object Mentor روشهای مختلف کدنویسی را بررسی کرده و بهترین موارد را استخراج کردند. این روشها به تدریج روی هم تلنبار شد و نهایتاً در قالب کتابِ Clean Code در اختیار عموم برنامهنویسان قرار گرفت. مفاهیم این کتاب تا آنجا مورد توجه توسعهدهندگان قرار گرفت که در مدت کوتاهی به یکی از پرفروشترین کتابهای آمازون تبدیل شد. رابرت.سی.مارتین با تکیه بر اصول اجایل، نکاتی را در کتابش مطرح کرد که باعث تمییزتر شدن کدها، نگهداری آسانتر، درک بهتر منطق برنامه و بهبود عملکرد آن میشود. در این کتاب روش نوشتن کدهای ماژولار، چگونگی اشکالزدایی برنامه، نحوهی استفاده از توسعهی آزمون محور (TDD: Test Driven Development) و … نیز آموزش داده میشود.
هر مبحثی در مهندسی نرمافزار زاییده نیاز است. معماری برنامه، الگوهای طراحی، استانداردهای نامگذاری، الگوریتمها و … همگی به مرور زمان و بر حسب نیاز خلق شدهاند. تا زمانی که بارها در اثر بروزرسانی کدهای برنامه، قابلیتهای پیشین آن با خطا مواجه نشود، اهمیت تست برنامه بخصوص آزمون واحد (Unit Test) را درک نمیکنید. تا زمانی که نامگذاری بد و دردسرهای نافهمی یا کجفهم کد را تجربه نکنید، اهمیت استانداردهای نامگذاری را درک نمیکنید. اینها را قبلاً افراد دیگری تجربه کردهاند. پس بهتر است از تجربیات ارزشمند آنها استفاده کنیم. به همین خاطر Clean Code را پیشنهاد میکنم بخوانید. آن هم دقیق، خوب و با حوصله!
البته عمو باب هم مثل من و شما یک آدم معمولی است و هرقدر هم دانش و تجربهاش بالا باشد، ممکن است خطا کند. مقچابصدوم این است که کتاب را بخوانید ولی پرستش نکنید. طوری نباشد که مفاهیم این کتاب یا هر کتاب دیگری را وحی منزل بدانید و در بحثها و گفتمانها، یک کلام ختم کلام کنید! اما قول میدهم اغلب مفاهیم کتاب را سازگار با عقل و منطقتان ببینید. لااقل به بخش عمدهی این کتاب نقد چندانی وارد نیست (البته نقد فنی). پس خواندن Clean Code را به تمامی توسعهدهندگان، تسترها، مدیران پروژه، تحلیلگران و معماران توصیه میکنم. پیشنهاد میکنم نسخهی کاغذی این کتاب را هم در قفسهی کتابخانهی خود داشته باشید. کتاب کاغذی چیز دیگری است (کتابخوانهای حرفهای، این حرف را خوب میفهمند 🙂 )
بخشهای جالبی از این کتاب را با فرجه برایتان ترجمه میکنم ولی بعداً خودتان به زبان اصلی بخوانید. حتی اگر زبان فارسی کتاب را هم پیدا کردید بازهم توصیه میکنم که کتاب اصلی را فراموش نکنید.
- نوشتن کدهای تمییز به کارهایی گفته میشود که با انجامشان، خودتان را حرفهای بدانید. هیچ گونه توجیه قابل قبولی وجود ندارد که بخواهید کمتر از عالی کار کنید؛
- این زبانِ برنامهنویسی نیست که برنامه را ساده نشان میدهد بلکه آن برنامهنویس است که زبان را ساده نشان میدهد!؛
- اصل تکمسئولیتی: بیانگر این است که هر ماژول یا کلاسی بایستی فقط مسئول بخشی از عملکرد برنامه باشد. این مسئولیت باید به صورت کامل در یک کلاس کپسوله شود. در واقع تمامی خدمات برنامه باید توسط مسئولیتهای مختلف به عهده گرفته شود؛ رابرت.سی.مارتین معتقد است: «هر کلاسی تنها باید یک دلیل برای تغییر داشته باشد.»؛
- همان چیزی را بگویید که منظورتان هست. و منظورتان را همان چیزی قرار دهید که میگویید: نامگذاری توابع بایستی پیرو این قانون باشد؛
- اصل باز-بسته (Open-Closed): در برنامهنویسی شیگرا منظور از قاعده Open-Closed این است که هر جزئی از برنامه (کلاس، ماژول، فانکشن، متد و …) برای توسعه باز ولی برای تغییر بسته باشد. این کار اجازه میدهد تا بدون تغییر سورس اصلی، رفتار بخشی از برنامه را گسترش دهیم؛
- از نامهای گویا و توصیفکننده استفاده کنید: اصل وارد کانینگهام را به خاطر بیاورید: «کدهای شما زمانی تمییز هستند که هر جزئی از برنامه دقیقاً همان کاری را انجام دهد که انتظار دارید.» نیمی از این اصل به نامگذاری خوب توابع کوچک که تنها کار مشخصی را انجام میدهند برمیگردد. هرچقدر توابع کوچکتر و خاصمنظورهتر باشند، انتخاب نامی گویا و ساده برای آنها آسانتر است؛
- خودت را تکرار نکن (DRY: Don’t Repeat Yourself): کدهای تکراری باعث میشود تا کار اصلاح الگوریتم بسیار سختتر شود. چنین کدهایی علاوه بر سختتر کردن ۴ برابری اصلاح کدها، به همین میزان احتمال بروز خطا در منطق کد را هم بیشتر میکنند. در دنیای نرمافزار، تکرار در واقع ریشهی همهی مشکلات بوده و بسیاری از اصول و قواعد مهندسی جهت کنترل یا حذف این معضل مطرح شدهاند؛
- نوشتن برنامه دقیقاً مثل نویسندگی است: هنگام نوشتن یک مقاله چه میکنید؟ اول افکار خود را آزادانه بر روی کاغذ میریزید، بعد این متن را آنقدر ورز میدهید که خوانا و زیبا شود. پیشنویس اولیه متن قطعاً با چیزی که انتظار دارید فاصله دارد. به همین خاطر متن را ویرایش میکنید تا دقیقاً به چیزی تبدیل شود که انتظار دارید؛
- به جای کدهای خطا از استثناء استفاده کنید: مشکل بازگردانی کدهای خطا این است که کد فراخوان را گیج و درهمریخته میکند. وظیفهی کالر (Caller) این است که به محض دریافت کدهای خطا بررسیشان کند. متأسفانه، این کار به سادگی فراموش میشود. به همین خاطر بهتر است در مواجهه با خطا استثناء صادر شود. در این حالت کدهای فرخوان تمییزتر و عاری از هرگونه مدیریت خطاست.
- در هنگام پرتاب کردن استثناء، اطلاعات کافی را هم فراهم کنید: هر استثنایی که پرتاب (Throw) میکنید باید اطلاعات کافی از منبع و ریشهی بروز آن را هم با خود به همراه داشته باشد. در زبانهایی مثل جاوا، سیشارپ امکان دریافت Stack Trace برای هر استثنایی وجود دارد؛ با این حال استک تریس چیزی دربارهی علت بروز خطا بیان نمیکند. [کارش این است که قدم به قدم استثناها را پی میگیرد تا به ریشهی اصلی برسد.] یک پیام خطا آماده کنید و آن را به همراه استثناء ارسال نمایید. همچنین عملی که باعث بروز خطا شده و نوع آن خطا را مشخص کنید. اگر از مکانیزم لاگ در برنامهی خود استفاده میکنید. اطلاعات کافی برای لاگ کردن خطا در بلاکهای Catch آماده کنید.
یکبار دیگر خواندن این کتاب را به همهی توسعهدهندگان و برنامهنویسان عزیز توصیه میکنم. شاید حجم کتاب کم به نظر برسد ولی این کتاب قطعاً به اندازهی دهها کتاب، حرف برای گفتن دارد. Clean Code را بخوانید و سعی کنید به اصولش عمل کنید تا شاهد تغییر سبک کدنویسی خود باشید. رعایت این اصول شاید سخت باشد ولی ممکن است.
0 دیدگاه
نشانی ایمیل شما منتشر نخواهد شد. بخشهای موردنیاز علامتگذاری شدهاند *