Even bad code can function. But if code isn't clean, it can bring a development organization to its knees. Every year, countless hours and significant resources are lost because of poorly written code. But it doesn't have to be that way. Noted software expert Robert C. Martin presents a revolutionary paradigm with Clean Code: A Handbook of Agile Software Craftsmanship. Martin has teamed up with his colleagues from Object Mentor to distill their best agile practice of cleaning code on the fly into a book that will instill within you the values of a software craftsman and make you a better programmer but only if you work at it. What kind of work will you be doing? You'll be reading code - lots of code. And you will be challenged to think about what's right about that code, and what's wrong with it. More importantly, you will be challenged to reassess your professional values and your commitment to your craft. Clean Code is divided into three parts. The first describes the principles, patterns, and practices of writing clean code. The second part consists of several case studies of increasing complexity. Each case study is an exercise in cleaning up code - of transforming a code base that has some problems into one that is sound and efficient. The third part is the payoff: a single chapter containing a list of heuristics and "smells" gathered while creating the case studies. The result is a knowledge base that describes the way we think when we write, read, and clean code. Readers will come away from this book understanding
‣ How to tell the difference between good and bad code ‣ How to write good code and how to transform bad code into good code ‣ How to create good names, good functions, good objects, and good classes ‣ How to format code for maximum readability ‣ How to implement complete error handling without obscuring code logic ‣ How to unit test and practice test-driven development
This book is a must for any developer, software engineer, project manager, team lead, or systems analyst with an interest in producing better code.
Robert Cecil Martin, commonly called Uncle Bob, is a software engineer, advocate of Agile development methods, and President of Object Mentor Inc. Martin and his team of software consultants use Object-Oriented Design, Patterns, UML, Agile Methodologies, and eXtreme Programming with worldwide clients.
He was Editor in Chief of the C++ Report from 1996 to 1999. He is a featured speaker at international conferences and trade shows.
به نظرم این کتاب برای برنامهنویسان تازه کار خوبه. خیلی از چیزهایی که توش گفته شده رو به شکل تجربی میشه بهشون رسید. من یه فصلش رو که توش یک تکه کد رو ریفکتور میکرد رو چاپ کردم که خط به خط و با دقت بخونم، ببینم زمان ریفکتور چی تو ذهنش میگذره. بعد دیدم چیز خیلی عجیبی نبود و من هم اگه بودم شبیه همین کارها رو میکردم. کلا هم فصل آخرش (Smells and Heuristics) رو بخونید خوبه. به نظرم کتاب ریفکتورینگ آقای فاولر خیلی کتاب باارزشتریه در این زمینه
کلین کد عملا از اون دسته کتابهایی در دنیای نرمافزار هست که یک دانش بنیادی به ما میدن و خب طبیعتا از نظر خیلیها « ماست رید » حساب میشه، در کنار کتابهایی مثل ریفکتورینگ و پراگماتیک پروگرمر و تیدیدی بای اگزمپل و غیره.
خوندن این کتاب آوردههای زیادی داره، از آشنا شدن با یکسری مفاهیم اولیه گرفته تا مباحثی که هر فصل بهش پرداخته میشه، از اون طرف تلاش خوبی شده تا مباحث به صورت صرفا تئوری در نیان و فرد با فرآیند اصلاح هم آشنا بشه یا حداقل قبلش تو کانتکست قضیه قرار بگیره. یک سری موارد شاید توشون اغراق شده باشه یا بعضا مواردی دیگه کاربرد نداشته باشن ( با توجه به امکانات IDEها و غیره )، اما به نظرم حتی همین اغراقها هم مفیدن. همینا هم باعث میشن یک سری موارد مهم تو ذهن آدم محکمتر بشن. کلا توضیح زیادتر از نظر من تو این کتابا خیلی مفیده، باعث میشه پایههای اون قضیه تو ذهن آدم محکمتر بشن.
مثالهای کتاب به زبان جاوا هستن، اما در اکثر موارد مفاهیمی که مطرح میشن قابل نگاشت به زبانهای دیگهن و از این نظر مشکل خاصی وجود نداره. درصد خیلی خیلی کمی از کتاب هست که بشه گفت اسپسیفیک مختص زبان جاوا هست ( از روی دسته بندی بخش سوم بخوایم بریم عملا ۳/۶۶م قضیه ) ولی خب تو متن کتاب شاید بشه گفت ۱۰ درصد.
اما یک موردی که به نظرم داونساید کتاب حساب میشه، تو نحوهی تمیزکاریها خصوصا در بخش دوم کتاب هست ( بخشهارو در ادامه توضیح میدم ). به این صورت که یک سری تغییرات، به نظرم واقعا « بهبود » نیستن، صرفا « از یک مسیر دیگه رفتن » و یا از یک مسیر دیگه پیاده کردن جزئیاتن. از روی متن و توضیحات آنکلباب هم مشخص هست قضیه، عموما دلایل آورده شده برای اون قسمتها ضعیف هستن. این شاید تو ذهن بعضی مخاطبها قضیه رو بد نشون بده. از اونجایی که این کتاب یه جورایی داره به شکل یک « بایبل » در میاد ( که خوب هم هست ) بعضیا ممکنه این قسمتهارو زیادی جدی بگیرن و خودشون رو مجبور کنن حتما حتما به همین شکل و از همین طریق برن و یه مقداری تعصب بیجا اینجاها شکل بگیره.
- توضیح استراکچر کتاب: همونطوری که تو مقدمهی کتاب اومده، کتاب سه بخش داره. بخش اول مفاهیم رو توضیح میده مقدار کمی حالت پرکتیکال داره، مثلا تکهکدهایی برای درک بهتر قضیه توش آورده شدن. بخش دوم به استفاده از این مفاهیم رو میاره و شروع به تمیز کردن یک سری پروژه میکنه، اینجا دیگه با یکسری تکهکد طرف نیستیم و عملا یک کلاس یا پروژه رو به صورت کامل تحلیل میکنیم. با دقت خوندن این بخش میتونه جذاب باشه. و بخش سوم هم که یک تک فصل هست، مواردی که تو بخش دوم اصلاح میشدن رو به صورت حدودا دستهبندی شده به عنوان رفرنس قرار داده که این هم هر چند وقت یک بار خوندنش میتونه کمک کنه به ماندگاری مفاهیم کتاب.
- اضافات و پ.ن: یادش بخیر، عید سالی بود که کنکور داشتیم. یه برنامه نویس اندرویدی بود به اسم کریم ابوزید، این بندهخدا توی گوگلپلاسش یه پست گذاشت که عکس کتاب کلین کُد بود و ازش تعریف کرد. اون موقع دانش برنامهنویسی من خیلی کم بود، مشارکت نصفه و نیمه تو یه پروژهی اندروید و برنامهنویسی در سطح مدرسه و ور رفتن با پیاچپی و غیره احتمالا ماکسیموم تجربهی من از برنامه نویسی بود. اونجا بود که یه روزی رو به جای تست شیمی و ریاضی زدن گذاشتم برای خوندن این کتاب ( با اون وضعیت اسفناک زبانم :)) ). بعد کنکور دوباره اومدم سراغش، یادمه اون موقع حتی نمیدونستم اصن فرق این کتاب با کلید کدر چیه و اولش داشتم اون رو میخوندم :)) اصن نصف چیزایی که میخوندم رو شاید درست حسابی درک هم نمیکردم، چون از قبل به عنوان یه چلنج باهاشون برخورد نکرده بودم، اصن نمیدونستم این حرفا واقعا مهم هستن و بیگدیل حساب میشن. ولی خب خلاصه بعد چند سال همت کردم و کامل از اول خوندمش :)) این خوشحال کنندهس برام. یه جورایی یه سری خاطرههایی حین خوندنش برام زنده میشد که باعث میشد دقایقی رو از کتاب دور بشم. کاش یه دور دیگه اون دوران رو تجربه میکردم :)
به قول یکی این کتاب باید بشه کتاب مذهبی برنامه نویسا، هرچند وقت یه بار برگردی و بخونیش، من خودم به شخصه هر اشتباهی که تو کتاب گفت نباید بکنین رو تو کدام میکردم :)) و واقعا اگه به توصیه هاش عمل کنین میبینین چقدر تاثیر داره رو تمیزی و خوانایی کد، تست کردن و دیباگ (و حتی پرفرمورمنس!)
با این یکی کتاب مارتین بیشتر کنار اومدم. نثرش برام روانتر بود. شاید هم شرایطی که در اون، این کتاب رو مطالعه می کردم بهتر بود. کتابی نیست که به خیلی تازه کارها توصیه اش کنم. کلا معتقدم کتابهایی در حوزه تمیزی کد و ریفکتور و ... رو آدم باید بعد دو سه سال کار برنامه نویسی بخونه که قشنگ درد کشیده باشه و نیاز رو حس کرده باشه بعد بخونه. البته بهتر اونه که برنامه نویسی رو از اول روی اصول یاد گرفته باشه. کتاب خوبی بود. بدون کش دادن زیاد مطالب رو گفته بود. اگر مثال هم لازم بود گفته بود. هرچند یکی دو جا حس کردم نیاز به مثال داشت و مثال نزده بود. زبان مبنای مثال ها جاوا بود. عیبی که کتاب داشت بخش هایی بود که مطلقا مربوط به زبان جاوا بود. یعنی برای منی که اگرچه جاوا بلدم ولی در حال حاضر با زبانهای دیگه کار می کنم خیلی مفید نبود. (چون حداقل تا یکسال آینده با زبان جاوا کار ندارم و این نکات آموزشی رو غالبا فراموش می کنم و ...). نمی شه گفت این ضعف کتاب بود، ولی خوب عملا برای همه این بخشها، مفید نبود. ولی کلیت کتاب مفید بود. درسته که احتمالا خیلی از مباحث رو قبلا هم شنیده و خوندیم ولی مطالعه و باز خوانی شون در یک مجموعه شسته رفته با جمع بندی خوب، حتی اگر صرف یادآوری و تذکر هم باشه سازنده است و من شخصا خیلی استفاده کردم. با این که قبلا مطالب همین کتاب رو به صورت ارائه در جلسات آموزشی شنیده بودم، خوندنش برای من خالی از لطف و فایده نبود.
اگر برنامه نویس هستید و این کتاب رو تا امروز نخوندید احتمالا بعد از خوندش خودتون رو سرزنش می کنید که چرا این کتاب رو تا امروز نخونده بودم نکته مهم اینه که چنین علمی فقط بخشی از بازی است و بهش قناعت نکنید صرفا کلین کد زدن راهگشا نخواهد بود