یک استاد خارجی داشتم که هنوز هم هر وقت یادش می افتم لبخند میزنم.
طرف انقدر رزومه خفنی داشت که اگر فقط اسم شرکت ها و پروژه هایی که توشون کار کرده بود را روی کاغذ A4 مینوشتی چندین صفحه پر میشد. از ان شرکت هایی که حتی اسم بعضی هاشون را هم نمیتونستم درست تلفظ کنم!
خلاصه اینکه خیلی خیلی ادم خفنی بود و واقعا خوشحالم که فرصت داشتم یکی از درس هام را با اون بگذرونم.اول ترم یک حرف جالب زد.گفت اگر پروژه های این درس را خوب انجام بدید، حتی میتونید بعدا اون ها را برای شرکت های بزرگی مثل گوگل بفرستید و وارد این شرکت ها بشید.
راستش را بخواید من ان موقع بیشتر از اینکه به حرفش فکر کنم داشتم به این فکر میکردم که چطور این درس را پاس کنم!
اما چیزی که این استاد را از بقیه جدا میکرد نحوه تدریسش بود.بقیه استادها معمولا چند ویدیو میدادند و چند تمرین و یک پروژه. ولی این استاد تقریبا در هر بخش کلی نکته درباره Clean Code(کد تمیز) گفته بود.هر جا کدی مینوشتی چند نمونه از کد خوب و کد بد هم کنارش اورده بود.حتی ویدیوهای تدریسش را بعضی دانشگاه های استرالیا هم استفاده میکردند.
از همه جالب تر این بود که همیشه خدا درباره Clean Code حرف میزد. هر جلسه....هر بخش....هر تمرین.
انقدر این عبارت را تکرار میکرد که بعضی وقت ها حس میکردم هر پنج دقیقه یک بار باید اسمش را بشنوم!ولی مشکل اینجا بود که من تازه ترم های اول دانشگاه بودم.مغزم اندازه نخود بود!😅صادقانه بگم اصلا نمیفهمیدم منظورش چیست.با خودم میگفتم:
«اگه کدت کارمیکنه بهش دست نزن😌»

تا اینکه چند وقت پیش یکی از دوستام داشت روی پروژه یکی از استادها کار میکرد.استاد بهش گفته بود:«فقط یک تغییر کوچیک توی سیستم بده. بیشتر از ده دقیقه زمان نمیبره.»دوستم هم با اعتماد به نفس لپ تاپش را باز کرد و رفت سراغ کدها.اما ده دقیقه شد یک ساعت....یک ساعت شد سه ساعت....هر بار که یک خط کد را تغییر میداد یک جای دیگر برنامه خراب میشد.اخر شب با خستگی گفت:
«انگار وارد یک جنگل تاریک شدم که هیچ نقشه ای ازش ندارم!»

مشکل این نبود که برنامه نویس ضعیفی بود.مشکل این بود که کدها تمیز نوشته نشده بودند.همان لحظه بود که بعد از چند سال بالاخره حرف های ان استاد را فهمیدم.فهمیدم فرق یک برنامه نویس حرفه ای با یک برنامه نویس معمولی فقط در بلد بودن زبان های برنامه نویسی نیست.بلکه در این است که بتواند کدی بنویسد که بعدا قابل فهم باشد.برای همین تصمیم گرفتم چند تا از مهم ترین نکاتی که از اون استاد یاد گرفتم را اینجا بنویسم.
یکی از بزرگ ترین اشتباهاتی که خیلی از ما اوایل مسیر انجام میدیم، انتخاب اسم های عجیب و غریب برای متغیرهاست.مثلا:
int x;
خب الان x یعنی چی؟ قرار است چه کاری انجام بده؟ تعداد محصول است؟ سن کاربر است؟ ماذافاذا؟
خود من بار ها همچین اشتباهی کرده بودم.چند هفته بعد که برگشتم سراغ پروژه چند دقیقه فقط داشتم فکر میکردم:«این x دقیقا چی بود؟» .اگر همان موقع اسمش را مثلا productCount گذاشته بودم هیچ مشکلی پیش نمی امد.
خیلی از ما اوایل برنامه نویسی یک کلاس میسازیم که همه کار انجام میدهد.
مثلا کلاس User:
ثبت نام میکند
لاگین میکند
ایمیل میفرستد
اطلاعات دیتابیس را میخواند
فایل اپلود میکند
گزارش میسازد
خلاصه همه چیز داخلش ریخته شده! بعد از چند ماه تبدیل میشود به یک کلاس 1000 خطی که هیچکس جرات نزدیک شدن به ان را ندارد.این هم به نوعی ادامه همان بحث Clean Code و اصل Single Responsibility است و خیلی ارزش اضافه میکند.
یک بار در یکی از پروژه های دانشگاهی تابعی نوشته بودم که حدود 300 خط کد داشت.ان موقع فکر میکردم شاهکار مهندسی نرم افزار خلق کردم!😌🙂↕️ اما چند هفته بعد که خواستم یک باگ کوچیک را پیدا کنم خودم هم نمیتونستم بفهمم کجای تابع چه کاری انجام میده.هر بار بالا و پایین میرفتم بیشتر گیج میشدم:)

بعدها فهمیدم هر تابع فقط باید یک مسئولیت داشته باشد.اگر اسم تابع را بخوانی و نتوانی در یک جمله توضیح بدهی چه کاری انجام میدهد، احتمالا بیش از حد بزرگ شده است.برای اینکه کاملا منظور خودم را بهتون نشون بدم عکس زیر را ببینید:

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

یک بار یک قطعه کد را در هفت جای مختلف پروژه کپی کرده بودم.بعد یک باگ کوچیک پیدا شد.فکر میکنی چند جا باید اصلاحش میکردم؟ دقیقا هفت جا!
و البته یکی از ان ها را هم فراموش کردم.همان یک مورد فراموش شده باعث شد چند ساعت دنبال مشکل بگردم.برای همین قانونی به اسم DRY یا Don't Repeat Yourself وجود دارد.اگر حس کردی داری یک کد مشابه را بارها مینویسی، احتمالا وقت ساختن یک تابع یا کلاس جدید رسیده است.
یک بار پروژه یکی از دوستانم را باز کردم.کدش درست کار میکرد .اما انگار یکی کدها را داخل مخلوط کن ریخته بود!تورفتگی ها نامنظم.فاصله ها نامشخص براکت ها هر کدام یک طرف. پیدا کردن یک حلقه for خودش یک ماموریت جداگانه بود.بعد از اینکه فقط کدها را فرمت کردیم، بدون تغییر حتی یک خط از منطق برنامه، خوانایی پروژه چند برابر شد.
در Python تورفتگی (Indentation) خیلی مهم است و حتی روی اجرای برنامه تاثیر میگذارد مثلا:
if age > 18:
print("Adult")
اگر تورفتگی را خراب کنی برنامه خطا میدهد.
اگرهمچنان بعد خوندن این مطلب براین باوری «اگه کدت کارمیکنه بهش دست نزن😌» خواستم بگم:
