اگر شما به برنامهنویسی علاقهمند هستید، بهتر است که ابتدا این نقل قول را بخوانید: هر کسی باید برنامهنویسی را یاد بگیرد، چرا که این کار شیوه فکر کردن را آموزش میدهد – استیو جابز
شما احتمالاً از خود میپرسید که فکر کردن همانند یک برنامهنویس دقیقاً به چه معنی است؟ و چگونه باید این کار را انجام دهید؟ اساساً، برنامهنویسی یک روش موثر برای حل مسئله است. هدف در این مقاله، آموزش این روش به شما است. در انتهای مقاله شما گامهای لازم برای تبدیل شدن به یک حلال مسئله را به طور دقیق فرا خواهید گرفت.
حل مسئله یک فرا مهارت است.
همه ما مشکلاتی داریم. این میتواند روشی باشد که شما مسائل را حل میکنید ( همان چیزی که افراد زیادی در هنگام آغاز کار کد نویسی انجام دادن):
شما در برخی مواقع موفق به پیدا کردن راه حل میشوید. اما این بدترین راه برای حل مسائل است و موجب از دست رفتن زمان بسیار زیادی میشود.
بهترین روش عبارت است از: الف) داشتن یک چارچوب و ب) تمرین کردن آن.
تقریباً تمام کارفرمایان مهارت حل مسئله را در اولویت قرار میدهند.
مهارتهای حل مسئله مهمترین مهارت و ویژگی است که تقریباً تمام کارفرمایان به دنبال آن هستند، حتی بسیار بیشتر از میزان مهارت در زبانهای برنامهنویسی و طراحی سیستم.
نشان دادن مهارت تفکر محاسباتی یا توانایی حل مسائل بزرگ و پیچیده به اندازه (اگر بیشتر نباشد) مهارتهای پایهای برای انجام یک شغل، ارزشمند است – Haker Rank (گزارش توسعه مهارت ۲۰۱۸)
برای یافتن یک چارچوب صحیح، میتوانید توصیه مطرح شده در کتاب Tim Feriss در مورد یاد گیری را به کار بگیرید”سرآشپز چهار ساعته”
این توصیه سبب شد تا با دو نفر مصاحبه به عمل بیاید: C.Jordan Ball (رتبه اول یا دوم در میان ۶۵۰۰۰ کاربر Coderbyte) و V.Anton Spraul (نویسنده کتاب “تفکر همانند یک برنامهنویس: مقدمهای بر حل خلاقانه مسئله”)
از این دو شخص تقریباً سوالات مشابهی به عمل آمد. حدس بزنید چه اتفاقی افتاد؟ پاسخ آنها تقریبا یکسان بود. بزودی این پاسخها را خواهید فهمید.
این بدین معنی نیست که آنها همه چیز را به یک روش انجام میدهند. هر فردی متفاوت است. شما نیز متفاوت خواهید بود. اما اگر شما با اصول و قواعدی شروع کنید که همه ما بر خوببودن آن توافق داریم، شما بسیار سریعتر خواهید بود.
بزرگترین خطایی که یک برنامهنویس مرتکب میشود تمزکر بر روی یادگیری دستور زبان برنامهنویسی به جای یادگیری چگونگی حل مسئله است. Antom Spraul
بنابراین در هنگام مواجهشدن با یک مسئله چکار باید بکنید؟
اینها گامهایی است که باید برداشته شود:
بسیاری از مسائل به این دلیل مشکل هستند که شما آن را درک نمیکنید ( به همین دلیل این گام نخست است).
چگونه متوجه میشوید که مسئله را درک کردهاید؟ زمانی که بتوانید آن را به زبان فارسی سلیس توضیح دهید.
این امر به این دلیل است که شما باید مسئله را بنویسید، یک چارت بکشید یا با یک فرد دیگر صحبت کنید ( یا یک جسم-برخی افراد از اردک پلاستیکی استفاده کنید).
اگر نتوانید چیزی را به زبان ساده توضیح دهید آن را درک نکردهاید – Richard Feynman
بدون داشتن برنامه مستقیماً برای حل مسئله شیرجه نزنید ( و امیدوار باشید که به نحوی راه خود را پیدا کنید) راه حل خود را برنامهریزی کنید.
اگر مراحل دقیق را ننویسید، هیچ چیزی نمیتواند به شما کمک کند.
در برنامهنویسی بلافاصله شروع به کار نکنید. به مغز خود زمان دهید تا مسئله را آنالیز کرده و اطالاعات را پردازش کند.
برای داشتن یک برنامه مناسب، به این سوال پاسخ دهید:
با داشتن ورودی X گامهای ضروری برای داشتن خروجی Y چه خواهد بود؟
در حاشیه مطلب: برنامهنویسان ابزار بسیار مناسبی دارند تا آنها را در این زمینه کمک کند—کامنتها!
توجه کنید که این مرحله مهمترین مرحله در بین تمام مراحل است.
سعی نکنید یک مسئله بزرگ را یک جا حل کنید. به گریه خواهید افتاد.
به جای این کار، آن را به مسئلههای کوچکتری تقسیم کنید. این مسئله کوچکتر بسیار سادهتر خواهد بود.
پس از این کار، حل شدن مسئلههای کوچکتر ارتباطی به حل شدن سایر مسئلههای کوچک نخواهند داشت.
هر بار که هر مسئله کوچک را حل کردید، نقطهها را به هم وصل کنید.
تبریک! مرتبط کردن تمام راه حلهای فرعی، راه حل مسئله اصلی را به شما نشان میدهد.
این روش پایه و اساس حل مسئله است. این را به یاد داشته باشید ( اگر لازم است، این مرحله را دوباره بخوانید).
اگر بتوانید به هر برنامهنویس مبتدی مهارت حل مسئله را یاد دهید، آن تکنیک کاهش دادن مسئله خواهد بود.
به عنوان مثال، فرض کنید که شما یک برنامهنویس تازهکار هستید و از شما درخواست شده که ۱۰ عدد را بخوانید و سومین عدد از نظر بزرگی را تعیین کنید. برای یک برنامهنویس تازهکار، این میتواند یک کار دشوار باشد، هر چند که فقط دانستن دستور زبان پایهای برنامهنویسی برای آن کافی است.
اگر گیر افتادید، باید مسئله را به یک چیز سادهتر کاهش دهید. به جای سومین عدد از نظر بزرگی، چطور است بزرگترین عدد را پیدا کنید؟ هنوز مشکل است؟ چطور است بزرگترین رقم در بین سه عدد را پیدا کنید؟ یا بزرگترین بین دو عدد؟
مسئله را به نقطهای کاهش دهید که بدانید چگونه آن را حل کنید و راه حل را بنویسید. سپس به تدریج مسئله را گسترش دهید و مجدداً راه حل را بنویسید و این کار را تا جایی ادامه دهید که به نقطه آغاز کار برسید. – V.Anton Spraul
در حال حاضر، شما احتمالاً نشستهاید و به این فکر میکنید که این روش مناسبی است، اما اگر من گیر کنم و نتوانم مسئلههای فرعی را حل کنم چه؟
در ابتدا، یک نفس عمیق بکشید. دوماً این طبیعی است.
دوست من نگران نباش، این برای هر کسی اتفاق میافتد.
تفاوت در این است که بهترین برنامهنویسان و حلکنندگان مسئله به جای عصبانی شدن، در مورد خطاها و اشکالها کنجکاو هستند.
در حقیقت، سه چیز وجود دارد که باید در هنگام مواجه شدن با بدشانسی انجام دهید:
اشکالزدایی: گام به گام در مسیر راه حل خود پیش روید و تلاش کنید خطا و اشتباه را پیدا کنید. برنامهنویسان این را اشکالزدایی اطلاق میکنند (در حقیقت این چیزی است که یک اشکالزدا انجام میدهد).
هنر اشکالزدایی، درک آن چیزی است که به برنامه گفتهاید انجام دهد، به جای آن چیزی که به شما گفته شده تا انجام دهید. Andrew Singer
ارزیابی مجدد: یک گام به عقب برگردید. به مسئله از زاویه دیگری نگاه کنید. چیز دیگری وجود دارد که میتواند با روش عمومیتری حل شود؟
برخی مواقع ما در جزئیات مسئله گم میشویم، چرا که ما از اصول پایهای که میتواند مسئله را در سطوح عمومیتری حل کند صرف نظر میکنیم.
یک مثال کلاسیک از این شرایط، جمع بستن لیست بلندی از اعداد است، ۱+۲+۳+…+n که گاوس بسیار جوان سریعاً تشخیص داد که میتواند n(n+1)/2 باشد، بنابراین از تلاش و زحمت برای انجام فرایند جمع جلوگیری کرد. C.Jordan Ball
در حاشیه متن: یک راه دیگر برای ارزیابی مجدد آغاز دوباره است. همه چیز را پاک کنید و با چشمان تازه و سرحال شروع کنید. شما از میزان موثر بودن این روش حیرتزده خواهید شد.
جستجو: گوگل چقدر خوب است. درست خواندید. مهم نیست چه مسئلهای دارید، ممکن است کسی آن را حل کرده باشد. شخص یا راه حل را پیدا کنید. در حقیقت، حتی اگر راه حل را پیدا کرده باشید این کار را انجام دهید (شما میتوانید از راه حل دیگران چیزهای زیادی یاد بگیرید).
هشدار: دنبال راه حل برای مسئله بزرگ نباشید. تنها به دنبال راه حلی برای مسئلههای کوچک باشید. چرا؟ اگر شما دچار چالش نشوید، چیزی را یاد نخواهید گرفت. اگر چیزی یاد نگیرید، وقت خود را تلف کردهاید.
تنها پس از یک هفته انتظار بزرگی نداشته باشید. اگر میخواهید حلکننده مسئله خوبی باشید باید مسائل زیادی را حل کنید.
تمرین، تمرین، تمرین. زمان باید بگذرد، قبل از اینکه تشخیص دهید “این مسئله میتوانست با این راه حل………. ( مفهومی را وارد کنید) حل شود”
چگونه تمرین کنیم؟ روشهای بسیاری وجود دارد
شطرنج، مسائل ریاضی، سودوکو، GO، مونو پلی، بازی ویدویی، کریپتوکینز و….
در حقیقت روش متداول میان افراد موفق عادت آنها به تمرین برای حل مسائل کوچک است. به عنوان مثال، Peter Thiel شطرنج بازی میکند و Elon Musk بازی ویدویی میکند.
Byron Reeves گفت: اگر میخواهید بدانید رهبری امور تجاری در ۳ تا ۵ سال آینده چگونه خواهد بود، به چیزی که در بازی ویدویی رخ میدهد بنگرید.
تا به امروز Elon Musk، Reid Hoffman، Mark Zukerbeh و بسیاری دیگر اظهار داشتهاند که بازیها پایه و اساس موفقیتشان در ساخت شرکتهایشان بودهاند- Mary Meeker (گزارش روند اینترنت ۲۰۱۷)
آیا این بدین معنی است که شما فقط بازی ویدویی انجام دهید؟ هرگز
اما بازیهای ویدویی راجع به چی هستند؟ درست است، حل مسئله!
بنابراین، کاری که باید انجام دهید پیدا کردن خروجی برای تمرین است. چیزی که به شما اجازه میدهد مسائل کوچک را حل کنید (به طور ایدهآل چیزی که از آن لذت ببرید).
به عنوان مثال، من از چالشهای کد نویسی لذت میبرم. هر روز، من تلاش میکنم حداقل یک چالش را حل کنم.
همانطور که بیان شد تمام مسائل الگوی یکسانی دارند.
این همه مسئله بود. هم اکنون شما بهتر میدانید که فکر کردن همانند یک برنامهنویس به چه معنی است.
شما همچنین میدانید که حل مسئله یک مهارت باور نکردنی برای رشد و توسعه است ( فرا مهارت).
در صورتی که کافی نبود، دقت کنید که چگونه تمرین دادن مهارتهای حل مسئله را یاد گرفتهاید.
درست زمانی که فکر میکنید یک مشکل را بر طرف کردهاید، مشکل دیگری پیش میآید. اما همین است که زندگی را جذاب میکند.
زندگی فرآیند از بین بردن این موانع است – یک سری از خطوط مستحکم که باید شکسته شوند.
هر بار شما چیز جدید یاد میگیرید.
هر بار شما قدرت، عقلانیت و آیندهنگری را توسعه میدهید.
هر بار بخش دیگری از رقابت را پشت سر میگذارید. تا در نهایت چیزی که باقی میماند نسخه نهایی شما باشد. Ryan Holiday (مانع در مسیر)
حالا بروید و چند مسئله را حل کنید.
موفق باشید.
منبع: freecodecamp.org
۵۰ درصد تخفیف ویژه زمستان فرانت کست تا ۱۴ دی
کد تخفیف: wnt
دیدگاهها:
مهدی نیسی
مهر 7, 1399 در 6:29 ب.ظ
سلام استاد صدری خسته باشید
مطلب بسیار خوبی بود مرسی 🙏
مسعود صدری
مهر 7, 1399 در 6:34 ب.ظ
سلام
ممنون که مطالعه کردید.
علی
اسفند 13, 1397 در 2:04 ب.ظ
سلام مرسی از مطلب بسیار خوبتون
چه کتابی رو معرفی میکنید برای حل مسائل ؟
مسعود صدری
اسفند 28, 1397 در 6:42 ب.ظ
سلام، ممنون که مطالعه کردین
اینجا رو بررسی کنید: https://introcs.cs.princeton.edu/java/assignments