چگونه مانند یک برنامه‌نویس فکر کنیم؟

گردآوری و تالیف : ارسطو عباسی
تاریخ انتشار : 19 تیر 1397
دسته بندی ها : برنامه نویسی

اگر به حوزه برنامه‌نویسی علاقه‌مند باشید، مطمئنا این جمله را قبلا شنیده‌اید:

«هرکسی در این کشور باید برنامه‌نویسی کامپیوتر را یاد بگیرد، به این دلیل که برنامه‌نویسی به شما شیوه فکر کردن را می‌آموزد» -استیو جابز.

مطمئنا در رابطه با این موضوع که چگونه مانند یک برنامه‌نویس فکر کنید تعجب کرده‌اید، این به چه معناست؟ و چگونه چنین کاری را انجام دهم؟

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

در این مطلب قصد دارم این مسیر را به شما نشان دهم. در پایان این مطلب شما با مراحلی آشنا خواهید شد که در آن می‌توانید به یک حلال مشکلات بهتر تبدیل شوید.

چرا این موضوع مهم است؟

حل کردن مشکلات یک توانایی بسیار ارزشمند است. همه ما در زندگی روزمره با مشکلاتی سر و کار داریم. کوچک یا بزرگ. چگونه با آن‌ها برخورد می‌کنیم؟ خیلی اوقات شیوه برخورد ما بدون فکر کردن و به صورت تصادفی اتفاق می‌افتد. 

اما در صورتی که یک سیستم (نظام فکری) در اختیار داشته باشید می‌توانید به صورت دقیقتر مشکلات را حل نمایید:

  • یک راه‌حل را امتحان کنید.
  • اگر آن کار نکرد، یک مورد دیگر را انتخاب کنید.
  • اگر آن هم کار نکرد پس قدم قبلی را باری دیگر امتحان کنید تا به نتیجه برسید.

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

بهترین راهکار برای حل یک مسئله، در وهله اول داشتن یک چهارچوب و در وهله دوم تمرین کردن با آن است. 

«تقریبا تمام کارفرمایان و افرادی که استخدام می‌کنند روی توانایی حل مسائل تاکید زیادی دارند و در ابتدا به آن فکر می‌کند.

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

روند فکر کردن محساباتی و توانایی در شکستن مشکلات بزرگ به مشکلات کوچک‌تر بسیار موضوع ارزشمندی است.» - Hacker Rank (2018 Developer Skills Report)

داشتن یک چهارچوب

برای پیدا کردن یک چهارچوب درست من موضوعاتی که در کتاب «The 4-Hour Chef» ارائه شده است را دنبال می‌کنم. همچنین در این مسیر نظرات افراد مختلف دیگری را پرسیدم. همه آن‌ها با دنبال کردن قواعد استاندارد در وهله اول یک پروژه موافق بودند. با این کار می‌توانید رشد سریع‌تری داشته باشید.

«بزرگ‌ترین اشتباهی که در برنامه‌نویسان تازه وارد مشاهده کرده‌ام این است که آن‌ها روی یادگیری سینتکس تمرکز دارند نه روی شیوه حل مسائل.» -  V. Anton Spraul

بنابراین وقتی با یک مسئله برخورد می‌کنید باید چه چیزهایی را در نظر بگیرید؟

مراحل زیر را دنبال کنید:

۱. درک کردن

چیزی که پرسیده شده را دقیقا شناسایی و درک کنید. بیشتر سوالات سخت به این دلیل سخت هستند که شما نمی‌توانید آن‌ها را درک کنید. (این مورد اولین قدم از حل مسئله است).

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

به همین دلیل است که باید مسائل را کوچک‌تر و کوچک‌تر کنید، دیاگرام رسم نمایید و در رابطه با آن با افراد دیگری صحبت کنید. 

«اگر نمی‌توانید چیزی را در یک قالب ساده‌تر توضیح دهید،‌ بنابراین شما آن را به خوبی درک نکرده‌اید.» -Richard Feynman

۲. برنامه‌ریزی

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

«X را از ورودی بگیر، چه قدم‌هایی برای خروجی دادن Y وجود دارد؟»

برنامه‌نویسان یک ابزار بسیار خوب را در اختیار دارند ... کامنت‌ها!

۳. جداسازی

توجه کنید. این مورد مهمترین چیزی است که باید به آن توجه کنید. سعی نکنید که یک مشکل بزرگ را مستقیما حل کنید. بجای آن، مسئله را بشکنید، حل کردن زیر مسئله (مسائل شکسته شده) بسیار آسان‌تر خواهد بود. جدای از این، حل کردن یک زیر مسئله در ابتدای کار روی زیر مسئله‌های دیگر تاثیر نمی‌گذارد. بعد از اینکه تمام موارد را حل کردید، حال می‌توانید آن‌ها را به همدیگر متصل کنید.

متصل کردن تمام زیر مسائل راه‌حل مربوط به مسئله اصلی را می‌دهد. تبریک می‌گویم!

یادگیری این تکنیک یکی از کلیدی‌ترین موارد در امر حل مشکلات است. 

«اگر بتوانم به هر برنامه‌نویس تازه‌کاری یک توانایی حل مسائل را یاد بدهم، آن تکنیک کاهش مسائل بود. برای مثال فرض کنید که یک برنامه را باید ایجاد نمایید که ۱۰ عدد را دریافت کرده و سومین عدد بزرگ در این بین را پیدا می‌کند. حل کردن چنین مسئله‌ای شاید برای یک برنامه‌نویس مبتدی سخت باشد. بنابراین بهتر است آن را ابتدای کار به صورتی ساده‌تر حل کنید. نظرتان در رابطه با پیدا کردن بزرگ‌ترین عدد در تمام مجموعه چیست؟ اگر باز هم سخت است، بنابراین سعی کنید بزرگ‌ترین عدد در بین تنها سه عدد اولی را محاسبه کنید. راه‌های بسیاری وجود دارد. برنامه‌ها را تا جایی که خودتان شیوه حل و نوشتن راه‌حل‌ آن را می‌دانید، کوچک کنید. بعد از آن با بازنویسی آن به سمت مشکل اصلی سوق دهید.» - V. Anton Spraul 

۴. به مشکل برخورده‌اید؟

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

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

در حقیقت ۳ چیز وجود دارد که در چنین شرایطی باید به آن فکر کنید:

  • رفع‌ عیب: مرحله به مرحله راه‌حل‌تان را نگاه کنید و به دنبال جایی باشید که در آن اشتباه کرده‌اید. برنامه‌نویسان این موضوع را رفع عیب می‌نامند. (در حقیقت این درست کاری است که debuggerها انجام می‌دهند).
  • «هنر رفع عیب کردن پی بردن به چیزی است که در حقیقت به برنامه برای انجام دادن گفته‌اید، نه چیزی که فکر کرده‌اید برای انجام دادن به کامپیوتر گفته‌اید.» -Andrew Singer
  • ارزیابی دوباره: یک مرحله به قبل بازگردید. به مسئله با نگاهی تازه بنگرید. آیا چیز دیگری نیز وجود دارد که بتواند در مسیر حل مسئله قرار بگیرد؟»

یک راه برای ارزیابی کردن دوباره یک مسئله، نوشتن راه‌حل آن باری دیگر است. همه چیز را حذف کنید و از ابتدا با یک دید جدید شروع به نوشتن راه‌حل کنید. جدی هستم. مطمئنا از این قضیه که چقدر این مسئله می‌تواند برای‌تان مؤثر باشد شگفت زده می‌شوید.

  • تحقیق کنید: گوگل! بله درست است گوگل! مهم نیست که شما با چه مشکلی مواجه هستید، مهم این است که قبلا یک فرد دیگر نیز با آن مواجه شده و ممکن است آن را حل کرده باشد. با دیدن راه‌حل‌های موجود نه تنها مشکل را حل می‌کنید، بلکه از کدهای دیگران چیزهای زیادی را نیز یاد می‌گیرید. 

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

تمرین کنید

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

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

در پایان

مطمئنا تا به اینجای کار توانسته‌اید با اصول اولیه آشنا شوید. توانایی در حل کردن مشکلات یکی از مسائل مهم است که باید به آن توجه داشته باشید. 

منبع

مقالات پیشنهادی

چگونه در وردپرس یک پوسته فرزند را درست کنیم؟

به عنوان یک مدیر وبسایت وردپرسی مطمئنا دوست دارید پوسته‌ای که در حال استفاده از آن هستید را منحصر به فرد کنید، این کار را با اضافه کردن کارکردهای اضاف...

25 آیکون طراحی و اشکال

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

مجموعه آیکون Web Interface

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

مجموع آیکون های طراحی گرافیک

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