أخطاء شائعة في رحلة تعلم البرمجة: كيف تتجنبها لتحقيق إتقان حقيقي؟
مقدمة: رحلة التعلم من التقليد إلى الإتقان
أتذكر بوضوح الأشهر الستة الأولى من محاولاتي لتعلم البرمجة. كنت أتبع أحد الدروس التعليمية، لكنني لم أكن أفهم شيئًا مما كنت أفعله. كنت مجرد مقلد، حيث كان الفيديو غالبًا ما يسير بسرعة تفوق قدرتي على الكتابة. وكم مرة اضطررت إلى إيقاف الفيديو، إرجاعه، إعادة مشاهدته، أو إيقافه مؤقتًا عند نقطة معينة، فقط لأتمكن من نسخ الكود ذاته الذي يكتبه المدرب. وحتى عندئذ، كنت غالبًا ما أخطئ.
أتذكر الإحباط الذي شعرت به أثناء محاولتي تصحيح خطأ (debugging) في درس تعليمي معين لمدة يومين متتاليين، فقط لأن المدرب نسي أن يوضح شيئًا كان يفترض أنني أعرفه. لم يكن الخطأ خطأهم بالضرورة، لكنه كان محبطًا بالتأكيد. من السهل أن ننسى أن المعرفة التي اكتسبناها قد تكون سحرًا أسود لشخص آخر، وأنا أيضًا مذنب بذلك. لقد مرت سنوات عديدة منذ تلك الأيام الأولى، وقد أثمرت رحلتي في التعلم والعمل الجاد. لكنني ما زلت أتساءل: هل كان بإمكاني التعلم بفعالية أكبر؟
في هذا المقال، سأتناول ثلاث نقاط أعتقد أنها أبطأت من مسار تعلمي، وهي: فقدان التركيز، فخ الدروس التعليمية، والاعتماد المفرط على التجريدات.
1. فقدان التركيز والتشتت في مسار التعلم
عانت أيامي الأولى في البرمجة من نقص حاد في التركيز. كنت كالحمل الضائع، أبحث عن المعرفة، ولكن ليس في الأماكن الصحيحة، وبكمية غير كافية أبدًا. لم يكن فقدان التركيز خطئي بالكامل، بل كان نتاجًا للسبب الذي كنت أتعلم من أجله.
بدأت تعلم البرمجة نتيجة لعملي في شركة ناشئة كنا بحاجة فيها إلى مطور ويب. كانت استراتيجية الاستعانة بمصادر خارجية تفشل، وكنا بحاجة إلى شخص يتعلم للمساعدة في طرح المنتج في السوق. كنت سأساعد مطورينا في الخارج، لذلك بدأت تعلم لغة البرمجة التي كانوا يكتبون بها منصتنا: PHP. مع مرور الوقت، غيرنا المطورين ثلاث مرات، ولغات البرمجة كذلك. أدى هذا إلى تعلم القليل من PHP، والقليل من Python، والقليل من Ruby. لقد كان ذلك خطأً فادحًا.
خطر التشتت بين اللغات
إن تعلم القليل من هذا والقليل من ذاك يعني أنك لا تمنح نفسك الوقت الكافي لاستيعاب المفاهيم بشكل كامل. البرمجة صعبة، ولا مفر من ذلك. لذا، نحتاج إلى منح أنفسنا الوقت لاستيعاب هذه المفاهيم بشكل كامل. لم أبدأ في رؤية تغييرات كبيرة في فهمي بمرور الوقت إلا بعد أن التزمت بتعلم لغة JavaScript بشكل كامل.
لا تتشتت. أتقن لغة برمجة واحدة. أتقنها حتى النخاع. أتقنها بالكامل. هذا لا يعني أنك تتزوج لغة واحدة. يمكنك التفرع لاحقًا. بل يعني أنك تستخدم لغة برمجة واحدة كمركبة لفهم البرمجة ومبادئها الأساسية.
2. فخ الدروس التعليمية: بين المشاهدة والتطبيق
الدروس التعليمية (Tutorials) رائعة، وبصراحة، لقد فقدت عدد الدروس التي قمت بها. إنه شعور رائع أن تصنع شيئًا يعمل. بالإضافة إلى ذلك، مشاهدة مقاطع الفيديو لشخص يعرف ما يفعله يجعلك تشعر وكأنك تعرفه أيضًا. لكن من السهل جدًا الوقوع في فخ مشاهدة الدروس التعليمية فقط. تشغيل الفيديو أمر بسيط، لكن القيام بالعمل الشاق ليس كذلك. والقيام بالعمل الشاق هو ما سيجعلك مطورًا حقيقيًا.
لماذا لا تكفي المشاهدة وحدها؟
المشكلة التي واجهتها غالبًا مع الدروس التعليمية هي أن كل التفكير قد تم بالفعل مسبقًا من قبل المدرب. وقيام المدرب بهذا العمل يعني أنني لم أضطر إلى القيام به. لم يكن ذلك جيدًا، لأنه كان يعني أنني أخدع نفسي وأعتقد أنني أتعلم في نفس الوقت. مشكلة مضاعفة.
أنا لا أقول إنه لا يجب عليك القيام بالدروس التعليمية. خاصة إذا كنت تتعلم ذاتيًا، فأحيانًا تحتاج فقط إلى فهم ما عليك فعله بالضبط للمضي قدمًا. أو تحتاج إلى جمع أجزاء هنا وهناك لملء الصورة الكبيرة. ولكن في كل مرة تنتهي فيها من مشاهدة درس تعليمي، يجب عليك أن تمارس.
أعلم أن الأمر صعب. أنا أتعمد أن أكون صارمًا معك الآن. حتى اليوم، أنا مذنب بمجرد تشغيل درس تعليمي بالفيديو عندما تكون طاقتي مستنفدة. أظل أعتقد أنه أفضل من لا شيء. وبالتأكيد، هو كذلك. ولكن إذا لم تمارس، فإنك تهدر وقتًا وجهدًا ثمينين.
قوة المشاريع العملية
من أفضل الأشياء التي حدثت لتعلمي كان القرار الذي اتخذته للقيام بمشاريع freeCodeCamp. إنها مشاريع محددة لا تمسك بيدك. كنت بحاجة إلى معرفة كيفية تنفيذ كل شيء بنفسي. وخمن ماذا؟ القيام بذلك هو بالضبط وظيفة المطور. هذا هو شعورنا كل يوم. يتم تكليفنا بمهمة غالبًا لا نملك في البداية أي فكرة عن كيفية حلها، ثم نطبق مجموعة أدوات من المهارات المكتسبة على تلك المشكلة. كونك مطورًا لا يتعلق بامتلاك إجابة لكل شيء، بل يتعلق بإيجاد الإجابة لكل شيء. ولن تصل إلى هناك بمجرد مشاهدة الدروس التعليمية. مارس. مارس. مارس.
3. الاعتماد المفرط على التجريدات: عائق أمام الفهم العميق
كونك مطورًا في عام 2020 (وحتى الآن) أمر صعب. تتطور التكنولوجيا بسرعة، وتُحرز التطورات طوال الوقت. أحد المفاهيم التي تسمح لنا بالتحرك بسرعة هي التجريدات (Abstractions). التجريدات شيء عظيم؛ لقد أخذ شخص ما شيئًا صعبًا وجعله أسهل عن طريق تجريد الجزء الصعب. يمكنك التفكير في الأمر مثل الموقد (الفرن). لا تحتاج إلى معرفة كيفية عمل الموقد، بل تحتاج فقط إلى معرفة أنه عند الضغط على زر، يتم تشغيل الموقد ويضع الحرارة على الطبق. هذا كل ما تحتاجه لإعداد العشاء.
مزايا وعيوب التجريد
في الكود، هذا أيضًا شيء رائع. لا نحتاج إلى كتابة لغة الآلة (machine code)، لأنها مجردة. لا نحتاج إلى كتابة خوادم HTTP، لأنها صُنعت ومتاحة لنا للاستخدام، ويمكننا بناء أشياء جديدة ومذهلة فوقها.
لسوء الحظ، هذا أيضًا سيف ذو حدين. بينما تسمح لنا التجريدات بفعل أشياء مذهلة، فإننا نفقد أيضًا أشياء مهمة تسمح لنا بالنمو كمطورين. أشياء تسمح لنا بالفهم على مستوى أعمق لما يجري. أشياء قد تكون مهمة لإنشاء حلول رائعة. نفقد هذه الأشياء لأننا لا نضطر إلى تعلمها، على الرغم من أننا عند تعلمها، غالبًا ما نصبح مطورين أفضل.
غالبًا ما تكون هذه الأشياء مزعجة وصعبة ومملة للتعلم، مما يجعل من السهل تخطيها في عملية التعلم لدينا. لكنني أود أن أتحداك لتكون فضوليًا. لا تكتفِ بالبناء باستخدام أطر عمل مثل React. قم ببناء تطبيق من صفحة واحدة (Single Page Application) باستخدام vanilla JavaScript. لا تكتفِ باستخدام Express. حاول بناء خادم الويب الخاص بك باستخدام Node.js و TCP. تعلم HTTP. تعلم الأشياء الصعبة والمملة والمبتذلة التي تجعلك مطورًا أفضل. أو على الأقل حاول. في رأيي، ستكون في وضع أفضل بكثير.
الخلاصة التقنية
في هذا المقال، استكشفنا ثلاثة مجالات أعتقد أنها أبطأت مساري نحو أن أصبح مطورًا: فقدان التركيز، فخ الدروس التعليمية، والاعتماد المفرط على التجريدات. قدمت بعض النصائح الملموسة بناءً على تجربتي الخاصة حول كيفية تجنب هذه الأخطاء، ونأمل أن تتعلم بفعالية أكبر.
إن مسار تعلم البرمجة ليس مجرد اكتساب مهارات تقنية، بل هو رحلة تتطلب الانضباط، الفضول، والقدرة على مواجهة التحديات. إن التزامك بإتقان لغة واحدة، والممارسة العملية المستمرة، والغوص في التفاصيل الأساسية بدلاً من الاكتفاء بالتجريدات، سيصقل قدراتك ويجعلك مطورًا قادرًا على الابتكار وحل المشكلات المعقدة بكفاءة. تذكر دائمًا أن الفهم العميق هو مفتاح التطور والتميز في عالم البرمجة المتغير باستمرار.
إذا كنت مهتمًا بمحتواي، يمكنك العثور على قناتي على YouTube هنا، حيث أغطي مواضيع مثل React، أساسيات الويب، روبوتات الدردشة، والمزيد. يمكنك أيضًا متابعتي على Twitter عبر @foseberg. شكرًا لقراءتك هذا المقال، ويرجى مشاركته مع أي شخص تعتقد أنه قد يجده مفيدًا. حظًا سعيدًا في رحلتك.