كيف تفكر كمبرمج - دروس في حل المشكلات

إذا كنت مهتمًا بالبرمجة ، فربما تكون قد شاهدت هذا الاقتباس من قبل:

"يجب أن يتعلم كل شخص في هذا البلد برمجة جهاز كمبيوتر ، لأنه يعلمك التفكير." - ستيف جوبز

ربما تساءلت أيضًا عما يعنيه ، بالضبط ، التفكير كمبرمج؟ و كيف ستفعل ذلك؟

بشكل أساسي،الأمر كله يتعلق بطريقة أكثر فعالية لحل المشكلات .

في هذا المنشور ، هدفي هو أن أعلمك بهذه الطريقة.

في نهاية الأمر ، ستعرف بالضبط الخطوات التي يجب اتخاذها لتكون قادرًا على حل المشكلات بشكل أفضل.

لماذا هذا مهم؟

حل المشكلات هو المهارة الفوقية.

كلنا لدينا مشاكل. كبير وصغير. كيف نتعامل معهم في بعض الأحيان ، حسنًا ... عشوائي جدًا.

ما لم يكن لديك نظام ، فمن المحتمل أن تكون هذه هي الطريقة التي "تحل بها" المشكلات (وهو ما فعلته عندما بدأت في البرمجة):

  1. جرب الحل.
  2. إذا لم يفلح ذلك ، فجرب واحدة أخرى.
  3. إذا لم يفلح ذلك ، كرر الخطوة 2 حتى يحالفك الحظ.

انظر ، في بعض الأحيان كنت محظوظا. لكن هذه هي أسوأ طريقة لحل المشاكل! وهي مضيعة هائلة ، ضخمة للوقت.

تتضمن أفضل طريقة أ) وجود إطار عمل و ب) ممارسة ذلك.

"يعطي جميع أرباب العمل تقريبًا الأولوية لمهارات حل المشكلات أولاً. تعد مهارات حل المشكلات بالإجماع تقريبًا أهم المؤهلات التي يبحث عنها أصحاب العمل ... أكثر من إتقان لغات البرمجة وتصحيح الأخطاء وتصميم النظام. إظهار التفكير الحسابي أو القدرة على الانهيار الكبير ، فإن المشكلات المعقدة لا تقل قيمة (إن لم تكن أكثر من ذلك) عن المهارات التقنية الأساسية المطلوبة للوظيفة ". - تصنيف الهاكر (تقرير مهارات المطور لعام 2018)

لديك إطار عمل

للعثور على الإطار الصحيح ، اتبعت النصيحة الواردة في كتاب تيم فيريس حول التعلم ، "The 4-Hour Chef".

