یا راهی خواهم یافت , یا راهی خواهم ساخت !!!

اوایل که تازه وارد دنیای برنامه نویسی شده بودم و در شرکت شروع بکار کردم , سر هر موضوع و مشکل کوچیکی از همکاران با تجربه تر سوال می کردم. مثلا حتی اگر بجای echo توی PHP می نوشتم ecko اصلا نگاهی به خطا و خروجی نداشتم که اون کلمه رو اصلاح کنم و مشکل حل بشه و سریعا می گفتم " آقای فلانی به فلان مشکل خوردم چیکار کنم ؟! "

یادمه چهره همکارا خیلی دَرهَم و آشفته می شد و این سالهاست که می فهمم توی دلشون چقدر بد و بیراهه می گفتم که این طرف چرا Search نمی کنه و مدام سوال می پرسه ؟!

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

چطور Problem Solver خوبی باشیم ؟!

این روزها Problem Solving یا توانایی حل مسئله خیلی مطرح میشه , مخصوصا در آگهی های استخدام که زیاد دیده میشه " که البته خارجی ها بیشتر به معنی واقعی دنبالش هستن " و همه دنبال برنامه نویسی هستن که بتونه مشکلات رو تحلیل و نهایتا یک راه کار خوب پیدا و مسئله رو حل کنه !

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

در پایین مراحلی رو بنظر میرسه که بنا به تجربه براتون لیست می کنم که امیدوارم مفید باشه :

اول: دقت به متن خطا و شماره خط کد

زمانیکه شما به یک error بر می خورید معمولا در متن خطایی که کامپایلر بهتون نشون داده متوجه ایراد کار خواهید شد. مثلا گفته Syntax رو اشتباه نوشتید و در line شماره فلان این ایراد پیش اومده.

خیلی ها هستن اصلا این متن رو توجه نمی کنن و شروع می کنن به سوال پرسیدن و به در و دیوار زدن , در صورتیکه اگر متن خطا رو بهش توجه کنید و خط مربوطه رو بخونید 90 درصد مشکلات زیر 1 دقیقه شاید کمتر حل خواهند شد.

مثلا React یک خطای معروف به نام Maximum update depth exceeded داره که قبلا در یک مقاله بهش اشاره کردم , متن این خطا و شماره خط مربوطه رو ببینید و دقت داشته باشید 1 دقیقه که هیچ 10 ثانیه ای قابل حل هستش !!!

دوم: تو گوگل جستجو کنید

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

حتی گوگل برای حل این سری مشکلات در بالای نتیجه اول یک توضیح کلی یا overview گذاشته که لازم هم نیست به سایت مرجع مراجعه کنید و همونجا step هارو براتون لیست کرده ...

سوم: مراجعه به وب سایت هایی مثل StackOverflow

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

ولی در کل اگر گوگل هم نتونست براتون نتیجه خوبی رو بیاره وارد سایت StackOverflow بشید و مشکل خودتون رو یکبار در فرم جستجوی اونجا بررسی کنید. بنظر من در اکثرا مواقع بالای 60 درصد جواب سوالتون پیدا میشه و یا کسی دقیقا مثل سوال شمارو پرسیده یا چیزی شبیه بهش که قطعا کمکتون می کنه !

ولی اگر باز موفق به دریافت جواب نشدید یک account در سایت بسازید و سوال خودتون رو بپرسید. معمولا برای اکثر سوالات زیر 30 دقیقه یک پاسخ مناسب یا راهنمایی کاربردی از طرف بقیه اعضاء ارسال میشه که بدرد بخور و کار راه انداز هستش.

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

چهارم: مشورت با بقیه اعضاء تیم

اگر کسی این 3 مرحله رو جلو رفت و به نتیجه نرسید بنظر من حالا باید بره سراغ مشورت گرفتن و سوال پرسیدن از بقیه هم تیمی ها و قطعا الان مشکل جدی تر از حد تصور بوده و بایستی از تجربیات بچه های خود تیم هم استفاده کرد. معمولا الان در اکثر شرکت ها فردی بعنوان CTO یا مدیر فنی وجود داره و می تونید با هماهنگی ایشون حتی در قالب یک جلسه کوتاه مشکل رو مطرح , تمام راه های رفته و راه حل های قبلی رو بررسی و به یک نتیجه مثبت برسید.

البته در این مرحله شاید بقیه همکاران هم مراحل قبلی رو تکرار کنن , ولی همیشه در نظر داشته باشید جستجو و تحقیق یک نفر تو Problem Solving کافی نیست و شاید بخاطر بی حوصلگی و استرس شما بعضی جواب های مناسب از دید شما پنهان بوده و همکارتون با تمرکز بیشتری که داره این جواب رو پیدا و مسئله رو حل کنه.

یک مسئله همیشه Error یا خطاهای کدنویسی نیست !!!

اینجا که در مورد مسئله و Problem های موجود صحبت شد شاید همه فکر کنن تمام مسائل برنامه نویسی مربوطه به خطاهای کدنویسی و error هایی باشه که کامپایلر هنگام اجرا بهتون نشون میده ....

نه مسائل در نرم افزارها و برنامه نویسی صرفا به خطاها محدود نمیشه. مسائل مختلفی داریم , مثلا در نظر گرفتن یک الگوریتم خوب برای نوشتن اون قطعه کد یا feature , هندل کردن performance یا بهبود بخشیدن سرعت اجرای کدهای برنامه , مسائل مربوطه به امنیت و تعیین سطوح دسترسی , مسائل مربوط به سخت افزار و سرورهایی که میزبانی نرم افزار شمارو بعهده داره و بقیه موارد ...

یک الگوریتم اشتباه چطور مسئله ساز می شود ؟

وقتی در مورد الگوریتم ها و best practice های موجود صحبت می کنیم بعضی ها خنده ای به لب میارن و اونقدر این مسئله رو شوخی میگیرن که انگار هیچ اهمیتی نداره !!!

نمی خوام الگوریتم رو توضیح بدم چون همه ما تو دانشگاه یا کلی کتاب های دیگه مثال های ساده مثل از در خونه بیرون رفتن تا به محل کار رسیدن و غیره رو هزاران بار در مورد الگوریتم شنیدیم و خوندیم :دی

ببینید وقتی یک کد اشتباه نوشته بشه و زیاد از منابع استفاده کنه باعث میشه چندین مسئله جانبی رو بوجود بیاره. مثلا با حلقه های اشتباه یا عدم استفاده از صحیح از متغییرها فضای RAM رو اشغال و مصرف CPU رو بالا ببریم , یا اونقدر بی دقت مسیر رو جلو ببریم که مسائل امنیتی مثل SQL Injection پیش بیاد یا اونقدر از سرور کار بکشیم که Performance کار زیر سوال بره.

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

خوندن مقالات چقدر تو حل مسئله کمک می کنه ؟

من خودم 4 مرحله رو خلاصه به ذهنم رسید عنوان کردم و برای مواقعی که به مشکلی می خورید خیلی جواب میده , ولی مواردی مثل مطالعه و پیگیری مقالات در دراز مدت خیلی می تونه به تسلط شما در حل مسئله کمک کنه. اون راه حل ها برای حال اورژانسی یا مواقعی که به مشکل خوردید مناسبه ولی خوندن مقالات راه مناسبی هست که حتی زمانیکه مشکل یا خطایی ندارید و در اوقات بیکاری به تحلیل مسئله و داشتن تمرکز بیشتر بهتون کمک می کنه.

پیشنهاد می کنم زیاد تو سایت هایی مثل Medium , Scotch و ... بگردید و مقالاتی که میاد رو بخونید. چون تو بعضی موارد Best Practice ها و اصول کار رو به درستی توضیح دادن که باعث میشه کمتر به خطا و مشکلات الگوریتمی در پیاده سازی کارهاتون بر بخورید.

امیدوارم یک توضیحات مورد توجهتون قرار بگیره

موفق باشید