كيف تعلمت البرمجة بلغات Python وJavascript وC++ بعدة أسابيع فقط
مقدمة
في هذا المقال، سأشارك معكم تجربتي في تعلم لغات البرمجة Python وJavascript وC++ في فترة قصيرة. قد يبدو الأمر غير معقول، ولكن الحقيقة أن تعلم لغة جديدة لم يكن دائمًا بهذه السهولة. في البداية، قضيت أشهرًا في مشاهدة دروس عبر الإنترنت ومتابعتها عندما تعلمت لغتي البرمجة الأولى والتي كانت Java. لكن عندما انضممت إلى Amazon، تمكنت من إنجاز مشروع بلغة Python في غضون أسبوعين فقط. لم أكتب سوى سطر واحد من الشفرة بلغة Python قبل العمل على هذا المشروع. وبعد ذلك، عندما انضممت إلى Google، استخدمت نفس الطريقة لأتعلم C++ وأكون مفيدًا لفريقي. وقد قمت بذلك مرارًا وتكرارًا لأتعلم لغات أخرى مثل Javascript وGo وDart. ولكن، كيف يمكنني تحقيق كل ذلك؟ هل اتناول حبة سحرية جعلتني خبيرًا في البرمجة
باستخدام Python بين عشية وضحاها؟ حقيقة الأمر أنه بسيط جدًا. على مر السنوات، حاولت الحضارات العظيمة والقادة القويون كشف أسرار تعلم لغة برمجة جديدة. لنجد الإجابة، يجب أن نعود إلى عام 1945. بعد انتهاء الحرب العالمية الثانية، أراد البريطانيون نشر اللغة الإنجليزية في جميع أنحاء العالم. كما تعلمون، ليست اللغة الإنجليزية سهلة تمامًا للتعلم بوصفها لغة غير أصلية. لذلك، قاموا بإنشاء نسخة مبسطة من الإنجليزية تسمى "Basic English". تتكون Basic English من 850 كلمة فقط. للمقارنة، هناك حوالي 170,000 كلمة في الإنجليزية. بالإضافة إلى قلة الكلمات، تمتاز Basic English بقواعد بسيطة للغة وتركيزها على هياكل الجمل الأساسية. لترويج اللغة، استخدم البريطانيون الإذاعة الحكومية بريطانية تسمى "British Broadcasting Corporation"، المعروفة اختصارًا بـ "BBC" لإنتاج برنامج يسمى "English by Radio". يهدف هذا البرنامج إلى تعليم مفردات Basic English ونطقها لغير الناطقين بها، وكان نجاحًا كبيرًا. لكن كيف يمكن أن تساعد الكلمات الـ 850 وبناء الجمل الأساسية على تعلم اللغة؟ وهل يمكننا استخدام نفس المبادئ لتعلم لغة برمجة جديدة؟ للإجابة على هذا السؤال، يتعين علينا معرفة بعض المعلومات عن كيفية عمل اللغات بالضبط.
كيف تعمل اللغات
تخيل دائرة تحتوي على الكلمات الأكثر شيوعًا والتي تشكل الـ 10% الأعلى من بين إجمالي 170,000 كلمة في اللغة الإنجليزية. تشمل هذه الدائرة كلمات مثل "أنا"، "أنت"، "أكل"، "شرب" وما إلى ذلك. ثم لدينا دائرة أخرى حولها تحتوي على الـ 20% التالية من الكلمات الأكثر شيوعًا. قد تشمل هذه الدائرة كلمات مثل "مدفوع بمقدار زائد" و"مبرمج"، وهو أمر منطقي. ويمكننا مواصلة رسم هذه الدوائر حتى نغطي كل الـ 170,000 كلمة. إذا كنت مهتمًا، فإن الدائرة الخارجية تحتوي على كلمات مثل "أحمق" و"لا يشرب الكحول". للسهولة، دعونا ندمج الدائرتين الداخليتين معًا وندمج بقية الدوائر معًا. الآن تخيل أنك تبدأ في قراءة واحدة من أفضل الروايات في زماننا "خمسون ظلًا من الرمادي" والتي تحتوي على 150,000 كلمة. ستجد أن ما يقرب من 80% من هذه الكلمات تقع في الدائرة الداخلية، والـ 20% الباقية تأتي من الدائرة الخارجية. للمعلومية، يعرف هذا أيضًا بمبدأ باريتو. يقول مبدأ باريتو إن 20% من جهودك تؤدي إلى 80% من نتائجك. وهذا المبدأ القوي هو الفكرة الرئيسية وراء BASIC English وأيضًا سر تعلم لغة برمجة جديدة بسرعة حقيقية. لقد طبقت نفس المبدأ لأتعلم الفرنسية، والآن أستطيع التحدث بالفرنسية ولكن لدي لهجة مضحكة.
التعلم العملي
قد تقول "تعلم لغة محكية بواسطة الحاسوب أمر مختلف تمامًا". دعنا نجرب هذه الفرضية. دعنا نقوم برسم نفس الدوائر لمفردات لغات البرمجة. ما هي الأفكار الأكثر شيوعًا في أعلى الدائرة والتي تشكل الـ 10% الأعلى؟ أعتقد أنها ستتضمن أنواع البيانات المختلفة مثل int وfloat وstrings وArray وما إلى ذلك. ربما تكون "if else" وحلقات الـ for أيضًا جزءًا من هذه الدائرة. ربما ستكون كتابة الدوال والـ classes هنا أيضًا. إذا تحركت إلى الدائرة التالية، قد تحتوي على مفاهيم مثل polymorphism وinheritance وما إلى ذلك. ويمكننا الاستمرار في رسم هذه الدوائر حتى نصل إلى الدائرة الخارجية التي قد تحتوي على شيء مثل iterators أو generators، على سبيل المثال.
إذا قمت بفحص جميع مستودعات Github بلغة البرمجة التي تختارها، ستجد أن 80% من الشفرة ستأتي من الـ 20% الداخلية من الدائرة. وبناءً على ما تعلمنا من مثال BASIC English، سنركز على هذه الـ 20% أولاً. لكن عندما نفعل ذلك، يجب أن نكون حذرين بشأن شيئين. الأول، هذه الـ 20% رغم أنها مشابهة إلى حد ما، قد تختلف قليلاً بين اللغات المختلفة. على سبيل المثال، في Java، قد يكون لديك Arraylist وستسميه List في Python. أو في Javascript، قد يكون لديك async/await والذي قد يكون مختلفًا جدًا في لغات أخرى. النقطة هي أن هذه الـ 20% العليا قد تتغير اعتمادًا على اللغة التي تختارها، لذا يجب أن تقوم ببحثك الشخصي حول المفاهيم الرئيسية للغة التي تختارها.
الثاني، عندما تحاول تعلم هذه المفاهيم، تحتاج إلى تغيير طريقة تعلمك. إذا كنت تحاول تعلم لغة محكية بواسطة الحاسوب، مثل الفرنسية على سبيل المثال، فلن تكون قادرًا على التحدث بالفرنسية مهما كنت تشاهد الأفلام أو المسلسلات باللغة الفرنسية، إلا إذا حاولت فعليًا التحدث بالفرنسية. بنفس الطريقة، لن تكون قادرًا على البرمجة باستخدام لغة مثل Javascript مهما كان عدد الدروس أو الفيديوهات التعليمية التي تشاهدها، إلا إذا حاولت فعليًا البرمجة باستخدام Javascript. في الفيديو التعليمي، ستحصل عادةً على الشفرة التي تعمل بالفعل وإذا قمت بنسخها، فمن المؤكد أنها ستعمل لديك أيضًا. ولكن البرمجة هي فن تكسير الأشياء وإصلاحها. لذلك، أوصي بالتعلم التفاعلي بدلاً من التعلم العادي. على سبيل المثال، إذا كنت ترغب في تعلم Python، يمكنك الذهاب إلى موقع learnpython.org والقيام بتمارين وتكسير الأشياء وإصلاحها أثناء تعلمك للمفاهيم الجديدة. وبالمثل، بالنسبة لـ Javascript، يمكنك استخدام W3 schools. أنا متأكد من أنه بإمكانك العثور على هذا النوع من البيئات في لغات أخرى أيضًا.
كيف تتذكر ما تعلمته وكيف تتعلم المفاهيم المتبقية
لحل المشكلة الأولى، نحتاج أولاً إلى فهم منحنى التنسيي من قبل إيبينجهاوس. هيرمان إيبينجهاوس كان عالم نفسي ألماني معروف بأعماله في مجال الذاكرة والتعلم. أجرى تجارب حيث قام بإعطاء نفسه بعض الكلمات الخرافية ليتذكرها، ثم اختبر نفسه في فترات متفاوتة ليرواه يذكر عدد من هذه الكلمات. ما وجده أصبح أساسًا لكيفية تعليم الأطفال في النظام المدرسي الحديث. ما تراه هو النموذج الشهير لمنحنى التنسيي من قبل إيبينجهاوس. هذا النموذج هو رسم بياني للانخفاض التراجعي القائم على القوة الأسية. ما يعنيه هذا هو أننا بعد تعلم شيء جديد، نبدأ في نسيانه بسرعة كبيرة جدًا. لكن سرعة النسيان تبطئ مع مرور الوقت وفي النهاية، لا نتذكر سوى جزء صغير من ما تعلمناه. ولكن ماذا لو قلت لك أنه هناك طريقة للحفاظ على ما تعلمناه بشكل أفضل؟ درس إيبينجهاوس أي
