اصرار بی‌فایده بر کیفیت کد

جالب است که تعداد قابل توجهی از برنامه‌نویس‌ها روی مواردی اصرار می‌کنند که در عین مفید بودن به حال شرکت یا تیم متبوعشان، به خود آنها چندان مربوط نیست. تعدادی از این موارد عبارت هستند از:

۱- کیفیت کد (خوانایی، انجام unit test و…)
۲- بالا بودن امکان نگهداری کد برای افزایش قابلیت تغییر در آینده
۳- documentation صحیح و اصولی برای افزایش فهم کد توسط دیگران
۴- استفاده از ابزارهای Issue Tracking مثل Jira برای افزایش فهم کد توسط دیگران
۵- استفاده از ابزارهای ALM مثل سورس کنترل و Build اتوماتیک برای افزایش همکاری تیمی و افزایش کیفیت کار
۶- …

چرا مربوط نیست؟ چون این مدیر پروژه، مدیر عامل یا سهامدار شرکت است که باید نگران قابلیت‌های کیفی سرمایه‌اش یعنی سورس کد برنامه‌ها باشد نه شخص برنامه‌نویس. متاسفانه بعضی اوقات این روال برعکس است. برنامه‌نویس مجبور می‌شود اصرار زیادی بر استفاده از ابزارهایی مثل سورس کنترل یا نرم‌افزارهای Issue Tracking داشته باشد در حالی که خیلی از اوقات، مدیر عامل شرکت یا مدیر پروژه مقاومت زیادی در برابر تغییر از خودشان نشان می‌دهند. آن هم به دلیل که می‌ترسند تغییرات باعث تاخیر در روال جاری شرکت شوند. به عبارت دیگر منافع بلند مدت فدای منافع کوتاه مدتی مثل تحویل سریع‌تر پروژه به مشتری می‌گردد.

کاهش مشکلات خروج افراد از تیم

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

۱- پیاده‌سازی نرم‌افزار بر اساس نقشه و طرح معین و مکتوب نه آنچه که در ذهن افراد قرار دارد.
۲- به کارگیری اصول روز مهندسی نرم‌افزار و هر چیز دیگری که باعث بالا رفتن خاصیت Maintainability کد می‌شود.
۳- مستند سازی کد
۴- ممیزی کد و کیفیت آن توسط Lead تیم
۵- Code Review افراد تیم از همدیگر که باعث می‌شود هر کسی به غیر از کار خودش از کار دیگران هم خبر داشته باشد
۶- جابجایی عمدی افراد در تیم که اثری مشابه مورد قبل دارد.
۷- استفاده از روش‌های ساده برای حل مسئله. به این ترتیب لازم نیست نفر بعدی در کدهای پیچیده گم شود.
۸- استفاده از ابزارهای Issue Tracking که باعث می‌شود نفرات جدید بدانند چه باگ‌هایی وجود داشته و چطور برطرف شده‌اند.
۹- استفاده از ابزارهای Help Desk برای حفظ ارتباط با مشتری
۱۰- یک دست بودن تیم از لحاظ تکنولوژی‌های مورد استفاده. مثلاً این طور نباشد که یکی از ویژوال استودیو استفاده کند و دیگری از مونو.
۱۱- …

‫if تنفر انگیز

به این if توجه کنید:
//code...

if (something != null)
{
Do1();
Do2();
}

//code...
در اینجا null نبودن بررسی شده و بر اساس آن یک سری عملیات انجام می‌شود. اما دقت کنید که اگر مقدار مورد نظر null باشد هیچ مکانیزمی برای اعلام خطا وجود ندارد و به سادگی هر چه تمام‌تر آن بخش از کد بی هیچ سر و صدایی skip خواهد شد. درست است که بعضی جاها null بودن لزوماً به معنای خطا نیست اما اگر نمونه کدی ببینید که تمام ifهای آن به همین سبک هستند حتماً از این ifها متنفر خواهید شد.