نیما طالبی
نیما طالبی
خواندن ۱۰ دقیقه·۲ سال پیش

پرتکرارترین اشتباهاتی که برنامه نویس ها انجام میدن

تعدادی اشتباه مشترک بین برنامه نویس ها وجود داره که اکثرا بدون اطلاع خودشون این اشتباهات رو انجام میدن.

اینجا قراره قسمتی از این اشتباهات رو بگم که امیدوارم بتونه از تکرار این خطا ها جلوگیری کنه.

این موارد رو میشه توی چند دسته قرار داد:

? اشتباهات فاز تحلیل
? اشتباهات فاز کد نویسی
? اشتباهات فاز تست
? اشتباهات فردی یا شخصی


اشتباهات فاز تحلیل

? اعتماد به اینکه مشتری همیشه می داند به چه چیزی نیاز دارد

یکی از اشتباهات پر تکرار اینه که،همیشه نباید به مشتری اعتماد کرد، که اون چیزی که داره توضیح میده با اون چیزی که در انتهای کار میخواد، یکسان باشه.

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

شاید این سوال واستون پیش بیاد که:چرا باید برای ما مهم باشه که مشتری نیاز خودش رو درک کنه؟ چون ما در نهایت، اون چیزی رو پیاده میکنیم که مشتری از ما میخواد.

مشکل زمانی پیش میاد که یک مشتری سردرگم، همیشه برای شما دردسر ایجاد میکنه و باعث دوباره کاری در روند پروژه میشه. اون همیشه با یک لیست تغییرات جدید پیش شما میاد، که بعضی از این تغییرات، میتونه تاثیرات جانبی زیادی روی پروژه داشته باشه.

علاوه بر این: اگر به مشتری کمک کنید که نیاز و مشکل رو بهتر درک کنه. اون یه مشتری وفادار برای شما میشه.


? در نظر نگرفتن دید انتزاعی پروژه

هرزگاهی برنامه نویس بیش از حد روی تیکه های ریز پازل تمرکز میکنه، که باعث میشه تصویر اصلی (Big picture) بهم بخوره.

بیش از حد هم نباید روی دید کلی تمرکز کرد که جزئیات رو فراموش کنیم. در کل منظورم اینه که داشتن دید انتزاعی باعث میشه که راه حل بهتری برای مشکل رو انتخاب کنیم.

برای همین همیشه باید یک قدم برید عقبتر و یک دید کلی از پروژه داشته باشید که متوجه قطعه گم شده پازل بشید.


? اختراع دوباره چرخ

به عنوان یک برنامه نویس همیشه باید تمام راه حل های موجود رو بررسی کنید تا به بهترین راه حل برسید.

گاهی اوقات برنامه نویس برای این که احساس رضایت داشته باشه، چرخ رو دوباره اختراع میکنه. یعنی یه قسمت از سیستم (مثلا یک Extension Method) که وجود داشته رو دوباره پیاده سازی میکنه.

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


? عدم دید واقعی نسبت به حجم کار و دست کم گرفتن آن

گاهی اوقات، برنامه نویس مدت زمان مورد نیاز برای انجام یک تسک رو کم در نظر میگیره، علت این کار چیه؟
مهمترین دلیل این مشکل، عدم وجود درک صحیح از اون تسک هستش.

به عنوان یک برنامه نویس شما باید تسک هارو تا حدی به تسک های ریز تر تقسیم کنید که بتونید اونارو کاملا درک کنید. تو این شرایط شما میتونید یک مدت زمان منطقی برای انجام اون تسک ها در نظر بگیرید.

این زمانبندی باید شامل مدت زمان انجام تمام این مراحل باشه

▶ تحلیل و طراحی
▶ پیاده سازی
▶ ریفکتور
▶ پیاده سازی Unit Test
▶ تست کردن
▶ مستندات بروزرسانی نرم افزار


? عجله برای شروع کد نویسی

طبق عادت و علاقه برنامه نویس ها همیشه دوست دارن که زودتر کد نویسی رو شروع کنن.چون کد نوشتن و تمکیل کردن تسک ها برای بیشتر برنامه نویس ها یه محدوده امن (آرامش) محسوب میشه.

قبل از اینکه کدنویسی رو شروع کنید، باید اطلاعات مناسبی راجب اون تسک داشته باشید.

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

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

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

آبراهام لینکلن

? ایجاد پیچیدگی فنی بیش از حد

همیشه به این فکر کنید که سیستم به چه چیزی نیازه داره. نه اون چیزی که شما دوست دارید پیاده کنید.

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

مثلا اگر شما 10 تا پترن مختلف بلدید، مجبور نیستید حتما از یکی از اون ها استفاده کنید.(منظورم اینه که از پترن مناسب در جای مناسب استفاده کنید) شما باید روی مسئله اصلی تمرکز کنید. راجع به مسئله فکر کنید، تحلیل کنید، اشتباهات و استثنائاتی که در نظر نگرفتید رو بررسی کنید و بعد شروع به پیاده سازی کنید.


? تلاش برای کنترل همه چیز و رسیدن به بهترین حالت

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

درنتیجه شما باید اولویت های خودتون رو مشخص کنید و بهترین راه حل رو نسبت به اولویت های خودتون انتخاب کنید.

Perfect is the enemy of good

اشتباهات فاز کد نویسی

? مخفی کردن مشکلات به جای حل کردن اون ها

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

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

? لاگ نکردن عملیات

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

? راه حل ها

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

