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

نویسنده : سید ایوب کوکبی ۲۳ مرداد ۱۳۹۸
چگونه مثل برنامه نویس‌ها فکر کنیم؟

اگر به برنامه‌نویسی علاقه‌مند باشید احتمالاً این جمله را شنیده‌اید:

هر کسی باید برنامه‌نویسی یاد بگیرد چون این کار به شما می‌آموزد چگونه فکر کنید.

استیو جابز

و احتمالاً این ابهام برایتان به وجود آمده که یعنی چه مثلِ برنامه‌نویس‌ها فکر کنیم؟ به طور خلاصه منظور پیروی از یک روشِ موثر و کارآمد برای حلِ مسائل است که در این پست می‌خواهیم به شما آموزش دهیم. در پایانِ خواهید فهمید که چطور مسائل را بهتر و کارآمدتر حل کنید.

دلیلِ اهمیتِ این موضوع چیست؟

حل مسئله (Problem-Solving) یک مهارت چندگانه است. هر یک از ما در زندگی‌مان با مسائلِ ریز و درشت فراوانی درگیر هستیم. اما چطور حلشان می‌کنیم؟ اغلب شانسی!

چیزی شبیهِ این:

  1. تستِ روشِ اول؛
  2. اگر نشد روشِ بعدی؛
  3. و اگر نشد دوباره تکرارِ مرحلۀ ۲ تا زمانی که مسئله حل شود؛

بله این روش ممکن است جواب بدهد ولی واقعاً شیوۀ خوبی برایِ حل مسئله نیست. این شیوۀ حلِ مسئله انرژی و وقتِ زیادی تلف می‌کند و آخر هم معلوم نیست به جواب برسید یا نه.

روشِ بهتر پیروی از یک چارچوب (Framework) برای حل مسائل است.

تقریباً تمام کارفرماها ابتدا افراد را بر اساسِ مهارتِ حل مسئله‌شان اولویت‌بندی می‌کنند.

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

تفکر رایانشی (computational thinking) و توانایی تقسیمِ مسائلِ پیچیده به مسائلِ کوچکتر اگر نگوییم بیشتر لاقل به اندازۀ مهارت‌های فنیِ مورد نیاز برای یک شغل مهم است.

Hacker ranke
(گزارش سالانۀ مهارت‌های توسعه‌دهندگان – سال ۲۰۱۸ )

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

برای یافتنِ یک فریم ورکِ مناسب به پیشنهاد تیم فریس در کتاب The 4-Hour Chef عمل کردم. این کتاب باعث شد تا با دو شخصیت مهم گفتگو کنم. اولی C.Jordan Ball (جزو اولین یا دومین نفراتِ فعال در سایت Coderbyte) و دیگری V.Anton Spraul (نویسندۀ کتابِ «مثلِ یک برنامه‌نویس فکر کنید: مقدمه‌ای بر حلِ مسئلۀ خلاقانه».

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

بخوانید  31 ترفند پیشرفته جهت بهبود مهارت‌های برنامه نویسی اندروید

بزرگترین مشکلِ برنامه‌نویسان تازه‌کار این است که به جای یاد گرفتنِ حلِ مسئله روی یادگیری سینتکس تمرکز می‌کنند.

V.Anton Spraul

هنگام مواجهه با یک مسئلۀ جدید مراحل زیر را طی کنید:

۱٫ درک مسئله

مسئلۀ را خوب بفهمید. بیشترِ مسائل به این خاطر سخت هستند که به خوبی درکشان نکرده‌اید. به همین خاطر اولین و مهم‌ترین قدم در حل مسائل درک درستِ مسئله است.

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

احتمالاً تا الان برای شما هم پیش آمده که حین سوال پرسیدن، از بس تلاش می‌کنید مسئله را ساده و واضح بیان کنید که خودتان در حینِ نوشتنِ توضیحات جواب را پیدا می‌کنید. چرا؟ چون برای درست رساندن مسئله باید ابتدا درست درکش کنید.

دقیقاً به همین خاطر توصیه شده مسائل را بر روی کاغذ بنویسید. سعی کنید مسئله را به زبان ساده برای دیگران بیان کنید.

وقتی نمی‌توانید چیزی را ساده توضیح دهید یعنی نفهمیده‌اید.

ریچارد فاینمن

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

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

برنامه‌ای درست است که پاسخِ درستی به این سوال داشته باشد:

با توجه به ورودیِ X چه مراحلی برای تولیدِ خروجیِ Y لازم است؟

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

۳٫ تقسیمِ مسئله

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

هیچگاه سعی نکنید یک مسئلۀ بزرگ را در همان مقیاس حل کنید. ابتدا مسئله را به چند زیرمسئلۀ کوچکتر بشکنید. حلِ این زیرمسئله‌ها ساده‌تر است. از ساده‌ترین مورد شروع کرده و یک به یک حل کنید. منظور از ساده مسئله‌ای است که جوابش را کامل یا به صورتِ حدودی بلدید . ساده یعنی مسئله‌ای که حلِ آن وابسته به حل سایرِ مسائل نباشد. با حلِ تک تک زیرمسائل و اتصالشان به هم به جواب مسئلۀ بزرگ خواهید رسید. این یکی از اساسی‌ترین تکنیک‌های حل مسئله است.

اگر می‌توانستم به همۀ برنامه‌نویس‌های مبتدی مهارتی را آموزش دهم، تکنیکِ شکستن مسئله را یاد می‌دادم.

برای مثال فرض کنید از شما خواسته شده برنامه‌ای بنویسید که با دریافتِ ۱۰ عدد، سومین عددِ بزرگ را تشخیص دهد. این مسئله با اینکه با یک کدِ ساده قابل حل است ولی ممکن است برای یک برنامه‌نویس مبتدی سخت باشد.

هنگام گیر کردن روی یک مسئله آن را ساده کنید. به جای سومین عددِ بزرگ، بزرگترین عدد را پیدا کنید؟ هنوز هم سخت است؟ بزرگترین عدد بین ۳ عدد را پیدا کنید؟ یا بزرگترین بین ۲ عدد؟

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

V.Anton Spraul

۴٫ اشکال‌زدایی

خیلی هم خوب. ولی اگر نتوانیم زیرمسائل را حل کنیم چه؟

بخوانید  خصوصیات افرادی که مناسب کار تیمی نیستند

اولاً یک نفسِ عمیق بکشید و دوماً خونسردیِ خود را حفظ کنید. چیزی که گفتید برای همه اتفاق می‌افتد! تفاوت اینجاست که بهترین برنامه‌نویسان/حل‌کنندگان مسئله بیشتر از اینکه به خاطر باگ‌ها و خطاها از کوره در بروند کنجکاو هستند تا مشکل را حل کنند.

وقتی به بدشانسی می‌خورید این سه کار را انجام دهید:

۱- دیباگ: قدم به قدم راه‌حل را بررسی کرده تا بفهمید مشکل کجاست. برنامه‌نویس‌ها به این کار دیباگ کردن یا اشکال‌زدایی (Debugging) می‌گویند (در واقع این کاری است که ابزارِ دیباگر انجام می‌دهد).

هنر دیباگینگ یعنی درک آنچه واقعاً به برنامۀ گفته‌اید نه آنچه فکر می‌کردید که گفته‌اید.

Andrew Singer

۲- ارزیابی مجدد: یک قدم عقب برگردید و مسئله را از زاویۀ دیگری بررسی کنید. ببینید آیا می‌توانید مسئله را با یک رویکرد عمومی‌تر حل کنید؟

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

مثال رایجش جمع لیستی از اعداد متوالیِ یک تا n است که گاوسِ جوان بدون زحمتِ جمعِ تک تک اعداد توانست با فرمولِ سادۀ n+1)/2) پاسخ را به دست آورد.

