فقط ركز على الأساسيات

بدأت رحلتي في عالم الـ 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 التي تعطيك تفاصيل عن كل شيء في الغالب

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

الخلاصة

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

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

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

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

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

وتذكر دائمًا أن اللغة التي تستعملها الآن قد تخرج من السوق نهائيًا بعد عدة سنوات في السوق سريع التطور فماذا ستفعل حينها بدون أساسيات؟

تمامًا وشكرا على إضافة

اشكرك على هذه المساهمة

لدي تساؤل كيف اتعلم مجال البرمجة ماهي افضل مصادر العربية؟

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

1 - اساسيات البرمجة بشكل عام

الأساسية في كل اللغات مثل ماهي البرمجة وكيف تتعامل معها وكيف تتعامل مع الذاكرة والمتغيرات والأوامر الأساسية مثل if else و loops و الدوال و … إلخ

اللي هي أساسيات علوم الحاسب CS (Computer Science)

وممكن تحل مشكلات وخوارزميات لكي تنميها وتوسع افكارك وتمكن نفسك

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

2 - عالم الـ OOP

وكل شيء يدور حواليها وممكن SOLID لكي تنمي تفكيرك في كيفية بناء المشروع وتنظيمه

وتبني كام مشروع هنا صغير

3 - على حسب المجال

تختار اي مجال أنت حابه وتتعلم أساسيات والمفاهيم التي تدور حوال المجال

ستجد أن كل مجال لديه العالم الخاص به

مثلا الباك اند لديه بعض المفاهيم والمباديء التي يجب أن تعرفها وتتعلمها وتفهم المجال قائم على ماذا وما غرضه

نفس الأمر مع الفرونت ونفس الأمر مع الموبايل و نفس الأمر مع اي مجال

4- استمر واتعلم واغلط وعيد وذاكر وربنا يوفقك

وربنا يوفقك

ذكرتني بمشروع من احدى الزبائن التي طلبت خدماتي وكانت هي ضمن فريق وانا مهمتي ان انجز مسؤوليتها في المشروع

فهمت ان منفذي المشروع لايفقهون شيء باسم OOP لك ان تتخيل ان كل صفحة EDIT/DELETE/ADD يتم نسخ ولصق الكود في ملف جديد!

ويريدون تصميم ui مخصص فيقومون بنسخ ولصق هذا الUI المميز في كل صفحة؟

اتفهم سبب ارتباكهم لانهم يستعملون Unity وليس لغة برمجة مباشرة لكن لازال فهمهم للاساسيات 0% فحتى هذا المحرك يملك طرق مناسبة لتكرار نفس الشيء بدون نسخه ولصقه في كل مكان! وبالتالي يسهل تعديله من مكان واحد

محرك Unity يستخدم C++ وبه OOP

كل لغة وكل محرك وكل إطار عمل لديه طريقة ما لتسهل على الآخرين عدم تكرار كود سواء باستخدام OOP أو باستخدام دوال عادية أو حتى بوضح الكود في ملف معين واستدعاء الملف وكل بداخله في كل مرة

شكرا لك على المساهمة المميزة و الثرية.

بما انك تعمل بشركة تستخدم إطار لارافيل هل يمكنك مشاركتنا تجربة العمل كمبرمج لارافيل.

أي ماهي المهام التي يطلبونها منك و كيف طريقة استلام المهام و ايضا من وجهة نظركم ماهي الأساسيات الجوهرية التي يحتاجها المبتدئ لاحتراف لارافيل.

شكرا لكم

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

معظم الشركات تستخدم طريقة Agile مع شيء يشبه جيرا لإدارة المهام وتوزيعها ومراقبتها

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

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

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

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

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

غالبا في نهاية مرحلة المراجعة يطلب منك بعض التعديلات لتقوم بها فانت تقوم بتنفيذها ثم ترفع ثم يتم مراجعة التعديلات وتعيد نفس الكرة حتى تصل إلى مستوى من تنفيذ المهمة يرضي اللجميع

بيئة عمل رائعة

مؤخرا اطلعت على laravel وبصراحة تفاجأت بمستوى الانتاجية التي يمكن الوصل لها مقارنة مع node.js Next.js كمثال

هل لك أي تفضيلات لكورسات معينة حول php & larave أو ملاحظات يمكن أخذها بالاعتبار عدا عن موضوع الاساسيات الذي نتفق عليه جميعا

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

ممكن أمثلة من واقع تجربتك العملية من حيث ما قدمه لك laravel ؟

وجزاك الله خيرا

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

ما واحد ممكن يتعلم وينبهر باشياء بالنسبة للأشخاص أخرى عادية جدا وبديهية

فتجربتك المميزة ممكن تكون تجربة عادية لشخص آخر والعكس

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