محمد علی قنبری
محمد علی قنبری
خواندن ۴ دقیقه·۶ سال پیش

مقدمه ای بر کلین کد - کدی که بد نوشته میشه / قسمت دوم

اخیرا مقدمه کتابی رو میخوندم به نام Implementaion Patterns نوشته Kent Beck داخلش میگه این کتاب بر مبنای یک فرضیه نااستوار بنا شده و اون اینه که "کدنویسی خوب اهمیت داره" .

واقعا این یک فرضیه نا استوار و شکنندس؟ منکه قبول ندارم , من فکر میکنم این چیزی که بهش میگیم فرضیه اونم تازه نااستوار یکی از قدرتمند ترین , قابل اتکا ترین و بیش از همه مهمترین فرضیه در هنر و حرفه ماست (و من فکر میکنم Kent خودش خوب اینو قبول داره) ما میدونیم کد خوب نوشتن اهمیت داره چرا که باید برای زمان زیادی با این کدا دست پنجه نرم کنیم.

شرکتی رو میشناسم که چندین سال پیش یک اپلیکشن فراگیر رو نوشت , خیلی معروف شد خیلی از ادمای حرفه ای اون رو خریدن و ازش استفاده کردن. ولی زمانی که چرخه های رلیز نسخه های جدید تند تند زیاد شد , باگ های نسخه فعلی حل نشده میرفتن سراغ نسخه بعدی ,سرعت لود زیاد شده بود کرش کردن اپ به وفور اتفاق میوفتاد . یادم میاد روزی رو که با سردرگمی تمام برنامه رو بستم و دگ هیچ وقت ازش استفاده نکردم.

مدت ها بعد یکی از کارکنان اولیه اون شرکت رو دیدم و ازش پرسیدم که چه اتفاقی افتاد. پاسخ اون شخص ترس من رو تایید کرد. اونا برنامرو با کلی بهم ریختگی در کد و عجله تمام وارد بازار کردن . همین طور که ویژگی جدیدی رو تند تند به اپ اضافه میکردن وضعیت کدهای بهم ریخته بدتر و بدتر میشد تا زمانی که دیگه بیشتر از اون نتونستن مدیریتش کنن این کد بد بود که شرکت رو پایین کشید.

تا حالا به میزان قابل توجهی پدرتون سر کد بد درومده؟ اگر شما یک برنامه نویس باشید حالا صرفا با هر مدت زمان تجربه ای که دارید قطعا درون چنین مخمصه ای گرفتار شدید , در حقیقت ما براش یه اسم داریم بهش میگن دست و پا زدن (توی آب یا باطلاق یه همچین حسی رو میده) ما توی کدی که بد نوشته شده دستو پا میزنیم بعضا میشه تشبیهش کرد به کلافی در هم تنیده که زور میزنیم این تنیدگی رو از بین ببریم طوری درگیر میشیم که بالاخره راهمون رو پیدا کنیم به امید این که یه نکته یا نشونه ای پیدا بشه سر نخی چیزی که بهمیم توی کد چخبره ولی هر چی بیشتر مواجه میشیم باهاش یه سری کده بیمعناست.

البته که با کد بد اذیت شدید . خب پس - چرا نوشتیدش به کجا انقد زود میخواستید برسید؟ عجله داشتید؟ قطعا خب .شاید احساس کردید زمان برای انجام یک کار خوب رو نداشتید شاید مدیرتون ازتون ناراحت میشده که شما بخواید وقت بگذارید تا کد رو مرتب کنید. شاید فقط میخواستید پروژه هر چه زودتر تموم شه بره پی کارش . یا شاید یه نگاهی به برنامه ریزی بقیه چیز هایی داشتید که قول داده بودید تموم کنید و تصور کردید که احتیاج هست که این ماجول رو یه جوری سر هم کنید تا بتونید برید سراغ مورد بعدی . ما هممون این کار رو کردیم :)))

ما هممون نگاه به چرتو پرتایی که نوشتیم کردیم و تصمیم گرفتیم رهاشون کینم تا روز دیگه حتما درستش کنیم . ما هممون همین که برنامه کار میکرده برامون سبکی مسکن بوده و تصمیم گرفتیم که یه کد کثیفی که کار میکنه بهتر از هیچیه هممون گفتیم یه روزی برمیگردیمو درستش میکنیم .صد البته :) ما اون روزا قانون LeBlanc رو نمیدونستیم " بعدا یعنی هرگز"



هزینه کلی ایجاد کردن یا ساخت چیزی درهم برهم

اگر بیشتر از 2 یا 3 ساله که برنامه نویس هستید احتمالا به طور قابل توجهی سرعت کارتون بخاطر کد بهم ریخته یه برنامه نویس دگ پایین اومده. در بازه یک یا دوساله تیم هایی که بسیار پرسرعت در استارت پروژه به پیش میرفتن در نهایت روزی خودشون با سرعت حلزون در حال پیشرفتن روی همون پروژه دیدن ,هر تغییر در کد باعث خراب شدن چند قسمتی دیگه از کد میشه. هیچ تغییری بدیهی نیست. هر افزودن ویژگی یا ویرایشی در سیستم نیاز داره تا پیچیدگی ها و درهم تنیدگی های موجود رو بفهمه تا بتونه پیچیدگی ها و تنیدگی های خودشو اضافه کنه . با گذر زمان این به هم ریختگی ها اون قدر بزرگ و عمیق میشن که هیچ راهی برای تمیز کردنشون نیست.

همین طور که این بهم ریختگی ها برنامه مارو میسازن کارامدی کل تیم رو به کاهش ادامه پیدا میکنه تقریبا به صفر میرسه همین طور که بهره وری کم میشه مدیریت هم تنها کاری که بلده انجام میده : چیزای جدیدی به پروژه اضافه میکنن بلکه بهره وری تیم بیشتر بشه . ولی این چیزای جدید در ذات نرم افزار جایگاهی نداره(یعنی از روز اول برنامه با چنین هدفی تحلیل و پیاده نشده) اونا فرق بین تغییری که با ذات نرم افزار همخوانی داره با تغییری که ذات برنامه رو زیر سوال میبره رو نمیدونن. جلوتر که میریم اونها و همه بچه های تیم برنامه نویس زیر فشار ترسناکی برای بالابردن بهره وری میرن . در نهایت انقدر چرت و پرت و بهم ریختگی ایجاد میکنن و باعث میشن بهره وری به صفر برسه و بووم .

توی قسمت بعدی ادامه همین مباحثی که باعث ایجاد انگیزه میشه تا این بحث رو جدی بگیریم مینویسم انگیزه چیزه مهمیه مطالب فوق العاده ای توی وب هست اما بدونه انگیزه خیلی رو به جلو نمیریم میدونید بهترین انگیزه برای ادامه این بحث چیه ؟ اینکه یک بار شما همین شکست ها رو تجربه کنید وگر نه داستان زیاده :))

clean codeکد تمیزبرنامه نویسی
شاید از این پست‌ها خوشتان بیاید