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

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

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

اگر به برنامه نویسی علاقه دارید، ممکن است این نقل قول را شنیده باشید:

" همه در این کشور باید برنامه نویسی کامپیوتر را یاد بگیرند، زیرا به شما یاد می‌دهد که فکر کنید " - استیو جابز

شما احتمالا تعجب کرده‌اید که این دقیقا چه معنایی دارد،درست است!  فکر کردن مانند یک برنامه نویس؟ چگونه این کار را انجام می دهیم؟

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

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

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

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

اگر یک سیستم داشته باشید، این احتمالا روشی است که شما "مسائل" را حل می کنید ( که همان کاری است که وقتی شروع به برنامه‌نویسی کردم انجام دادم ):

۱. یک راه‌حل امتحان می کنید.

۲. اگر این کار نکرد، یکی دیگر را امتحان می کنید.

۳. اگر این کار نمی‌کند، گام ۲ را تکرار کنید تا زمانی که موفق شوید.

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

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

"تقریبا همه کارفرمایان در ابتدا مهارت‌های حل مساله را در اولویت قرار میدهند.

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

تفکر محاسباتی یا توانایی تجزیه و تحلیل مشکلات بزرگ و پیچیده به اندازه مهارت‌های فنی پایه مورد نیاز برای یک شغل ارزشمند است - Hacker Rank -( گزارش توسعه توسعه دهندگان ۲۰۱۸ )

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

برای پیدا کردن چارچوب درست، من ازتوصیه های کتاب  Tim Ferriss در زمینه یادگیری، پیروی کردم کتاب “The 4-Hour Chef”..

این باعث شد که من با دو نفر واقعا جالب مصاحبه کنم:  C. Jordan Ball(در رده اول یا دوم از ۶۵،۰۰۰ + کاربر بر روی Coderbyte ) و V. Anton Spraul  نویسنده کتاب " مانند یک  برنامه نویس فکر کنید: یک مقدمه برای حل مساله خلاقانه ".

من از آن‌ها همان سوالات را پرسیدم و حدس بزنید چی شد ؟ پاسخ‌های آن‌ها نسبتا شبیه هم بود !

خیلی زود، شما هم آن‌ها را خواهید دانست.

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

وی می‌گوید: " بزرگ‌ترین اشتباه من این است که برنامه نویسان تازه‌کار به جای یادگیری نحوه حل مشکلات، روی یادگیری دستور زبان تمرکز می کنند ." V. Anton Spraul

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

این مراحل عبارتند از :

۱. فهمیدن

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

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

آیا به یاد دارید که بر روی یک مشکل گیر کرده‌اید، شروع به توضیح آن می‌کنید، و شما فورا متوجه حفره هایی در منطق می شوید که قبلا ندیده اید ؟

اکثر برنامه نویسان این احساس را می‌دانند.

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

" اگر نمی‌توانید چیزی را در شرایط ساده توضیح دهید، آن را درک نکرده اید " - Richard Feynman

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

بدون یک برنامه به سمت حل مشکل شیرجه نروید ( و به نوعی امیدوارم که سردرگم نشوید ). برای راه‌حل خود برنامه‌ریزی کنید !

اگر نمی‌توانید مراحل دقیق را یادداشت کنید ، هیچ چیزی نمی‌تواند به شما کمک کند.

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

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

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

نکته حاشیه ای: برنامه نویسان یک ابزار بسیار قدرتمند دارند که به کمکشان می آید .... که کامنت ها هستند!

3. تقسیم کنید

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

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

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

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

هنگامی که هر مشکلی را حل کردید، آنها را متصل کنید.

اتصال تمام زیر راه حل های شما راه حل مشکل اصلی را به شما می دهد. تبریک می گویم!

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

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

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

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

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

4. گیر کرده اید؟

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

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

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

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

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

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

• دوباره ارزیابی کنید: یک گام به عقب بردارید از یک دید دیگر به قضیه نگاه کنید. آیا چیزی است که بتوانید به یک رویکرد کلی تر خلاصه کنید؟

"گاهی اوقات ما در جزئیات مشکلات چیزهایی را از دست می دهیم که اصول کلی را رد می کنیم تا مشکل را در یک سطح عمومی تر حل کنیم. [...]

مثال کلاسیک این، البته، جمع کردن یک لیست طولانی از اعداد صحیح متوالی، 1 + 2 + 3 + ... + n است که گاوس جوان به سادگی به n (n + 1) / 2 رسید ، بنابراین از جمع کردن انها اجنتاب کرد.  "- C. Jordan Ball

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

• تحقیق: گوگل. مهم نیست که چه مشکلی دارید، کسی احتمالا آن را حل کرده است. راه حل این شخص را پیدا کنید در حقیقت این کار را حتی اگر مشکل را حل کردید انجام دهید! (شما می توانید از راه حل های دیگران چیزهای زیادی یاد بگیرید).

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

تمرین کنید

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

تمرین. تمرین. تمرین. این مسئله باعث می شود که شما متوجه شوید که "این مساله به راحتی می تواند با  اضافه کردن این کد به اینجا حل شود.

چگونه تمرین کنیم؟

شطرنچ، مسائل ریاضی، سودوکو، Go، Monopoly، بازی های ویدئویی، و...

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

" Byron Reeves گفت:" اگر می خواهید ببینید که فلان کسب و کار چگونه در سه تا پنج سال آینده به نظر برسد، به آنچه اتفاق می افتد در بازی های آنلاین نگاه کنید. "

Elon [Musk], Reid [Hoffman], Mark Zuckerberg و بسیاری دیگر می گویند که بازی ها مبنایی برای موفقیت آنها در ساختن شرکت هایشان بوده است. "- Mary Meeker

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

اما نکته مهم درباره بازی های ویدئویی چیست؟ درست است، حل مسئله!

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

به عنوان مثال، از چالش های برنامه نویسی لذت می برم. هر روز من سعی می کنم حداقل یک چالش را حل کنم (معمولا در Coderbyte).

همانطور که گفتم، تمام مشاغل الگوهای مشابهی را به اشتراک میگذارند.

نتیجه

حالا شما بهتر می دانید که معنای "فکر کردن مانند یک برنامه نویس" چیست.

شما همچنین می دانید که حل مسئله یک مهارت باور نکردنی برای پرورش است (یک فرا مهارت است).

اگر این کافی نبود، توجه کنید که چه کارهایی می توانید انجام دهید تا مهارت های حل مسئله را تمرین کنید!

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

بله درست خواندید. حداقل شما می دانید که چگونه آنها را حل کنید! (همچنین، شما یاد خواهید گرفت که با هر راه حل، شما ارتقا می یابید).

"فقط زمانی که شما فکر می کنید با موفقیت یک مانع را از سد راه بر میدارید وسپس یکی دیگر ظاهر می شود. اما این چیزی است که زندگی را جالب می کند [...]

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

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

هر بار، چالش های بیشتری را شکست می دهید. تا زمانی که هیچ چیزی باقی نمی ماند:  که آن موقع بهترین ورژن از شما است. "- Ryan Holiday

حالا برو و چندتا مساله حل کن!