سنتحدث في هذا الثريد عن أكثر المهارات صعوبة في احتراف البرمجة ألا وهي «حل المشاكل».
تحتوي دورة حياة أي منتج سواء كان برمجيا أو ماديا على المشاكل، وبناء عليه تكون مهارة حل المشاكل اللبنة الأساسية في بناء مشوارك البرمجي، والتي يجب علينا الاهتمام بها عند الإقدام على تعلم البرمجة.
تكون طريقة تعاملنا مع المشاكل غير منظمة وعشوائية في أغلب الأحيان، فمعظم المبرمجين الجدد يبدؤون بحل أي مشكلة تواجههم بالطريقة التالية:
جرب أي حل للمشكلة.
إذا لم ينجح الحل الأول حاول أن تجرب أي حل آخر.
إذا لم يفلح الحل كرر الخطوة الثانية إلى أن تصل إلى الحل.
جرب أي حل للمشكلة.
إذا لم ينجح الحل الأول حاول أن تجرب أي حل آخر.
إذا لم يفلح الحل كرر الخطوة الثانية إلى أن تصل إلى الحل.
في الحقيقة، قد يحالفك الحظ أحيانًا ويتم حل المشكلة ولكن كن حذرًا! فهذه هي الطريقة الأسوأ لحل المشكلات بل أنها ستهدر وقتك بشكل كبير لذا من الأفضل استخدام طريقة منظمة توصلك للحل، واسمح لي أن أشاركك طريقة شاملة توصلك إلى حل أي مشكلة قد تواجهك.
1. فهم المشكلة
فهمنا للمشكلة المطروحة هو التحدي الأكبر في طريقنا لحلها.
ولكن متى تعلم بأنك استطعت فهم المشكلة؟ إذا كنت قادرًا على شرحها بكلمات واضحة وسهلة بحيث يستطيع أي شخص فهمها، عندها تكون بالفعل قد فهمت المشكلة.
فهمنا للمشكلة المطروحة هو التحدي الأكبر في طريقنا لحلها.
ولكن متى تعلم بأنك استطعت فهم المشكلة؟ إذا كنت قادرًا على شرحها بكلمات واضحة وسهلة بحيث يستطيع أي شخص فهمها، عندها تكون بالفعل قد فهمت المشكلة.
2. تحليل المشكلة
تقسيم المشكلة يلعب دورا مهما في طريقك لإيجاد الحل، لذا حاول أن تقسمها إلى أجزاء صغيرة ثم حل كل جزء منها على حدة وينصح في البداية بحل أسهل جزء منها ومن ثم الأصعب فالأصعب، وبعدها اجمع هذه الأجزاء مع بعضها للحصول على الحل النهائي.
تقسيم المشكلة يلعب دورا مهما في طريقك لإيجاد الحل، لذا حاول أن تقسمها إلى أجزاء صغيرة ثم حل كل جزء منها على حدة وينصح في البداية بحل أسهل جزء منها ومن ثم الأصعب فالأصعب، وبعدها اجمع هذه الأجزاء مع بعضها للحصول على الحل النهائي.
3. إعداد خطة للحل
لا تشرع في الحل من دون خطة لأن المفتاح الرئيسي للوصول للحل هي الخطة الواضحة والمنظمة التي تضمن وصولنا للحل النهائي.
لا تشرع في الحل من دون خطة لأن المفتاح الرئيسي للوصول للحل هي الخطة الواضحة والمنظمة التي تضمن وصولنا للحل النهائي.
للحصول على خطة جيدة يجب عليك الإجابة على السؤال التالي:
إذا أعطي للبرنامج الدخل س، ما هي الخطوات اللازمة للحصول على الخرج ع؟
إجابتك على هذا السؤال سوف تحدد ماهي الخطوات اللازمة لحل المشكلة ومن ثم تقوم بترتيبها في خطة واضحة ومنظمة من أجل الحصول على الخرج الذي تريده.
إذا أعطي للبرنامج الدخل س، ما هي الخطوات اللازمة للحصول على الخرج ع؟
إجابتك على هذا السؤال سوف تحدد ماهي الخطوات اللازمة لحل المشكلة ومن ثم تقوم بترتيبها في خطة واضحة ومنظمة من أجل الحصول على الخرج الذي تريده.
4. مواجهة حالة السكتة البرمجية
ماذا لو لم تستطع حل أي جزء من المشكلة، ولا حتى الأجزاء السهلة منها؟ يقع الكثير من المبرمجين في هذه الحالة فلا يستطيعون إحراز أي تقدم يذكر في تطوير الشيفرة البرمجية وهذا أشبه ما يمكن بالسكتة الدماغية.
ماذا لو لم تستطع حل أي جزء من المشكلة، ولا حتى الأجزاء السهلة منها؟ يقع الكثير من المبرمجين في هذه الحالة فلا يستطيعون إحراز أي تقدم يذكر في تطوير الشيفرة البرمجية وهذا أشبه ما يمكن بالسكتة الدماغية.
هذه الحالة طبيعية ومعظمنا قد تعرض لها في بداية مشواره، ولكن الاختلاف الوحيد هو أن المبرمج المحترف لديه فضول أكثر حول المشكلة ومعرفة سبب حدوثها بدلًا من أن يكون منزعجا أو غاضبا منها.
في هذه الحالة هنالك حلين يمكنك تجربتهما للخروج من هذا المأزق:
في هذه الحالة هنالك حلين يمكنك تجربتهما للخروج من هذا المأزق:
- تنقيح الأخطاء (Debug)
المقصود أخطاء المنطق البرمجي التي ينفذ فيها البرنامج أمرا غير الذي بُرمج من أجله، لذا من الأفضل أن تحاول فحص الشيفرة البرمجية سطرا سطرا لتجد هذا الخطأ، أو تستخدم المنقح Debugger إذا كنت تعمل على لغة تدعم استخدامه مثل لغة C
المقصود أخطاء المنطق البرمجي التي ينفذ فيها البرنامج أمرا غير الذي بُرمج من أجله، لذا من الأفضل أن تحاول فحص الشيفرة البرمجية سطرا سطرا لتجد هذا الخطأ، أو تستخدم المنقح Debugger إذا كنت تعمل على لغة تدعم استخدامه مثل لغة C
- مراجعة وتقييم الحل
في كثير من الأحيان عند مواجهتنا للمشاكل وخصوصا الكبيرة منها قد نضيع في التفاصيل الصغيرة للمشكلة التي نواجهها وننسى المشكلة الرئيسية، لذلك من الأفضل دوما أن نسأل أنفسنا هل هذه هي الطريقة الأفضل للحل؟ هل هناك حل أفضل من الموجود؟
في كثير من الأحيان عند مواجهتنا للمشاكل وخصوصا الكبيرة منها قد نضيع في التفاصيل الصغيرة للمشكلة التي نواجهها وننسى المشكلة الرئيسية، لذلك من الأفضل دوما أن نسأل أنفسنا هل هذه هي الطريقة الأفضل للحل؟ هل هناك حل أفضل من الموجود؟
ارجع خطوة إلى الوراء وحاول أن تراها من منظور مختلف، وحتما ستلاحظ العديد من المشاكل التي غفلت عنها أثناء انشغالك بالتفاصيل الصغيرة.
5. البحث عن حلول عبر الإنترنت
أغلب المشاريع البرمجية تكون متشابهة بكثير من الوظائف والخصائص، ونادرا ما نرى مشروع ذو أفكار جديدة بالكامل لذا فإن أي مشكلة برمجية تواجهها قد واجهها عدد كبير من المبرمجين من قبلك، لذا كل ما عليك فعله هو أن تتعلم كيف تبحث عن المشكلة.
أغلب المشاريع البرمجية تكون متشابهة بكثير من الوظائف والخصائص، ونادرا ما نرى مشروع ذو أفكار جديدة بالكامل لذا فإن أي مشكلة برمجية تواجهها قد واجهها عدد كبير من المبرمجين من قبلك، لذا كل ما عليك فعله هو أن تتعلم كيف تبحث عن المشكلة.
بالطبع صديقنا stackoverflow الذي يعد من أشهر منصات مشاركة الحلول البرمجية الذي يقدم لك الحل الذي أجمع عليه أغلب المبرمجين، ويوجد العديد من المنصات الأخرى المشابهة مثل AskUbuntu وهو النسخة العربية من موقع stackoverflow والكثير غيرهم.
لننتقل إلى الخطوة الثانية وهي التدرب على هذه الخطة.
ضع خطة واضحة للتدريب وتخصيص زمن محدد وثابت تقضيه في صقل المهارة.
يمكنك البدء مثلا بتخصيص ساعة للتدريب يوميا لمدة شهر كامل، وبعدها قارن نفسك مع ما كنت عليه في السابق.
ضع خطة واضحة للتدريب وتخصيص زمن محدد وثابت تقضيه في صقل المهارة.
يمكنك البدء مثلا بتخصيص ساعة للتدريب يوميا لمدة شهر كامل، وبعدها قارن نفسك مع ما كنت عليه في السابق.
هل تتساءل كيف يمكنني التدرب على حل المشاكل؟
ننصحك بإحدى هاتين الطريقتين:
1. التدرب على المسائل البرمجية من خلال الانضمام للمسابقات البرمجية مثل مسابقة ACM ICPC
2. التدرب باستخدام الألعاب، خصوصا ألعاب الذكاء مثل لعبة الشطرنج والألغاز الرياضية.
ننصحك بإحدى هاتين الطريقتين:
1. التدرب على المسائل البرمجية من خلال الانضمام للمسابقات البرمجية مثل مسابقة ACM ICPC
2. التدرب باستخدام الألعاب، خصوصا ألعاب الذكاء مثل لعبة الشطرنج والألغاز الرياضية.
في النهاية، لا تتوقع أن تصبح مبرمجًا محترفًا خلال أسبوع أو شهر واحد فهذا ضرب من الخيال، بل ستحتاج لحل الكثير من المشاكل لبناء قاعدة معرفية صلبة تمكنك من مواجهة أي مشكلة مهما كانت صعوبتها.
جاري تحميل الاقتراحات...