بدأت رحلتي في عالم الـ Backend بتعلم NodeJS و NestJS، وكنت دائماً أحرص على فهم الأساسيات والمفاهيم الخاصة بعالم الـ Backend والبرمجة بشكل عام لأن هذا هو المهم

والحمد لله بعد التخرج عملت لمدة سنة تقريبًا بالـ NodeJS و NestJS كنت أظن في البداية أنني سأظل أستخدم Nestjs بشكل أساسي ودائم في مجالي

حتى أنني كنت ابتعد عن باقي اللغات مثل Python, PHP, C# وغيرها وكنت متمسك جدًا بـ NodeJS و NestJS

لكن الفرق الوحيد أنني كنت اهتم دائما بالاساسيات والمفاهيم الخاصة بالمجال

بدايتي مع PHP Laravel

في البداية، كانت لدي بعض المخاوف والخلافات مع لغة PHP لم اكن أفضلها كثيرًا

عندما كنت ابحث عن عمل جديد جائتني فرصة للعمل في شركة لكن بـ PHP Laravel، كنت خائفًا في البداية

لكن بفضل الأساسيات القوية التي اكتسبتها في رحلتي البرمجية، تمكنت من تعلم PHP Laravel بسرعة خلال أول اسبوع فقط

واستطعت مواكبة المشروع وانهيت بعض المهام المطلوبة مني في خلال اسبوعين فقط

هذا بسبب أنني كنت أفهم الأساسيات والمفاهيم الخاصة بالبرمجة والـ Backend

أما الـ NodeJS و NestJS فكانت تعتبر فقط أدوات لتحقيق الهدف الذي أريده

والـ PHP و Laravel كانت مجرد أداة أخرى لتحقيق المفاهيم التي تعرفها في الـ Backend

كل ما بتعلمه هو:

  • كيف نقوم بعمل الـ Routing في Laravel ؟ ستقوم بعمل هذا وذاك وتلك، حسنًا
  • كيف نقوم بعمل Middleware في Laravel ؟ ستقوم بعمل هذا وذاك وتلك، حسنًا
  • كيف نقوم بعمل Authentication في Laravel ؟ ستقوم بعمل هذا وذاك وتلك، حسنًا
  • كيف نقوم بتطبيق الـ Repository Pattern في Laravel ؟ ستقوم بعمل هذا وذاك وتلك، حسنًا
  • كيف نقوم بعمل DTO و Validation في Laravel و ... ؟ ستقوم بعمل هذا وذاك وتلك، حسنًا
  • كيف نقوم بعمل فراخ مشوية على الفرن في Laravel ؟ ستقوم بعمل هذا وذاك وتلك، حسنًا
  • وهكذا ...

قد اكون واجهت بعض اللصعوبات هنا وهناك لكن ليس بالشيء التي قد يذكر حتى

بعد ما تعلمت PHP Laravel فتحت لي افكار وزوايا وأمور لم اتخيلها وممتعة وتعلمت امور جديدًا لا اظنني كنت سأتعلمها لو بقيت متمسكًا بالـ NestJS فقط

ملحوظة: أنا لا اقصد لغة معينة أو مجال معين أنا اتكلم بشكل عام وتجربة مريت بها بشكل شخصي أحببت أن احكي عنها وما تعلمته منه

قصة صديقي مع البرمجة

لدي صديق دخل عالم البرمجة بحماس كبير، ولكنه اختار طريقًا مختلفًا الشائع بين الناس لتعلم البرمجة

وهو أن يستغني عن الاساسيات ويبدأ بتعلم تكنولوجي معينة و اطار عمل في اسرع وقت ممكن ليبدأ بالعمل بكسب المال بشكل سريع

وهذا هو الخطأ الذي يقع فيه معظم الناس للآسف

فبدلًا من أن يبدأ الشخص بفهم الأساسيات والمفاهيم الأساسية بتروي، يقومون للآسف بالقفز مباشرة إلى استخدام تقنيات وأطر عمل مثل Flutter, React, Vue, NestJs ... إلخ

ويبدأوا بتعلم هذه التقنيات المحدد دون أن يكون لديه فهم عميق للغة البرمجة الأساسية أو حتى OOP

صديقي، بدأ العمل الحر وقام بتنفيذ مشاريع مع مختلف الأشخاص، وحقق بعض النجاح في البداية