در نتیجه روی انجام تسک تمرکز داشته باشید؛ ولی معماری اصلی پروژه رو هم توی ذهنتون داشته باشید


? عدم رعایت اصل Single Responsibility

یکی دیگر از اشتباهات برنامه نویس ها، جا دادن حجم زیادی از کد توی یک ماژول هست.(منظور رعایت نکردن اصل Single Responsibility) که باعث شکننده شدن برنامه میشه.یعنی اعمال تغییرات توی برنامه سخت میشه و هر تغییر توی یک قسمت باعث ایجاد مشکلات میشه.

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

تقسیم کردن قسمت های مختلف برای هر ماژول، یک مهارته که طی زمان توش حرفه ای تر می شوید.


? کامنت های بی دلیل و اضافه

کامنت هایی که هیچ ارزشی اضافه نمیکنن. اگر شما قواعد clean code رو رعایت، نباید نیازی به کامنت های زیادی باشه.

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

? کد های کامنت شده

شما سورس کنترل نیستید، پس کد هایی که لازم نیست رو کامنت نکنید، حذف کنید

? نوشتن پیام کامیت گمراه کننده

خیلی وقت ها وقتی که pull request هارو بررسی میکنم، پیام هایی میبینم که نه تنها کمک نمیکنن، بلکه باعث سردرگمی میشن.پیام کامیت باید توصیفی از تغییرات باشه که بقیه برنامه نویس ها هم بتونن درک کنن.



? حجم زیاد تغییرات در یک کامیت

یکی از اشتباهات بزرگ برنامه نویس ها اعمال حجم تغییرات زیاد توی یک کامیت هستش. این کار باعث سخت تر شدن بررسی و کنترل تغییرات پروژه میشه.

همیشه سعی کنید، تغییرات رو توی کامیت های کوچک تر تقسیم کنید.این کار برای review کردن و بعد ها برای revert کردن کمک زیادی خواهد کرد.

اشتباهات فاز تست

? نادیده گرفتن تست خودکار

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

به همین علت باید همیشه تست خودکار داشته باشید و مطمئن باشید که تست شما، همه منطق بیزینسی پروژه شما رو پوشش میده.

? در نظر گرفتن بهترین حالت(یا فقط حالت های صحیح)

برای تست نویسی سناریو های زیادی وجود داره که شما باید در نظر بگیرید

کاور کردن سناریو های مثبت خوبه، ولی نمیتونه اتمام کار باشه، باید سناریو های منفی رو هم حتما در نظر بگیرید.

تست نوشتن یک تضمین و سرمایه گذاری برای آینده هستش که بتونید کیفیت و صحت کد خودتون رو نشون بدید.


اشتباهات فردی یا شخصی

? ترس از اشتباه کردن

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

? باور به این که همیشه درست فکر میکنید

فکر نکنید که شما همیشه درست فکر میکنید(هیچ کس همه چیز را نمیداد)، یک دندگی نکنید و همیشه مشتاق شنیدن و یاد گرفتن باشید.

روش تصمیم گیری خودتون رو ارزیابی کنید و دوباره اون مسیر رو طراح کنید، و مطمئن باشید که این باعث رشد شما میشه.


? در نظر نگرفتن سلامتی فیزیکی خودتون

شما ربات یا ماشین نیستید. به فکر سلامتی جسمی و فیزیکی خودتون هم باشید.
بیماری های مرتبط با چاقی ، کمر درد ، خشکی چشم ، دست درد، کبد چرب و ... در کمین شماست.

حتما ورزش کنید و رژیم مناسب داشته باشید. و حتما به فکر میز و صندلی مناسب باشید.


?پرزنت ضعیف برای مشتری

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


? نادیده گرفتن یادگیری

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

برنامه ریزی کنید، زمان بندی کنید و اون رو انجام بدید، اهداف قابل اندازه گیری تعیین کنید، این میتونه بهتون کمک کنه.


? ترس از سوال پرسیدن یا کمک خواستن

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

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


? عجله داشتن برای کمک گرفتن

برای کمک گرفت عجله نکنید، اول خودتون دنبال راه حل بگردید.منظورم این نیست که کمک نگیرید، ولی بخشی از وظیفه شغل شما اینه که خودتون مشکلتون رو حل کنید، این باعث پیشرفت سریعتر مهارت های حل مسئله شما میشه و از وابسته شدن شما به تخصص افراد دیگر جلوگیری میکنه.

نکته اصلی اینه که یک مدت زمان معقولی برای پیدا کردن راه حل در نظر بگیرید، و بیش از حد زمان خودتون رو هدر ندید.در کل سعی کنید منطقی رفتار کنید.


? کمک نکردن به بقیه

همانطور که نباید از کمک گرفتن خجالت بکشید، شما باید هر زمانی که کاری از دستتون برمیاد برای بقیه انجام بدید.

این یک موقعیت برد - برد براتون میشه. آموزش دادن به بقیه افراد باعث میشه خودتون هم بهتر یاد بگیرید


نتیجه

در کل همه ما اشتباه میکنیم ولی مسئله اصلی اینه که ما چه چیزی از این اشتباهات یاد میگیریم.

اینجا سعی کردم به یه سری اشتباهات مشترک اشاره کنم، شاید شما هم بهش برخورده باشید، شایدم نه.

ولی اگر این موارد رو گوشه ذهنتون داشته باشید، شاید یه جایی به دردتون بخوره.



ایده اصلی: مقاله

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