طالب علم\هندسة حاسوب سنة أولى\ثانية ماذا أصنع؟



السلام عليكم


خلال الفترة الماضية كثير من الأسئلة المطروحة في مجموعة Ask Software Engineers in Palestine هي أسئلة مكررة بشكل كبير جداً، مثل عندي مقابلة عند الشركة الفلانية ايش بلزمني أحضر أو أنا طالب علم\هندسة حاسوب سنة أولى أو ثانية أو ثالثة ايش أعمل عشان أجهز حالي لسوق العمل وغيره من الأسئلة ولذلك حابب أطرح فكرة كتابة مقالات أو منشورات طويلة تغطي هيك أسئلة فأي حد حابب يتطوع بإمكانه يكتب وبنساعده بمراجعة المقال أو المنشور بحيث تكون مفصلة وفيها مصادر مفصلة قدر الإمكان ليس فقط طرح الأفكار مثل لازم تدرس problem solving بل كتابة خطة مفصلة مع مصادر واقتراحات.

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

بسم الله، نبدأ في إجابة السؤال، في البداية حسب تجربتي في الجامعة وسوق العمل واطلاعي على الجامعات سواء الفلسطينية أو العربية الطلاب بيدرسوا اما C\C++ أو JAVA أو Python في حالات نادرة كأول مادة للتعلم على مبادىء اللغات البرمجية الأساسية مثل Loops و Conditional statements و Variables و Functions ومهما كانت المادة اللي درستها لن تشكل فرق كبير لأن تعلمك الأساسيات في لغة برمجة معينة ثم الإنتقال للغة أخرى حرفياً لن يلزمك أكثر من ساعات لدراسة الفروقات وبعض التطبيق وحل الأسئلة حتى تعتاد على التغير في اللغة. 

في هذه المرحلة المطلوب منك سواء كمبرمج في بداية مسيرتك أو كطالب بيدرس تخصص متعلق بالبرمجة كتابة كود والكثير من الكود حتى تعتاد ﻷن البرمجة من أكثر المهارات التي تحتاج الممارسة العملية على جهاز كمبيوتر حتى نعتاد على المشاكل التي نواجهها في الكمبيوتر(في النظام أو الأدوات) أو أثناء البرمجة سواء كانت خاصة بالبرمجة مثل المشكلة المشهورة نسيت فاصلة منقوطة (;) ضليت 6 ساعات أدور عليها وأيضا طريقة استغلال الأدوات المختلفة من محرر نصوص مثل Visual Studio Code و الشاشة السوداء CMD\CLI والأمر الأخر هو Problem Solving حل المشاكل والهدف منها اكتساب القدرة على حل الأسئلة والمشاكل عن طريق تحويل الأفكار لخطوات منطقية لنستطيع تطبيقها على شكل كود، من يتقن هذه المهارتين بشكل جيد جداً في أول سنة ونص لسنتين خصوصاً ال Problem Solving خصوصاً بعد دراسة Data Structures و Algorthims سوف يكون على السكة الصحيحة بإذن الله للتميز في المجال مستقبلاً، الصبر والإستمرارية سيكونان مفتاح ذلك حالياً ومستقبلاً.

الجميل أن الأمرين معاً يمكن تدريبهما خلال نشاط واحد ولكن الثاني يدور حوله الكثير من الطرق والخطوات والأساليب ولكنها كلها تدور حول مفهوم واحد حل الكثير من الأسئلة بشكل مستمر والتركيز على كلمة مستمر أي أنه لا يكفي تدريبها فقط في العطلة بس يجب تخصيص وقت ولو 15دقيقة بشكل يومي والتعرض لكثير من الأفكار بعد بناء العلوم الأساسية اللازمة. العلوم الأساسية التي سوف تحتاجها تتمثل في المذكورة أعلاه من Loops و Variables وغيرها من المهارات ثم العلوم المتعلقة بهيكلة البيانات Data Structures ثم العلوم المتعلقة بالخوارزميات المتقدمة في مساقات Algorthims، لكن هذا لا يعني أنه لا يمكن أن نبدأ في تطوير مهارة Problem Solving قبل إنهاء هذه المواد بل بالعكس علينا البدء قبل ذلك لأنه سيساعدنا أكثر في فهم الهدف والمغزى والفائدة من كثير من المفاهيم في هيكلة البيانات Data structures والخوارزميات المتقدمة Algorthims.


