همهی افراد با تجربه بر این باورند که داشتن توانایی حل مسئله به مراتب مهمتر است از آشنایی با چندین تکنولوژی. در واقع یادگیری این مسئله که چطور مثل یک برنامه نویس فکر کنیم به مراتب زمانبرتر و سختتر است تا یادگیری تکنولوژیهای برنامه نویسی!
در پایان این مقاله یاد میگیرید چطور با مسائل برخورد کنید، فارغ از اینکه آن مسئله برنامه نویسی است یا مسئله دیگری است. در واقع هدف ما این است که شما به یک problem solver خوب تبدیل شوید.
همه ما در زندگی به مشکل برمیخوریم. مشکلاتی که مثل مسائل ریاضی هستند. یا باید آنها را حل کنیم یا نمره آن بخش را نمیگیریم! دقیقا مثل مسئله حل کردن اگر برای رویارویی با مسائل فرمول و روش نداشته باشیم، در دردسر میوفتیم.
شاید بتوانیم الله بختکی چندتایی را حل کنیم، شاید بتوانیم گرههای بزرگتر را با دهان باز کنیم! اما در نقاط حساس گیر میکنیم.(یکبار جستی ملخک! ....)
با این حساب باید برای حل مشکلاتمان روش داشته باشیم. در ادامه این روش را با هم بررسی میکنیم.
چطور مثل یک برنامه نویس فکر کنیم و در مواجه با مسائل، چهارچوب خودمان را داشته باشیم؟
C.Jordan Ball:
داشتن چهارچوب به این معنا نیست که تمام مسائل را به یک شکل حل کنید! افراد با هم تفاوت دارند و ممکن است هر فرد یک مسئله را به شکل متفاوتی حل کند. از طرفی راه حل تمام مسائل هم یکسان نیست. اما اگر برای حل مسئلههایتان از مجموعهای از اصول پیروی کنید، خیلی سریعتر پیش خواهید رفت.
پس به این نصیحت گوش میدهیم و برای حل مسائل از مجموعهای از اصول پیروی میکنیم. کدام اصول؟ با من همراه باشید:
قبل از اینکه خودکار را دستتان بگیرید و برای مسائل برنامه نویسی(یا زندگیتان) نسخه بپیچید، کمی تامل کنید و به این سوال پاسخ دهید: مسئله چیست؟
در واقع فهم درست مسئله نیمی از راه در حل مسئله است. شما باید بدرستی درک کنید که سوال از شما چه میخواهد و باید دنبال چه چیزی بگردید.
راههای زیادی وجود دارد که بررسی کنید آيا مسئله را درست فهمیدهاید یا نه. هر کدام از این راهها با توجه به شخصیتتان ممکن است برایتان کارساز باشد یا نه.
به شخصه همیشه سعی میکنم با خلاصه سازی، کشیدن الگوریتم یا فلوچارت بر روی کاغذ مسائل بزرگ را خلاصه و قابل فهم کنم.
قبل از اینکه بپرید در دل مسئله، حتما برنامهای برای حل مسئلهتان بچینید. همچنین حواستان باشد مسائل پیشبینی نشده را تا حد ممکن پیشبینی کنید و برای رویایی با همچین مواقعی پلن A,B,C,… طراحی کنید.
به طور خاص درباره برنامه نویسی، باید بدانید اگر ورودیx را به مسئله بدهیم، چه مراحل و اقداماتی لازم است تا خروجی y را دریافت کنیم؟ وظیفه شما طراحی این مراحل است.
شیرجه زدن در دل یک مسئله بزرگ واقعا کار دشواری است. یک دفعه به خودتان میآیید و میبینید وسط یک هزارتو گم شدهاید!
برای جلوگیری از این موضوع باید تقسیم و غلبه کنید! این اسم یکی از الگوریتمهای معروف برنامه نویسی است که پیشینه تاریخی هم دارد.
اگر بخواهم به طور خلاصه توضیح دهم، در این روش شما باید یک مسئله بزرگ را به چندین مسئله کوچک تقسیم کنید. در مرحله بعد باید سعی کنید این مسائل کوچک را حل کنید. حالا با در کنار هم قرار دادن مسئلههای کوچکی که حل کردید، مسئله بزرگ و نهایی حل شده است!
اگر به بن بست خوردید و مسئلهتان حل نشد چی؟ در افراد مختلف ۲ رویکرد متفاوت دارند:
لوزرها: من میدانم ما میمیریم! در واقع فقط آیه یاس میخوانند و میگویند حل نمیشود، نمیدانم، نمیتوانم و...
برنامه نویسهای موفق: این افراد میدانند ذات مسئله با سختی و آزمون و خطا همراه است پس ناامید نمیشوند و شروع میکنند به دیباگ کردن مسئله. پس مرحله بعد دیباگ کردن است.
ابزار زیادی برای این کار وجود دارد اما در مسائل ساده شما میتوانید به صورت دستی هم دیباگ کنید. مرحله به مرحله جواب را بررسی کنید. باید ببینید در کدام مرحله خروجیای تولید میشود که مورد انتظار شما نیست.
خب تا به اینجا با چند درصد صحبتهای من موافق بودهاید؟ آیا تا به حال تجربه مشابهی داشتید؟ یعنی تجربه حل مسئله با یک روش خاص. اگر جوابتان مثبت است خیلی خوشحال میشوم از تجربیاتتان برای من و دیگر خوانندگان این مقاله بگویید.
همچنین اگر به خواندن باقی مراحل از مجوعه اصول برای حل مسئله اشتیاق دارید، میتوانید به مقاله چطور مثل یک برنامه نویس فکر کنیم؟ مراجعه کنید.