فقط ركز على الأساسيات
السلام عليكم ورحمة الله وبركاته
الفهرس
المقدمة
بدأت رحلتي في عالم الـ 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
أظن أن ان رميت حجرًا في اليوتيوب ستصيب عدة قنوات تشرح لك الأساسيات بشكل ممتاز وباللغة العربية
تدرب على حل المشكلات بشكل روتيني
يمكنك ان تتدرب على الاساسيات بحل المشكلات وتنمية افكارك وتطويرها
يوجد مواقع متخصصة في حل المشكلات وبها العديد من المسائل المميزة والمتنوعة تحتاج إلى انك تفكر باحسن حل عندك مثل
وأنصحك بتفقد هذا الرابط https://leetcode.com/explore/learn ستجد اساليب مميزة للتعلم
تجميعات لمسائل وخريطة الطريق
- Sheet Assiut for Basics
تجميعة اسيوط يعد من أفضل الأشياء التي قد تبدأ فيها حل فيه لحد ما تتمكن وتعتاد علي الحل والمسائل - Sheet Moustafa Saad
بعد ما تشعر أن المسائل أصبحت سهلة وتمكنت في اللغة وحل المسائل بها
فابدأ بمصطفى سعد، حاول ان تجعل تجميعة مصطفى سعد الروتين اليومي لك
بمعنى حل مسألتينA
كل يوم واذا احسنت فيهم حل مسألتينB
وهكذا - Problem-Solving-Training
هذه خارطة طريق المهندس محمد أيمن لحل المشكلات - مسار تعلمي لحل المشكلات هذه مقالة وضعت فيها تجميعات وافكار وملحوظات كنت قد مررت بها في رحلتي لحل المشكلات
تعلم الخوارزميات وهياكل البيانات
تعلم الخوارزميات هياكل البيانات وتطبيقها ويمكنك حل بعض المشكلات بها
يوجد العديد من القنوات والاشخاص الذين يقومون بشرحها بشكل جيد
انت مع كل موضوع او شيء ستتعلمه وتمر له، ستتعلم الخوارزميات الخاصة بها والمتعلقة بهذا الموضوع المعين
والخوارزميات مهمة لأنها ستساعدك في حل المشكلة باحسن وسيلة ممكنة وأقل تكلفة سواء كسرعة او كمساحة
الـ OOP وأخواتها
تعلم أساسيات الـ OOP
والمبادئ المتعلقة بها مثل
Encapsulation
Inheritance
Abstraction
Polymorphism
ومدونة الطبراني لم تقصر في شيء وستجد مقالات عن كل واحدة هنا مقالات OOP
ثم تعلم مبادئ الـ SOLID
وتطبيقها في الكود
Single Responsibility Principle
Open/Closed Principle
Liskov Substitution Principle
Interface Segregation Principle
Dependency Inversion Principle
وتجد مقالة عنها هنا مبادئ الـ SOLID لجعل كودك صلب كالحديد
أيضا يوجد قنوات عربية رائعة تشرح المفاهيم بشكل جيد جدًا فقط قم برمي أي حجر في اليوتيوب وستصيب قناة أو اثنتين
تطبيق عملي
طبق كل ما تعلمته بعمل مشاريع صغيرة ثم تدرج بالمستوى خطوة خطوة
مشاريع صغيرة باستخدام الـ OOP
وحاول ان تكون لوحدك وتغلط وتبحث لوحدك وتعيش التجربة
ولا تنسى روتينك في حل المسائل والمشكلات البرمجية تنمية افكارك وتطويرها
اختيار المجال المناسب
كل مجال له أساسياته ومفاهيمه والعالم الخاص به، فعندما تختار مجال فبغض النظر عن اللغة او التكنولوجي التي ستستخدمها احرص دائمًا على فهم مبادئ وأساسيات المجال
بحيث ان نزعنا منك تلك التكنولوجي واستبدلناها بلغات وتكنولوجي مختلفة لكن ضمن المجال فلن تجد صعوبة في التعامل معها
ولا تجعل شخص يجبرك على اختيار مجال محدد، لديك متسع من الوقت لتبحث وتجرب كل مجال ثم تختار ما تميل له
نصائح تعلمتها متأخرًا
هذه بعض النصائح التي تعلمتها متأخرًا وأود أن أشاركها معك
لا تسأل قبل أن تبحث
هذا الشرط سيعلمك الكثير وستعتمد على نفسك وتعرف كيف تبحث
وقد تجد مصادرك الخاص وستتعلم اشياء اكثر ستستطيع بناء ذاتك بنفسك
الاعتماد الدائم على الاخرين في كل صغيرة خطأ
لا تتعلم من مصدر واحد أبدًا، ولا تعتمد على الآخرين في كل شيء
لا يوجد مصدر سيعطيك المعلومة كاملة، ولا يوجد احد يعرف كل شئ
إن اتبعت مصدر واحد اوشخص واحد فستكون مجرد نسخة مقلدة من افكار شخص ما، تنظر إلى الأشياء بفكر شخص واحد
خبرتك وعلمك ومهاراتك ستكتسبها بالبحث في اكثر من مصدر وتلقي المعلومة من اكثر من زاوية
كل شخص يرى الشيء بزاوية مختلفة .. لا احد يرى الصورة كاملة لذا عليك تجميع معلومات من اختلاف تلك الزوايا والاراء لتكَوِن زاويتك ورايك الخاص
افهم ما تعلمته
كل شيئ لديه الظاهر والباطن .. ان واجهت مشكلة ما وعرفت الحل، فحاول أن تفهمه
لكي تعرف كيف جاء الحل وكيف تم تطبيقه وكيف يعمل لكيف لا تكون مجرد حافظ للشيء
لا أحب أن يسألك شخص ما ويقول لك "هذا رائع كيف عملته" وأنت لا تعرف كيف عملته، ماذا ستقول له "والله هذا ما وجدنا عليه أباءنا" ؟
أكيد هناك أشياء يصعب فهمها في البداية ولكن هذا لا يمنعك من أن تبحث قليلًا وتحاول على الأقل أن تفهمها
وإن خرجت من عملية البحث تلك بقشور المعلومة أو لم تخرج بشيء فعلى الاقل أنك حاولت أن تفهم
ومع الوقت ستجد أن الصورة تتضح شيئًا فشيئًا
اقرا المقالات !
قد اصدمك لكن الفيديوهات قد لا تعطيك المعلومة كاملة
حينها عليك قراءة المقالات ونقاشات الاخرين حول هذا الامر
وقراءة الأسئلة التي يكتبها الاخرين والردود عليها
قد تضطر احيانا لقراءة المستندات docs
التي تعطيك تفاصيل عن كل شيء في الغالب
القراءة والبحث مهمان جدا
الخلاصة
في النهاية، أود أن أؤكد على أن التركيز على الأساسيات في أي مجال هو المفتاح الأساسي من واقع تجربتي الشخصية، لا تتوقف عن التعلم والبحث وقراءة المقالات وتطوير مهاراتك، وتذكر أن اللغة أو الأداة ليست سوى وسيلة، وأن الفهم العميق للمفاهيم هو ما يصنع الفارق الحقيقي