قادني ذلك إلى إجراء مقابلة مع شخصين رائعين حقًا: ج. جوردان بول (المرتبة الأولى أو الثانية من بين أكثر من 65000 مستخدم على Coderbyte) ، وف. أنطون سبرولي (مؤلف كتاب "فكر كمبرمج: مقدمة لحل المشكلات الإبداعي" ").

سألتهم نفس الأسئلة وخمنوا ماذا؟ كانت إجاباتهم متشابهة إلى حد كبير!

قريباً ، ستعرفهم أيضًا.

Sidenote: هذا لا يعني أنهم فعلوا كل شيء بالطريقة نفسها. كل شخص مختلف. ستكون مختلفا. ولكن إذا بدأت بالمبادئ التي نتفق جميعًا على أنها جيدة ، فسوف تحصل على المزيد بشكل أسرع كثيرًا.

"أكبر خطأ أرى أن المبرمجين يرتكبونه هو التركيز على تعلم بناء الجملة بدلاً من تعلم كيفية حل المشكلات." - في انطون سبرولي

إذن ، ما الذي يجب عليك فعله عندما تواجه مشكلة جديدة؟

فيما يلي الخطوات:

1. فهم

تعرف بالضبط ما هو مطلوب. معظم المشاكل الصعبة صعبة لأنك لا تفهمها (ولهذا السبب كانت هذه هي الخطوة الأولى).

كيف تعرف عندما تفهم مشكلة؟ متى يمكنك شرحها بلغة إنجليزية بسيطة.

هل تتذكر أنك عالق في مشكلة ما ، وتبدأ في شرحها ، وترى على الفور ثغرات في المنطق الذي لم تره من قبل؟

يعرف معظم المبرمجين هذا الشعور.

هذا هو السبب في أنه يجب عليك كتابة مشكلتك ، أو رسم رسم تخطيطي ، أو إخبار شخص آخر عنها (أو شيء ... بعض الناس يستخدمون بطة مطاطية).

"إذا كنت لا تستطيع شرح شيء ما بعبارات بسيطة ، فأنت لا تفهمه." - ريتشارد فاينمان

2. الخطة

لا تغوص في الحل بدون خطة (وآمل بطريقة أو بأخرى أن تشق طريقك من خلال ذلك). خطط للحل الخاص بك!

لا شيء يمكن أن يساعدك إذا لم تتمكن من كتابة الخطوات الدقيقة.

في البرمجة ، هذا يعني عدم البدء في القرصنة على الفور. امنح عقلك وقتًا لتحليل المشكلة ومعالجة المعلومات.

للحصول على خطة جيدة أجب عن هذا السؤال:

"بالنظر إلى الإدخال X ، ما هي الخطوات اللازمة لإرجاع المخرجات Y؟"

Sidenote: لدى المبرمجين أداة رائعة لمساعدتهم في هذا ... التعليقات!

3. قسمة

انتبه. هذه هي أهم خطوة على الإطلاق.

لا تحاول حل مشكلة واحدة كبيرة. سوف تبكي.

بدلاً من ذلك ، قسّمها إلى مشاكل فرعية. هذه المشاكل الفرعية أسهل في الحل.

ثم حل كل مشكلة فرعية واحدة تلو الأخرى. ابدأ بالأبسط. أبسط يعني أنك تعرف الإجابة (أو أقرب إلى تلك الإجابة).

بعد ذلك ، يعني الأبسط أن هذه المشكلة الفرعية التي يتم حلها لا تعتمد على حل المشكلات الأخرى.

بمجرد حل كل مشكلة فرعية ، قم بتوصيل النقاط.

سيعطيك ربط جميع "الحلول الفرعية" حلاً للمشكلة الأصلية. تهانينا!

هذه التقنية هي حجر الزاوية في حل المشكلات. تذكرها (اقرأ هذه الخطوة مرة أخرى ، إذا كان عليك ذلك).

"إذا كان بإمكاني تعليم كل مبرمج مبتدئ مهارة واحدة لحل المشكلات ، فستكون" تقليل تقنية المشكلة ". على سبيل المثال ، افترض أنك مبرمج جديد ويطلب منك كتابة برنامج يقرأ عشرة أرقام وأرقام أي رقم هو ثالث أعلى. بالنسبة للمبرمجين الجدد ، يمكن أن تكون هذه مهمة صعبة ، على الرغم من أنها تتطلب فقط بناء جملة أساسيًا في البرمجة ، وإذا كنت عالقًا ، فيجب عليك تقليل المشكلة إلى شيء أبسط. بدلاً من ثالث أعلى رقم ، ماذا عن إيجاد أعلى رقم إجمالي؟ لا يزال صعبًا جدًا؟ ماذا عن إيجاد أكبر ثلاثة أعداد فقط؟ أو الأكبر من اثنين؟ اختصر المشكلة إلى الحد الذي تعرف فيه كيفية حلها وكتابة الحل. ثم وسع المشكلة قليلاً وأعد كتابة الحل ليطابق ، واستمر في ذلك حتى تعود من حيث بدأت. " - في انطون سبرولي

4. عالق؟

الآن ، من المحتمل أنك جالس هناك تفكر "مرحبًا ريتشارد ... هذا رائع وكل شيء ، ولكن ماذا لو كنت عالقًا ولا يمكنني حتى حل مشكلة فرعية ؟؟"

أولاً ، خذ نفسًا عميقًا. ثانيًا ، هذا عادل.

لا تقلق رغم ذلك يا صديقي. هذا يحدث للجميع!

الفرق هو أن أفضل المبرمجين / الذين يحلون المشاكل هم أكثر فضولًا بشأن الأخطاء / الأخطاء أكثر من الغضب.

في الواقع ، إليك ثلاثة أشياء يجب تجربتها عند مواجهة الضربة:

  • تصحيح الأخطاء: انتقل خطوة بخطوة خلال الحل الخاص بك في محاولة للعثور على المكان الذي أخطأت فيه. يسمي المبرمجون هذا التصحيح (في الواقع ، هذا كل ما يفعله مصحح الأخطاء).
"فن تصحيح الأخطاء هو اكتشاف ما أخبرت برنامجك حقًا أن يفعله بدلاً من ما كنت تعتقد أنك طلبت منه فعله." - أندرو سينجر
  • أعد التقييم:خذ خطوة للوراء. انظر إلى المشكلة من منظور آخر. هل هناك أي شيء يمكن استخراجه لنهج أكثر عمومية؟
"أحيانًا نضيع في تفاصيل المشكلة لدرجة أننا نتجاهل المبادئ العامة التي من شأنها أن تحل المشكلة على مستوى أكثر عمومية. [...] المثال الكلاسيكي لهذا ، بالطبع ، هو تلخيص قائمة طويلة من الأعداد الصحيحة المتتالية ، 1 + 2 + 3 + ... + n ، والتي تعرف عليها Gauss الصغير بسرعة كانت ببساطة n (n + 1) / 2 ، وبالتالي تجنب مجهود الاضطرار للقيام بالإضافة ". - جوردان بول

Sidenote: هناك طريقة أخرى لإعادة التقييم وهي البدء من جديد. احذف كل شيء وابدأ من جديد بعيون جديدة. أنا جادة. ستندهش من مدى فعالية ذلك.

  • ابحاث:آه ، حسنًا يا Google. تقرأ هذا الحق. بغض النظر عن المشكلة التي تواجهها ، فمن المحتمل أن يكون شخص ما قد حلها. ابحث عن هذا الشخص / الحل. في الواقع ، افعل هذا حتى لو قمت بحل المشكلة! (يمكنك تعلم الكثير من حلول الآخرين).

تحذير: لا تبحث عن حل للمشكلة الكبيرة. ابحث فقط عن حلول للمشاكل الفرعية. لماذا ا؟ لأنه ما لم تكافح (ولو قليلاً) ، فلن تتعلم أي شيء. إذا لم تتعلم أي شيء ، فقد أهدرت وقتك.

ممارسة

لا تتوقع أن تكون رائعًا بعد أسبوع واحد فقط. إذا كنت تريد أن تكون قادرًا على حل المشكلات ، فقم بحل الكثير من المشكلات!

ممارسة. ممارسة. ممارسة. ستكون مسألة وقت فقط قبل أن تدرك أن "هذه المشكلة يمكن حلها بسهولة."

كيف تتمرن؟ هناك خيارات خارج wazoo!

ألغاز الشطرنج ، مشاكل الرياضيات ، Sudoku ، Go ، Monopoly ، ألعاب الفيديو ، cryptokitties ، bla ... bla ... bla….

في الواقع ، هناك نمط شائع بين الأشخاص الناجحين وهو عادتهم في ممارسة "حل المشكلات الجزئي". على سبيل المثال ، يلعب Peter Thiel لعبة الشطرنج ، بينما يلعب Elon Musk ألعاب الفيديو.

قال بايرون ريفز: "إذا كنت تريد أن ترى كيف ستبدو قيادة الأعمال في غضون ثلاث إلى خمس سنوات ، فراجع ما يحدث في الألعاب عبر الإنترنت." سريعًا إلى اليوم. يقول إيلون [ماسك] وريد [هوفمان] ومارك زوكربيرج وغيرهم الكثير أن الألعاب كانت أساس نجاحهم في بناء شركاتهم ". - ماري ميكر (تقرير اتجاهات الإنترنت لعام 2017)

هل هذا يعني أنه يجب عليك فقط لعب ألعاب الفيديو؟ على الاطلاق.

لكن ما هي ألعاب الفيديو؟ هذا صحيح ، حل المشكلات!

لذا ، ما يجب عليك فعله هو إيجاد منفذ للممارسة. شيء يسمح لك بحل العديد من المشكلات الصغيرة (من الناحية المثالية ، شيء تستمتع به).

على سبيل المثال ، أنا أستمتع بتحديات البرمجة. كل يوم ، أحاول حل تحدٍ واحد على الأقل (عادةً على Coderbyte).

كما قلت ، كل المشاكل تشترك في أنماط متشابهة.

استنتاج

هذا كل ما لدي أيها الناس!

الآن ، أنت تعرف بشكل أفضل ما يعنيه "التفكير كمبرمج".

أنت تعلم أيضًا أن حل المشكلات هو مهارة رائعة يجب تنميتها (المهارة الفوقية).

كما لو أن هذا لم يكن كافيًا ، لاحظ كيف تعرف أيضًا ما يجب فعله لممارسة مهارات حل المشكلات لديك!

تفو ... رائع أليس كذلك؟

أخيرًا ، أتمنى أن تواجهك مشاكل كثيرة.

تقرأ هذا الحق. على الأقل الآن أنت تعرف كيفية حلها! (أيضًا ، ستتعلم أنه مع كل حل ، فإنك تتحسن).

"فقط عندما تعتقد أنك نجحت في اجتياز إحدى العقبات ، تظهر أخرى. لكن هذا ما يجعل الحياة ممتعة. [...] الحياة عبارة عن عملية اختراق هذه العوائق - سلسلة من الخطوط المحصنة التي يجب علينا اختراقها. في كل مرة ، ستتعلم شيئًا ما. في كل مرة ، ستطور القوة والحكمة ، والمنظور: في كل مرة ، يسقط المزيد من المنافسة. حتى تبقى أنت: أفضل نسخة منك ". - ريان هوليداي (العقبة هي الطريق)

الآن ، اذهب لحل بعض المشاكل!

وأفضل حظ؟

شكر خاص لـ C. Jordan Ball و V. Anton Spraul. كل النصائح الجيدة هنا جاءت منهم.

شكرا للقراءة! إذا استمتعت بها ، اختبر عدد المرات التي يمكنك الضغط عليها في 5 ثوانٍ. إنه تمرين رائع لأصابعك وسيساعد الآخرين على رؤية القصة.