C.Jordan Ball

روشِ دیگر برای بازبینی مسئله شروعِ دوبارۀ آن است. همه چیز را پاک کرده و با نگاهِ جدیدی به مسئله نگاه کنید. از اینکه چقدر این کار موثر است شگفت زده خواهید شد.

۳- تحقیق: مهم نیست روی چه مسئله‌ای کار می‌کنید. احتمالاً یک نفر قبل از شما آن را حل کرده و کافی است در گوگل جستجو کنید. حتی اگر مسئله را حل کرده‌اید باز هم پیشنهاد می‌کنم این کار را انجام دهید تا با سایرِ راهکارهای موجود آشنا شوید.

بخوانید  چند توصیه به برنامه‌نویسان و مدیران پروژه

هشدار: برای مسائل بزرگ دنبالِ جواب نگردید. فقط برای زیرمسئله‌ها جستجو کنید. چرا؟ چون تازمانی که تلاش نکنید چیزی یاد نمی‌گیرید. و اگر چیزی یاد نگیرید یعنی وقتتان را تلف کرده‌اید.

زیاد تمرین کنید

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

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

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

به گفتۀ بایرون رویز (Byron Reeves)، اگر می‌خواهید بدانید صاحبِ یک کسب‌وکار سه تا پنج سالِ دیگر کجاست به اتفاقاتی که در بازی‌های آنلاین می‌افتد نگاه کنید.

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

ماری میکر (گزارش ترندهای اینترنتی – ۲۰۱۷)

البته نه هر بازی!

هدف از بازی حل مسئله است. بازی‌ها کمک می‌کنند تا روی مسائل فکر کنید. راهکار پیدا کنید و وقتی به جواب برسید لذت ببرید. برای مثال من خودم از چالش‌های کدنویسی لذت می‌برم و به همین جهت هر روز یکی از چالش‌های مطرح شده در سایتِ Coderbyte را حل می‌کنم.

نتیجه‌گیری

اکنون می‌دانید که فکر کردن مثلِ یک برنامه‌نویس یعنی چه؛ و این را هم می‌دانید که «حل مسئله» مهارتی چندگانه است. یاد گرفتید برای حلِ مسائل باید از چارچوب استفاده کنید و برای تقویتِ این مهارت تمرین کنید.

امیدوارم با مسائلِ مختلفی درگیر شوید!

با توضیحاتِ بالا از این پس می‌توانید مسائل را راحت‌تر حل کنید. این را هم دانستید که با حلِ هر مسئله مهارتِ شما بهبود می‌یابد.

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

زندگی یعنی شکستِ موانع؛ موانعِ سخت که باید با موفقیت از آن‌ها عبور کنیم.

هر بار چیز جدیدی یاد می‌گیریم؛ هر بار قدرت، خرد و دیدگاهمان گسترش پیدا می‌کند؛ هر بار در مسابقۀ زندگی اندکی جلوتر می‌روید و در آخر به نسخه‌ای بهتر از خودمان تبدیل می‌شویم.

رایان هالیدی در کتاب مانع همان راه است.

منبع: Medium

سید ایوب کوکبی

نویسنده و مترجم...

0 دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *