قبل عام مضى، بدأت رحلتي في تعلم البرمجة، مع التركيز بشكل خاص على تطوير الواجهات الأمامية (front-end development). لم يكن هذا المسار جديدًا تمامًا بالنسبة لي، فقد كنت أمارس تعلم البرمجة كهواية لعدة سنوات. لكن بالنظر إلى الوراء، وتحديدًا إلى عام 2015 عندما قررت التركيز على front-end development، لاحظت بعض الأنماط المتكررة في طريقة تعلمي وعملي. قادتني هذه الأنماط إلى سلسلة من الأخطاء التي أعمل على تصحيحها الآن، أو التي تم تداركها في الماضي.
يرجى ملاحظة أنه على الرغم من استخدامي لضمير المخاطب "أنت" في هذا المقال، إلا أنني أشير إلى أخطائي الشخصية. أنا لا أقدم نصائح لأي شخص، ولا أعتقد أنني في وضع يسمح لي بذلك. هذه مجرد طريقة لي لتوثيق الأخطاء التي ارتكبتها بوعي. آمل أيضًا أن يجد كل من يقرأ هذا المقال فائدة فيه ويتجنب هذه الأخطاء. لذا، ودون مزيد من الإطالة، إليكم بعض الأخطاء العديدة التي ارتكبتها.
القفز مباشرة إلى البرمجة دون تخطيط مسبق
ربما يكون هذا أحد أكبر الأخطاء التي يمكن أن يرتكبها المرء عند تعلم البرمجة. قد ينجح هذا الأسلوب لفترة قصيرة، خاصة عند تعلم الأساسيات مثل loops و conditionals، ولكن بعد ذلك، ستكون بحاجة ماسة إلى خطة. وهنا تدرك أنك بحاجة إلى التفكير في المشكلة بعمق وتقسيمها إلى أبسط الخطوات الممكنة. هذه هي الطريقة التي أخطط بها للمشاريع الآن، ويبدو أن هذا النهج فعال ويقدم طريقة أكثر تنظيمًا للبرمجة.
أولاً، على الورق:
- أدون الهدف الرئيسي لما أقوم ببرمجته.
- أقسم هذا الهدف إلى خطوات رئيسية.
- ثم تُقسم كل خطوة رئيسية إلى أجزاء أصغر.
ثم في المحرر (Editor):
- في بداية الكود الخاص بي، أضيف comments تتضمن الخطوات الرئيسية. بهذه الطريقة، يكون لدي دائمًا قائمة تذكرني بما يجب علي فعله لاحقًا.
- أضيف comments في الكود الخاص بي تصف ما أقوم به بحيث إذا عدت إلى الكود الذي كتبته بعد بضعة أشهر، سأفهمه بسهولة أكبر. هذا ليس ضروريًا حاليًا لأنني أعمل على مشاريع صغيرة جدًا، لكنني أعتقد أنها ممارسة جيدة.
التعلم بطريقة غير منظمة
لقد اشتركت في العديد من منصات MOOCs، وبدأت في قراءة عدة كتب في نفس الوقت، وكتبت أكواد بناءً على دروس متفرقة وجدتها عبر الإنترنت. كنت أشتت انتباهي بسهولة وبدأت عددًا كبيرًا جدًا من المشاريع التي لم تكتمل أبدًا. جاء الهيكل الذي كنت أحتاجه من ثلاثة مصادر رئيسية: Free Code Camp، ودليل Javascript is Sexy بعنوان “How to Learn Javascript Properly”، وسلسلة Kyle Simpson’s “You Don’t Know JS”. وفر لي المصدران الأولان الهيكل الذي كنت بحاجة إليه، بينما ساعدتني سلسلة YDKJS على فهم الأسباب الكامنة وراء برمجة Javascript. (ما زلت أقرأ هذه السلسلة، وقد انتهيت للتو من الكتاب الثاني، “Scope and Closure”).
التبديل المتكرر بين اللغات بحثًا عن اللغة المثالية
بعد عامين من التبديل العشوائي بين لغات البرمجة، أدركت الآن أنه لا توجد لغة برمجة مثالية. على مر السنين، جربت – ليس بهذا الترتيب الدقيق – لغات البرمجة التالية: C++، Python، Ruby on Rails، Java، Processing، وربما بعض اللغات الأخرى التي لا أتذكرها الآن. كنت أتنقل بينها مرارًا وتكرارًا، حتى وجدت Processing. تُعد Processing رائعة كلغة أولى، ولكن إذا كنت ترغب في إنشاء أشياء مثيرة للاهتمام بها، فستحتاج إلى تعلم المزيد عن الجانب الخوارزمي للأمور. كما أنها ممتازة إذا كنت ترغب في إنشاء شيء في مجالات الفن التوليدي (generative art)، أو تصور البيانات (data visualization)، أو التصميم الجرافيكي (graphic design). درست Processing لمدة عام، على ما أعتقد، ولكن بعد ذلك ظهرت p5.js وشعرت أنه يجب علي التركيز أكثر على الويب. بعد اللعب قليلًا بـ p5.js، أدركت أنه لفهم هذه المكتبة بشكل أفضل، أحتاج إلى فهم Javascript أولاً. وما زالت Javascript هي لغتي المفضلة حاليًا.
لقد وجدت نفسي أرتكب هذا الخطأ مؤخرًا أثناء استكشاف Rust. قرأت عنها لبضع ساعات ثم أدركت أنه يجب علي العودة إلى Javascript والتركيز عليها. الآن، إذا فكرت في الأمر مليًا، أعتقد أنني أميل إلى ارتكاب هذا الخطأ عندما أواجه صعوبة. أتذكر أنني أردت التبديل إلى شيء آخر عندما كنت أحاول فهم event listeners في Javascript.
اتباع الكثير من الدروس التعليمية دون بناء شيء من الصفر تمامًا
يمنحك هذا شعورًا زائفًا بالتقدم. هذه هي مرحلة "المساعدة المباشرة" حيث تقوم بكتابة ما تجده في الدروس التعليمية والكتب، وهي أشياء أنشأها آخرون. على الرغم من حصولك على نتائج مرضية، إلا أنك في الواقع تتبع مجموعة من التعليمات فحسب.
محاولة تعلم المكتبات والأطر البرمجية قبل إتقان اللغة الأساسية
لأنني كنت أرغب في نتائج فورية وأردت أن أثبت لنفسي أنني أستطيع بناء شيء مثير للاهتمام بسرعة، بدأت في تعلم أشياء مثل d3.js، Three.js، Babylon.js، Phaser. في الأساس، كنت أرغب في تخطي بعض الخطوات. كانت النتائج مثيرة للاهتمام، لكنها كانت مبنية على دروس تعليمية ونسخ ولصق للأكواد من مكان لآخر. كنت أقوم بالأشياء دون فهم دقيق لما كنت أفعله. وهذا يقودني إلى الخطأ التالي.
الخوف من التخلف عن الركب بعدم متابعة أحدث التوجهات في الأطر والمكتبات البرمجية
ما زلت أرتكب هذا الخطأ. لقد استكشفت Angular و React، وتفاعلت مع Meteor – وهو رائع بالمناسبة، وآمل أن أستخدمه يومًا ما – لأنني اعتقدت أنني بحاجة إلى معرفتها إذا أردت العثور على وظيفة. قد يكون هذا صحيحًا للمطورين الأكثر خبرة، لكنني أشعر أنني بحاجة إلى فهم vanilla Javascript قبل الانتقال إلى أمور أكثر تعقيدًا. هناك ما يكفي وأكثر لتعلمه عن pure Javascript قبل الانتقال إلى أشياء أخرى.
في سياق مشابه، لطالما تساءلت لماذا توجد العديد من الدروس التعليمية والكتب التي توصي المبتدئين بتعلم jQuery أولاً. جربت هذه الطريقة ولم يكن لها أي معنى، أتذكر أنني واجهت مشاكل مع syntax. لم تتضح الأمور إلا بعد أن أتقنت أساسيات Javascript.
الاعتقاد بأن استخدام Bootstrap يعني إتقان بناء المواقع
إن Bootstrap أداة رائعة. لقد تمكنت من تكييف بعض القوالب في وقت قصير جدًا، وكان شعورًا رائعًا أن أبني موقعًا شخصيًا بهذه السرعة. استخدمت Bootstrap لأول مرة لموقع أعمالي في كتابة المحتوى، ثم لموقعين عرض بسيطين. ولأن Bootstrap سهل التعلم والاستخدام، اعتبرت نفسي أكثر مهارة مما كنت عليه في الواقع.
محاولة أن تكون أكثر من شيء واحد في نفس الوقت
بقدر ما أرغب في ممارسة كل من التصميم الجرافيكي (graphic design) وتطوير الواجهات الأمامية (front-end development)، أدركت أنني بحاجة إلى التركيز على أحدهما فقط إذا أردت إتقانه بشكل صحيح. شعرت أنني أشتت جهودي بمحاولة القيام بالعديد من الأشياء في نفس الوقت. لذا، كان التركيز على front-end، وآمل أن يستمر هذا التركيز في السنوات القادمة. وبهذا أختتم قائمتي بالأخطاء التي ارتكبتها في رحلة تعلم البرمجة. إذا كانت لديك أخطاء خاصة بك، يرجى مشاركتها!