لماذا و كيف أتعلم أشياء جديدة في مجال البرمجة؟

الـسلام عليكم و رحمة الله تعالى و بركاته❤

في هذا المقال سأشارككم طريقة تعلمي أشياء جديدة في البرمجة (هاته طريقتي يُمكنها أن تفيدك أو لا تفيدك. يُمكن أن تكون صحيحة او لا تكون صحيحة . لكنها تعمل معي و أعتمد عليها في النهاية هذا تعلم ذاتي . يعني ذاتي و ذاتك ليسا نفس الشيء).

== أنا هنا أتحدث عن طريقة تعلم أشياء جديدة داخل مجال معين قمت مسبقا بإختياره فهنالك فرق بين تحديد مجال و تحديد تقنيات تود تعلمها في مجال (في حالتي أنا : تطوير مواقع الويب, لهذا الأمثلة ستكون في هذا المجال). ==

أي شخص يتعلم له غاية و أهداف من وراء ذلك. يتعلم شيىء معين من أجل وظيفة عمل معينة, من أجل تغيير/تحسن العمل الحالي, من أجل المرح و الفضول(هواية).
فهاته أول نقطة يجب طرحها على نفسك, لماذا أتعلم هذا الشيىء المعين (مثلا: لغة برمجة, إطار عمل, مسار كامل, مكتبة, مفاهيم …) أو بصيغة أخرى ما الغاية من تعلمي لهذا الشيىء المعين (فأكيد لن تفني عمرك في تعلم كل الأشياء التي ربما بعضها لن يُفيدك أو لن تقوم بإستخدامه), سأساعدك في الإجابة عن هذا السؤال فعادة الإجابة ستكون محصورة في التالي:

  • من باب الفضول و الإستكشاف و التجربة.
  • من أجل وظيفة عمل معينة.
  • شيىء مُجبر على تعلمه (هذا الجواب ينفع في حالة كنت تعمل في شركة - فيجب ان تكون مرن و قابل للتعلم).
  • بديل يُقدم إضافة ما, يحل مشاكل ما في ما تستخدمه حاليا.

لنُسقط مثال حي علي :
== سنة 2020 :

  • لغة برمجة Golang (السبب كنت مجبر على تعلمها [العمل] و الحمد لله أنني تعرفت عليها).
  • لغة البرمجة TypeScript (السبب كنت مجبر على تعلمها لأني كنت أود المشاركة في بعض المشاريع مفتوحة المصدر و يعتمدون على هاته اللغة و السبب الثاني تقدم إضافات و بعض الحلول بالنسبة لجافاسكربت ).

== سنة 2021 لدي بعض الأشياء التي أود تعلمها, كيف قُمت بإختيارها :

  • لغة برمجة Rust (من باب الفضول و الإستكشاف)

بعد أن عرفت لماذا أتعلم هذا الشيىء المعين , الآن كيف أتعلم هذا الشيىء؟
حددت الشيىء الذي أود تعلمه, الآن أحدد ماهية هذا الشيىء(لغة برمجة, إطار عمل, مكتبة, أداة, مفهوم موجود في البرمجة, …)
على حسب ماهيى(طبيعة الشيء) طريقتي تكون كالتالي:

  • لغة برمجة: (هاته الطريقة بحكم انه لي خلفية مسبقة - قد لا تكون مناسبة لمن يتعلم لغة برمجة لأول مرة).

أقرا بعض المقالات و أشاهد التوثيق الرسمي للغة حتى أعرف ماهي ميزات هاته اللغة بما تختلف عن اللغة التي أتقنها و اقوم بتحديدها تمهيدا للقادم. لغات البرمجة شبيهة ببعضها (مفاهيم البرمجة : فيهم الحلقات التكرارية, الجمل الشرطية, الدوال, …) الإختلاف يكون في طريقة الكتابة و أحيانا في فلسفة تضمين مفهوم برمجي معين (الخيوط threads : تجد طريقة تضمينه يختلف من برمجة إلى أخرى) + المفاهيم الجديدة التي تميز لغة عن أخرى (التي حددتها سابقا). الآن اتضح لي الطريق . الأشياء المشتركة أحتاج فقط أنني أرى التوثيق الرسمي (لنأخذ على سبيل المثال الحلقات التكرارية) و ارى طريقة الكتابة syntax الخاصة بها و أجربها في مثال أو اثنين و انتهى الامر (عندما تفهم مفاهيم البرمجة و ليس لغة البرمجة سيكون الإنتقال من لغة برمجة إلى أخرى سهل جدا). تتبقى لي الميزات الجديدة التي تُمير للغة نفس الشيىء أقرأ من التوثيق الرسمي و إذا استصعبت الأمر فيهم حينها أشاهد فيديو لفهم جيد (عادة أعاني مع الميزات الجديدة فغالبا أنا اشاهد لهم فيديوهات). و بعدها يأتي حل المشاكل البرمجة (Problems Solving ) فأنا استغرق وقت قصير في تعلم لغة برمجة و بالمقابل وقت كبير في حل المشاكل البرمجية بهاته اللغة حتى أعتاد عليها بشكل جيد و أقوم بمعالجة النقاط التي كنت أظن أنني جيد فيها .

  • إطار عمل : (لنأخذ svelte.js) الذي أود تعلمه ايضا سنة 2021 من باب الفضول .

