تو این مقاله سعی دارم راجب نکاتی صحبت کنم که باعث میشه کد کثیف زده بشه و در نهایت پروژه نرمافزاریمون تبدیل به یه پروژه اسپاگتی بشه و در نهایت باهم راهحلهای احتمالی رو بررسی میکنیم.
در ادامه به این چندتا سوال میخوایم جواب بدیم:
خیلی از برنامهنویسها زمانی که یک پروژه جدید رو شروع میکنن، حساسیت خیلی زیادی برای نوشتن کدهای تمیز، قابل نگه داری و قابل توسعه دارن، ولی چی میشه که اون حساسیتها به مرور کم میشه و به یکسال نکشیده پروژه تبدیل به یک اسپاگتی بزرگ میشه؟
متاسفانه دلایل زیادی وجود داره که منجر به این اتفاقات میوفته که به بعضی از اون موارد اشاره میکنم:
خروجی موارد بالا میشه یک پروژه نرمافزاری به شکل اسپاگتی که ساختار درستی نداره و اجزای پروژه در هم و بر هم و پیچیده شده.
اشکالات پروژههای اسپاگتی:
اولین و آسونترین تصمیم معمولا ایجاد یک پروژه دیگهس که خیلی از برنامهنویسها این تصمیم رو میگیرن.
ولی آیا راه حل بهتری هم هست؟ بنظر من بله هست، طبق تجربههای مختلفی که توی پروژههای نرمافزاری داشتم راه حل ساخت یک پروژه مجدد با رویکرد کد تمیز بدون در نظر گرفتن نقاط ضعف پروژه قبلی هم منجر به شکست شده(تبدیل شدن به اسپاگتی در طولانی مدت)، تاکید من روی زمان طولانی مدته چون در کوتاه مدت هم باز حساسیت زیادی به خرج میدیم، تو ریویوها سختگیری بیشتری داریم، ولی به مرور زمان باز شاهد کدهای کثیف هستیم که گاهی این حس به وجود میاد که باز برگشتیم سر نقطه اول.
من زمانی راه حل ساخت یک پروژه جدید با رویکرد کد تمیز رو پیشنهاد میدم که ساعتها راجب پروژه کثیف قبلی جلسه گذاشته بشه، عیب یابی بشه، از نقاط ضعف و چرایی پروژه کثیف مستند تهیه بشه و در نهایت شفافیتی شکل بگیره که امکان تکرار اشتباه وجود نداشته باشه و درصد خوبی از موارد بالا که بهش اشاره شد رو پوشش بده.
راه حل دوم تمیز کردن پروژه کثیف فعلی میتونه چالش های زیادی برامون داشته باشه بعلاوه هزینه زمانی و مالی زیادی برای صاحب پروژه، ولی مزیتهایی داره که بد نیست مرور کنیم:
بدهیهای فنی، کد کثیف و پروژههای اسپاگتی جز مواردی هستن که باهاشون به صورت روزانه سرکار داریم، این خوبه بشناسیم و بدونیم که چه مشکلاتی تو پروژه داریم و مطمئن بشیم که همه تیم در جریان هستن، برنامه کوتاه و بلند مدت برای رفع این مشکلات داشته باشیم، چون اگه برنامهای برای حل این مشکلات وجود نداشته باشه، هم تیم درگیر توسعه فرسایشی میشه که در طولانی مدت آثار مخربی مانند جدا شدن برنامهنویس از تیم و عقب افتادن فرد از رشد فنی میشه و هم صاحب محصول یا پروژه هزینههای گذافی رو باید متقبل بشه برای توسعه و نگهداری پروژه.
در مورد بدهیهای فنی اینجا بیشتر توضیح دادم: نگاهی به بدهی فنی پروژه های نرمافزاری
منابع:
https://en.wikipedia.org/wiki/Technical_debt
https://en.wikipedia.org/wiki/Don%27t_repeat_yourself
https://en.wikipedia.org/wiki/Code_smell
https://stackoverflow.blog/2023/12/27/stop-saying-technical-debt/
https://en.wikipedia.org/wiki/Spaghetti_code