والخطة للبدء في تعلم هاي المهارات بيبدأ عن طريق التأكد من تمكننا من الأساسيات التي درسناها سابقاً في مواد البرمجة عن طريق دورتين على اليوتيوب مجانيات تشرح المبادىء عن طريق c++ لأن هناك بعض المفاهيم والمبادىء خاصةً Pointers/Addresses غير موجودة بشكل واضح في باقي اللغات البرمجة ومن لم يدرسها وضعت له فيديوهن يُفهم منهن أهمية الفكرة (Pointers/Addresses) :

Pointers and Addresses

مع هذا الدرس
Functions and Pointers/Addresses

لكن يفضل أن يمر الشخص على هذه السلاسل لتأكيد اتقان الأساسيات ويبدأ وهو واثق من نفسه إن شاء الله.

Programmers introduction

Problem solving examples

أول دورتين ضروريات جداً برأيي حتى لو لم تتم مشاهدتهم بشكل تفصيلي على الأقل يتم المرور على مواضيعهن.

ثم بعدها يتم البدء بحل أسئلة وبرأيي الشخصي يكفي حل سؤال بشكل يومي عند الإنشغال (يستغرق الأمر 15دقيقة) أثناء الفصل وفي العطلة زيادة العدد ومن وجد بعدها مزيد من الوقت (مثلاً بعد حل 5 أسئلة بشكل يومي تختلف مستوياتها في الصعوبة)، دراسة Data structure من هذا الموقع https://www.geeksforgeeks.org/data-structures/

بحيث يعتبر كخطة عامة والإستزادة من اليوتيوب حسب الموضوع المطلوب مثلاً وجدت صعوبة في فهم LinkedList بالإمكان البحث في اليوتيوب بالعربي " شرح LinkedList " ومشاهدة الفيديوهات حتى تجد شخص أسلوبه يناسبك وحل الأسئلة في البداية يكون من مواقع مثل
https://www.codewars.com/
https://codeforces.com/
موقعين ممتازات خصوصاً الأول أفضله لأن طريقة صياغة الأسئلة بشكل مباشر.
ثم عند أخذ مادة Data structure
  https://neetcode.io/practice
للحصول على خارطة لحل مجموعة أسئلة من الموقع الأكثر شهرة وهو
https://leetcode.com/
بالإمكان البدء ببعض الأسئلة easy في leetcode لكنها مع ذلك جزء كبير منها ليس بالسهل ويفضل تركه حتى يتم دراسة المواضيع الأسياسية في Data structure حتى إن لم يتم أخذ المساق.

ويمكن الإستعانة بقناة https://www.youtube.com/@NeetCode
للإطلاع على حلول أسئلة في Leetcode  حتى إن لم يكن الشخص لديه الفهم الكامل لسبب اختيار هذه الطريقة بدلاً من أخرى وطبيعي جداً أن نواجه صعوبة بالغة في البداية حتى إن بدى السؤال سهلاً ولكن مع الوقت وحل الكثير من الأسئلة الموضوع يصبح أسهل وأسهل.


وهكذا عليك الإستمرار حتى الوصول للمرحلة التي تليها التي تبدأ فيها رحلة Web و Database و FrontEnd و BackEnd و Mobile و QA.


أي شخص لديه اقتراح للتحسين أو تعديل بإمكانه وضعه في التعليقات أو ارساله الي بشكل مباشر ^^.


إرسال تعليق

أحدث أقدم