ولكن مع مرور الوقت، بدأ يواجه تحديات كبيرة، بسبب أن معرفته محدودة ومحصورة بالأدوات التي يستخدمها فقط

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

قصص مثل قصة صديقي ليست نادرة في عالم البرمجة، الكثير من المطورين يقعون في نفس الفخ، يبدأ بتعلم تقنيات وأطر عمل معينة دون أن يتعب نفسه أويكرس وقته للأساسيات

قد ينجحون في البداية، ولكن سرعان ما يجدون أنفسهم محدودين وغير قادرين على التعامل مع المشكلات المعقدة

لأن معرفتهم محصورة في الاداة التي يستخدمها فقط

ملحوظة: للأشخاص الفضوليين الذين يريدون ماذا حصل لصديقي، أحب أن أقول أنه الحمد لله أدرك خطأه واعترف بها وبدأ يتعلم أساسيات البرمجة و OOP وحل المشكلات من البداية وأصبح أفضل بكثر
لذا كُن مثل صديقي

نصائح لتحسين مهارات البرمجة

تاليًا هي بعض النصائح التي أود أن أقدمها لك لتحسين مهارات البرمجة الخاصة بك

مكن نفسك في الأساسيات

حاول دائمًا أن تهتم بالأساسيات والمفاهيم الأساسية الخاصة بعالم البرمجة بشكل عامل مثل

ما اقصده بالأساسيات هي الأمور التي تجدها في كل لغة برمجة مثل variables, functions, conditions, loops, arrays, ... إلخ

والأمور التي تتعلمها في مادة علوم الحاسب Computer Science

أظن أن ان رميت حجرًا في اليوتيوب ستصيب عدة قنوات تشرح لك الأساسيات بشكل ممتاز وباللغة العربية

تدرب على حل المشكلات بشكل روتيني

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

يوجد مواقع متخصصة في حل المشكلات وبها العديد من المسائل المميزة والمتنوعة تحتاج إلى انك تفكر بأحسن حل عندك مثل

  • leetcode
  • codesignal
  • hackerrank
  • codeforces

وأنصحك بتفقد هذا الرابط https://leetcode.com/explor... أساليب مميزة للتعلم

تجميعات لمسائل وخريطة الطريق

  • https://codeforces.com/grou... تجميعة اسيوط تعد من أفضل الأشياء التي قد تبدأ فيها حل فيه لحد ما تتمكن وتعتاد علي الحل والمسائل
  • https://docs.google.com/spr... ما تشعر أن المسائل أصبحت سهلة وتمكنت في اللغة وحل المسائل بها فابدأ بمصطفى سعد، حاول ان تجعل تجميعة مصطفى سعد الروتين اليومي لك بمعنى حل مسألتين A كل يوم واذا أحسنت فيهم حل مسألتين B وهكذا
  • هذه خارطة طريق المهندس محمد أيمن لحل المشكلات
  • https://tabarani.tk/article... مسار تعلمي لحل المشكلات هذه مقالة وضعت فيها تجميعات وأفكار وملحوظات كنت قد مررت بها في رحلتي لحل المشكلات

تعلم الخوارزميات وهياكل البيانات

تعلم الخوارزميات هياكل البيانات وتطبيقها ويمكنك حل بعض المشكلات بها

يوجد العديد من القنوات والأشخاص الذين يقومون بشرحها بشكل جيد

أنت مع كل موضوع او شيء ستتعلمه وتمر له، ستتعلم الخوارزميات الخاصة بها والمتعلقة بهذا الموضوع المعين

والخوارزميات مهمة لأنها ستساعدك في حل المشكلة بأحسن وسيلة ممكنة وأقل تكلفة سواء كسرعة او كمساحة

الـ OOP وأخواتها

تعلم أساسيات الـ OOP والمبادئ المتعلقة بها مثل

  • Encapsulation
  • Inheritance
  • Abstraction
  • Polymorphism

ومدونة الطبراني (أنا) لم تقصر في شيء وستجد مقالات عن كل واحدة هنا مقالات OOP https://tabarani.tk/article...

ثم تعلم مبادئ الـ SOLID وتطبيقها في الكود

  • Single Responsibility Principle
  • Open/Closed Principle
  • Liskov Substitution Principle
  • Interface Segregation Principle
  • Dependency Inversion Principle

