فاجعه کد کثیف!

داستان از یه مریضی، وسط یه پروژه سنگین شروع شد. دوهفته‌ای که نتونستم کار کنم و همکارم باید پروژه رو جلو می‌برد...و بعد از دوهفته‌ای که برگشتم و با وجود کلی تسک، هیچ تغییری تو کامپوننتای خودم ندیدم.چرا؟ چون کدا واضح نبودن و بعضی کامپوننتا به 700-800 خط کد میرسیدن :))) دقیقا همون موقع بود که تصمیم گرفتم راجع به Clean Code کتاب بخونم و تحقیق کنم. و اونجا بود که لذت کدزدن و معنای واقعی development رو درک کردم :)خیلیا میگن کد من تمیزه و مشکلی نداره و غیره و غیره... و واقعا توی خودشون نیازی به خوندن این قوانین نمی‌بینناگر کسی بدون توجه به قوانینی که ثابت شدست همچین حرفی بزنه، قطعا اشتباهه و احتمالا دود کد بد تو چشم همچین فردی نرفته!شاید چون هدف این افراد از کد زدن، فقط و فقط "پیاده‌سازی" هست و وقتی به این مرحله برسن، شاد و خندان وارد تیکه‌های بعدی پروژه میشن در حالی که نمیدونن تو آینده نزدیک، قراره چه اوضاعی پیش بیاد?برای همچین تفکری، یه نقل قول معروف از Martin Fowler داریم که میگه:Any fool can write code that a computer can understand. Good programmers write code that humans can understand.می‌دونستی اگه if, else, while تو کدات، بیشتر از یه خط باشه، باعث بی‌نظمی شده؟می‌دونستی اگه فانکشنت بیشتر از 20خطه، یعنی از قوانین clean code پیروی نکردی؟میدونستی 90-95درصد کامنتایی که وسط پروژت داری، فقط و فقط کداتو شلوغ کرده؟میدونستی فانکشنی که بیشتر از یه کار انجام بده، از اساس غلطه؟ (مثلا فکر کن یه کامپوننت توی فرانت‌اند دستت داری که عمل لایک رو انجام میده. حالا وقتی روی لایکه کلیک شد، تو فانکشنت هم بیای UI رو عوض کنی و یه دونه به تعداد لایکا اضافه کنی، و هم بیای و به API ریکوئست بزنی... غلطه?) پس اگه فانکشنت داره تو argumentها، flag میگیره، شک نکن اون تیکه کد تمیز نیست! چون داره دوتا کار انجام میده و باید به دوتا فانکشن تبدیل شه!میدونستی اگه فانکشنت بیشتر از دوتا argument میگیره، باعث گیجی خواننده کدات میشه؟ حتی خود دوتا argument هم شرط و شروط داره?میدونستی اگه یه تیکه از کدتو داری کپی میکنی که با تغییر یه قسمتیش، دوباره استفادش کنی، احتمال زیاد داری اشتباه میزنی؟Duplication may be the root of all evil in softwareو کلی میدونستی‌های دیگه که اگر این پست ری‌اکشن خوبی بگیره، براتون جدا جدا مینویسمشون :))یه نکته خیلی خیلی مهم!قرار نیست حکایت اون کلاغه باشیم که اومد راه‌رفتن کبک رو یاد بگیره، راه‌رفتن خودشم یادش رفت!قراره هررر سبکی که برا کدزدن داریم رو دقیقا به همون شکل حفظ کنیم. فقط و فقط اولش روی "اجرا کردن" عملکرد مورد نظرمون تمرکز می‌کنیم... دقیقا مثل قبل!نوشتن کد شبیه نوشتن مقاله‌ست!اصلا بیا دو دیقه از بحث کد جدا بشیم و فرض کنیم می‌خوایم مقاله بنویسیماولین کاری که میکنی اینه که هرچی از ذهنت بیرون میاد رو می‌نویسی.چیزی که تو ذهنت بود رو تو مقاله اوردی؟ حالا وقت ویرایش مقاله‌ست!وقت حاشیه خوشگل دادن و اصلاح جمله‌های طولانی و علائم نگارشی و غیره و غیره‌ستیه بار دیگه تیکه بالا رو بخون و این بار به جای مقاله‌نویسی فکر کن داری کد میزنیبه همین سادگی و با هزینه زمانی خیلی کمولی نجات‌دهنده!به درد خودمونم میخوره؟شککک نکن!تا حالا چندبار برات اتفاق افتاده تو کدای خودتم گم بشی؟و انقدددر فانکشنا تو هم تو هم بشه که برای پیدا کردن یه فانکشن ساده، کلی اسکرول کنی و به خاطر اسم variableها (که اگه فرصت شد تو پستای بعدی کامل توضیح میدمشون)، حتی با سرچ هم نتونی پیداش کنی؟کافیه 3-4 هفته بگذره و بخوایم به کدامون برگردیمخودمونم متوجه نمیشیم! حالا فکر کن یکی دیگه میخواد اونا رو بخونه و توسعه‌شون بده?و اگر بخواد بعد از مدتی به اون تیکه کد feature اضافه بشه یا چیزیش تغییر کنه، واقعا فاجعه ایجاد میشه!ما قراره کدی بزنیم که حتی کسی که 4ماه از hello worldش میگذره، وقتی به کدای پروژمون نگاه میکنه، بفهمه قضیه از چه قراره، حتی اگه تخصصی باشنقوانین خیلی راحتن و زمان زیادی ازت نمی‌گیرنبه امید تمیزی کدامون :)