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

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

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

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

" هر کسی در این کشور باید یاد بگیرد که برای یک کامپیوتر برنامه نویسی کند چرا که این موضوع به شما می آموزد که چگونه فکر کنید."
تفکر برنامه نویسی

حتما تا به حال درباره تفکر برنامه نویسی و این که یک برنامه نویس دقیقا به چه چیزی فکر می کند اندیشیده اید و حتما به این موضوع فکر کرده اید که شما درباره یک موضوع چگونه فکر می کنید؟

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


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

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

در یک سیستم کامپیوتری نمی توان این کار را انجام داد و برای حل مشکلات باید یک روند را انتخاب کرد( این موضوع دقیقا کاری است که من زمانی که برنامه نویسی را شروع کردم انجام دادم.) :

1-      یک راه حل را انتخاب کردم

2-      اگر این روش کار نمیکرد یک روش دیگر را برای حل مشکل خود پیدا می کردم و آن را امتحان می کردم

3-      اگر این راه حل نیز کار نمی کرد مرحله دوم را آنقدر ادامه می دادم که راه حل مناسبی را برای حل مشکل خود پیدا کنم

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

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

" تقریبا تمامی کارفرمایان ابتدا مهارت حل مسئله را مورد بررسی قرار می دهند و اولویت آنها داشتن این مهارت است. مهارت حل مسئله تقریبا مهم ترین موضوع و صلاحیتی است که تمامی کارفرمایان در هنگام استخدام یک برنامه نویس آن را انتخاب می کنند. این موضوع حتی مهمتر از داشتن مهارت های برنامه نویسی، اشکال زدایی و دیباگ کردن و حتی طراحی یک سیستم می باشد. داشتن تفکر برنامه نویسی و محاسباتی و توانایی شکستن مسئله های بزرگتر به مسئله های کوچکتر به همان اندازه ارزش دارد که مهارت های فنی اولیه ارزش دارد( البته اگر ارزش حل مسئله و تفکر برنامه نویسی بیشتر نباشد).


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

برای داشتن یک چارچوب درست من توصیه هایی را از کتاب book on learning اثر Tim Freriss hours دنبال کردم که این موضوع منجر به مصاحبه با دو نفر از افراد بسیار برجسته در برنامه نویسی شد که نام این افراد c. Jordan Ball و Anton Spraul می باشد که در زمینه تفکر برنامه برنامه نویسی کتاب های متعددی را نوشته اند. من از آن ها سوالات مشابهی را درباره تفکر برنامه نویسی پرسیدم، حدس میزنید که پاسخ چه بود ؟ بله پاسخ آنها کاملا مشابه یکدیگر بود که به زودی شما نیز پاسخ آنها را خواهید شنید.

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

پاسخ آنها در یک جمله این بود که:

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

بنابراین زمانی که با یک مشکل بزرگ رو برو شدیم چه کاری انجام دهیم؟

در ادامه گام های لازم برای تفکر برنامه نویسی را به شما خواهیم آموخت.


مرحله اول: یادگیری

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

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

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

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

" اگر شما نمی توانید یک مشکل را به زبانی ساده توضیح دهید شما به صورت کامل نتوانسته اید این مشکل را درک نکرده اید". – Richard Feynman


مرحله دوم: برنامه ریزی

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

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

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

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


مرحله سوم: تقسیم کردن

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


سخنی درباره تقسیم بندی کردن مسئله ها

Anton Spraul که یکی از بزرگترین برنامه نویسان دنیا می باشد، درباره این مسئله می گوید که:

" اگر من بتوانم به هر برنامه نویس مبتدی یک تکنیک حل مسئله را بیاموزم قطعا آن راه حل این است که بتوانند مسائل بزرگتر را به مسائل کوچکتر و زیر مسئله ها تقسیم بندی کنند.

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

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


شروع به کار کنید

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

در مواجهه به مشکل چه کاری انجام دهیم؟


اشکال زدایی:

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

Andrew singer درباره دیباگ کردن می گوید که: " هنر اشکال زدایی و دیباگ کردن این است که شما متوجه شوید که تفاوت میان آنچه واقعا به برنامه گفته اید تا انجام دهد و آن چه که می خواستید به او بگویید در چه چیزی است؟ "


ارزیابی دوباره:

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


صحبت های Jordan Ball درباره ارزیابی دوباره مسئله

" گاهی اوقات زمانی که ما درگیر جزییات شده ایم نکات بسیار مهمی را برای حل مسئله از دست می دهیم که برای جلوگیری از این موضوع حتما باید یک بازنگری کلی نسبت به مشکل داشته باشیم. به عنوان مثال می توان مسئله جمع اعداد صحیح 1 تا n را مثال زد که گاوس جوان به راحتی موفق شد اثبات کند که حاصل آن n(n+1)/2 می شود.

یک روش دیگر برای ارزیابی دوباره این است که همه چیز را از ذهن خود پاک کنید و با چشمانی باز دوباره به مسئله مورد نظر نگاه کنید و آنگاه می توانید مشاهده کنید که این موضوع چه تاثیری بر روی حل مسئله شما می گذارد.


یک نکته مهم دیگر

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


هشدار:

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

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

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

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

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


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

همانطور که گفتیم یک روش فوق العاده برای دستیابی به تفکر برنامه نویسی این است که بتوانید به خوبی تمرین کنید تا خوب فکر کنید و به تفکر برنامه نویسی دست پیدا کنید. mary meeker درباره این موضوع می گوید که :

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

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

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

به عنوان مثال من از چالش های برنامه نویسی نهایت لذت را می برم، من هر روز سعی می کنم که آخرین چالش های برنامه نویسی را حل کنم.


نکات پایانی

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


نتیجه گیری و صحبت پایانی

من برای شما آرزو می کنم که با مسائل مختلفی رو برو شوید مانند یک برنامه نویس ماهر چرا که حالا شما می دانید که چگونه باید به مقابله با آنها بروید و چگونه آنها را حل کنید. ryan Holiday می گوید که:

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