وتجد مقالة عنها هنا مبادئ الـ SOLID لجعل كودك صلب كالحديد https://tabarani.tk/article...

أيضا يوجد قنوات عربية رائعة تشرح المفاهيم بشكل جيد جدًا فقط قم برمي أي حجر في اليوتيوب وستصيب قناة أو اثنتين

تطبيق عملي

طبق كل ما تعلمته بعمل مشاريع صغيرة ثم تدرج بالمستوى خطوة خطوة

مشاريع صغيرة باستخدام الـ OOP وحاول ان تكون لوحدك وتغلط وتبحث لوحدك وتعيش التجربة

ولا تنسى روتينك في حل المسائل والمشكلات البرمجية تنمية افكارك وتطويرها

اختيار المجال المناسب

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

بحيث ان نزعنا منك تلك التكنولوجي واستبدلناها بلغات وتكنولوجي مختلفة لكن ضمن المجال فلن تجد صعوبة في التعامل معها

ولا تجعل شخص يجبرك على اختيار مجال محدد، لديك متسع من الوقت لتبحث وتجرب كل مجال ثم تختار ما تميل له

نصائح تعلمتها متأخرًا

هذه بعض النصائح التي تعلمتها متأخرًا وأود أن أشاركها معك

لا تسأل قبل أن تبحث

هذا الشرط سيعلمك الكثير وستعتمد على نفسك وتعرف كيف تبحث

وقد تجد مصادرك الخاص وستتعلم اشياء اكثر ستستطيع بناء ذاتك بنفسك

الاعتماد الدائم على الاخرين في كل صغيرة خطأ

لا تتعلم من مصدر واحد أبدًا، ولا تعتمد على الآخرين في كل شيء

لا يوجد مصدر سيعطيك المعلومة كاملة، ولا يوجد احد يعرف كل شئ

إن اتبعت مصدر واحد اوشخص واحد فستكون مجرد نسخة مقلدة من افكار شخص ما، تنظر إلى الأشياء بفكر شخص واحد

خبرتك وعلمك ومهاراتك ستكتسبها بالبحث في اكثر من مصدر وتلقي المعلومة من اكثر من زاوية

كل شخص يرى الشيء بزاوية مختلفة .. لا احد يرى الصورة كاملة لذا عليك تجميع معلومات من اختلاف تلك الزوايا والاراء لتكَوِن زاويتك ورايك الخاص

افهم ما تعلمته

كل شيئ لديه الظاهر والباطن .. ان واجهت مشكلة ما وعرفت الحل، فحاول أن تفهمه

لكي تعرف كيف جاء الحل وكيف تم تطبيقه وكيف يعمل لكيف لا تكون مجرد حافظ للشيء

لا أحب أن يسألك شخص ما ويقول لك "هذا رائع كيف عملته" وأنت لا تعرف كيف عملته، ماذا ستقول له "والله هذا ما وجدنا عليه أباءنا" ؟

أكيد هناك أشياء يصعب فهمها في البداية ولكن هذا لا يمنعك من أن تبحث قليلًا وتحاول على الأقل أن تفهمها

وإن خرجت من عملية البحث تلك بقشور المعلومة أو لم تخرج بشيء فعلى الاقل أنك حاولت أن تفهم

ومع الوقت ستجد أن الصورة تتضح شيئًا فشيئًا

اقرا المقالات !

قد اصدمك لكن الفيديوهات قد لا تعطيك المعلومة كاملة

حينها عليك قراءة المقالات ونقاشات الآخرين حول هذا الأمر

وقراءة الأسئلة التي يكتبها الآخرين والردود عليها

قد تضطر احيانا لقراءة المستندات docs التي تعطيك تفاصيل عن كل شيء في الغالب

القراءة والبحث مهمان جدا

الخلاصة

في النهاية، أود أن أؤكد على أن التركيز على الأساسيات في أي مجال هو المفتاح الأساسي من واقع تجربتي الشخصية، لا تتوقف عن التعلم والبحث وقراءة المقالات وتطوير مهاراتك، وتذكر أن اللغة أو الأداة ليست سوى وسيلة، وأن الفهم العميق للمفاهيم هو ما يصنع الفارق الحقيقي