إطارات العمل أنا غالبا أشاهد لها فيديوهات (أحبذ الفديوهات التس تسمى crash course بمعنى فيديو واحد فيه حوالي ساعة او نصف ساعة او ساعتين …) حتى آخذ نبذة فقط عن طريقة عمل هذا الإطار و بعدها أطبق وحدي بإستخدام هذا الإطار و التعلم من خلال الممارسة + التعلم من التوثيق للغوص في مفاهيم هذا الإطار (حتى الدورات المدفوعة و الكبيرة لن تجدها تغطي كل شيىء تحتاج إلى بذل مجهود شخصي).

  • المكتبات :

أسهل شيىء أتعامل معه هو المكتبات (لست بحاجة إلى تعلمها أصلا - فقط أقوم بتضمينها في المشروع الذي أعمله عليه و أتعلم من التطبيق عليها في المشروع الحالي بالإضافة للنظر في توثيقها الذي عادة يكون سهل جدا و ليس بالكبير) . هاته الطريقة لا تجعلني أتعلم كل شيىء عن المكتبة . هي فقط تجعلني أتعلم طريقة تضمينها في مشروعي و إستخدام ما أحتاجه فقط منها . و لو مرة أخرة إحتجت إليها و كنت أحتاج إلى تضمين شيىء لم أستخدمه في المشروع السابق سأجد نفسي أتعلمه هو أيضا (يعني ملخص الكلام كل مرة آخذ ما أحتاج إستخدامه من هاته المكتبة).

  • أداوت برمجية :

أقوم بإستخدامهم مباشرة و أكتشفهم بنفسي و أحيانا اقرا بعض المقالات عنهم حتى آخذ نبذة عن ما توفره و بعدها أكتشف فيهم لوحدي (على سبيل المثال محرر أكواد vs code أو مثلا أداة postman) تجد نفسك تتعلم فيهم من حين لآخر أشياء جديدة فيهم لوحدك بدون مشاهدة دورات لهم …

  • مفاهيم / طرق في البرمجة : (على سبيل المثال design patterns, architectures …)

عادة تكون مواضيع صعبة قليلا فأعتمد على دورات (مدفوعة أو مجانية) بمعنى شخص يشرح و يبسط الأشياء المعقدة و أحيانا من خلال الكتب.

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

7 Likes

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

البداية كانت عادية بالمشاركة في الدورات المجانية لكن الفارق كان في إعطاء وإضافة وتفعيل القيمة مما تعلمت
الجميل في هذا المجال هو التنوع اللامحدود، فكل التخصصات بها فرص عمل، لكن مع أهمية الحرفية (الاحتراف) في عمل أشياء معقدة بهذه التخصصات أو التقنيات

لا مانع أن أكون قد أخذت دورات HTML و CSS مع القليل من python أو javascript / typescript،، لكن السؤال هو:
هل تستطيع بناء شئ فيه تعقيد هندسي كبير ومنظّم بهذه الأدوات؟ أم أنك فقط هاوي وتتعلم من باب الاطلاع والاستمتاع؟

هذا السؤال هو بمثابة محور رئيسي لعالم هندسة البرمجيات،

مثال صغير:

  • الكثير من الfreelancers تظل خبرتهم ثابتة عند مستوى معين (مثلا كـفرونت اند)، فهم بطبيعة الحال يتعاملون مع شريحة معينة من العملاء، إلا إذا قام بتزويد حصيلته الهندسية بحيث يبدأ بتطبيق طرق هندسية تساعد في بناء برنامج بدل صفحة ويب، وغيرها…
  • هذا يوضح الفارق بين المهندس و الهاوي، كلاهما يعمل، لكن الدرجة التي وصل لها المهندس أكبر فتنعكس عليه باستفادة أكثر من الهاوي…
5 Likes

بالفعل ياأخي أسامة فكرة رائعة لتعلم مجال معين خاصة كمطور ويب

ولكن لدي سؤال: دائما ماتجد أغلب المطورين الجدد مشتتين في تعلم ماهو جديد وأيضا متوتر لماهو قادم لتعلم خبرات جديدة؟؟

ماهو الحل لتنظيم طريقة تعلمه من أجل كسب ثقته في نفسه

4 Likes

تجربتى دخلت مجال البرمجة كمطور واجهة [Front End] لبناء مشروع خاص كنت مشتت ولكن الحمد لله على الطريق الى مطور ويب [full stack developer] واهم مهارة هى كيف تبحث على ما تريد

4 Likes

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

4 Likes