تعلم البرمجة

تعلم البرمجة: التعليم الجامعي وحده لايكفي

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

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

وماذا عن تجربة تعلم البرمجة ضمن منصة عربية، و هل هي خطوة جيّدة لمن يريد تعلم البرمجة من الصفر؟

 

حدثنا قليلًا عنك، من أنت وأين تعمل؟

اسمي وليد الفيفي، أدرس كطالب بكالوريوس هندسة برمجيات في جامعة الملك فهد للبترول والمعادن، ومن المتوقع تخرجي في شهر ديسمبر من هذا العام. درست في الجامعة مواد كثيرة في تخصصي مثل أساسيات البرمجة، هياكل البيانات، قواعد البيانات، تصميم البرامج Software Design واختبار البرامج Software Testing وغيرها. تركيزي الحالي هو تطوير تطبيقات/مواقع الويب بجميع أجزائها الواجهات الأمامية والنظم الخلفية. لدي أيضاً معرفة بسيطة بنظم تخطيط موارد الشركات ERP تحديداً Odoo ERP. عملت في الجامعة على مشروع التخرج لمدة ثمانية أشهر وعملت مع أحد شركات البرمجة المحلية لمدة شهرين كمطور نظام ERP.

 

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

في الحقيقة أستطيع القول بأن تجربتي مع التعلم بدأت مع بداية دراستي الجامعية؛ وذلك لأن كل فصل دراسي يحمل معه كم هائل من المعلومات والمشاريع التي يجب أن تتعلمها للنجاح والاستمرار في الجامعة. أما إذا كنا نتحدث عن التعلم الذاتي، فإن بدايتي الجديّة معه كانت في مطلع العام الماضي 2019. وأقول الجديّة لأنه كان لي تجارب سابقة مع التعلم الذاتي لتطوير تطبيقات أندرويد وأمور أخرى ولكنها لم تحقق أي نتائج.

 

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

 

 هل هناك سبب معين دفعك لتعلم لغة JavaScript؟

في الواقع هناك أسباب كثيرة دفعتني لاختيار لغة JavaScript. بدايةً لم تكن لغة JavaScript هي مدخلي إلى البرمجة، فقد تعلمت من قبلها البرمجة على لغة Java. ورغم تشابه اسميهما، فإنهما لغتين مختلفتين. ولمن يعرف لغة Java فإنه يعلم صعوبة كتابة البرامج بها، فهي لغة ذو تركيب صعب وقواعد كثيرة. على عكسها لغة JavaScript والتي تعتبر لغة ذو تركيب سهل ولا تفرض أي نموذج معين لكتابة الشيفرة البرمجية. هذا كان السبب الأول الذي جعلني أحب لغة JavaScript من المرة الأولى، لسهولتها البالغة مقارنة بلغة Java. لا أقول هنا أن JavaScript أفضل أو أن Java سيئة، إنما مجرد تفضيل شخصي لا أكثر.

السبب الثاني كان إمكانية كتابة تطبيقات ويب متكاملة باستعمال نفس اللغة. في تطبيقات ومواقع الويب، هناك ما يسمى واجهات أمامية (front-end) ونظم خلفية (back-end). الواجهات الأمامية أو ما يسمى جهة العميل تحتاج إلى لغات معينة وهي HTML و CSS و  JavaScript. بينما النظم الخلفية فتحتاج لغات مختلفة مثل PHP أو Python أو Java. في السابق لم يكن من الممكن استعمال JavaScript، والتي هي لغة في جهة العميل أصلاً، في بناء النظم الخلفية. ولكن مع ظهور بيئة Node.js فقد صار بالإمكان بناء نظم خلفية باستعمال JavaScript. هذا السبب دفعني لتعلم لغة JavaScript عن غيرها لأني بذلك أستطيع بناء تطبيقات ويب متكاملة بنفس لغة البرمجة ودون الحاجة إلى التنقل بين اللغات.

 

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

 

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

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

 

ومع ذلك، فإن المحتوى المجاني هو ما أتعلم منه أغلب الوقت. ولا أتكلم عن يوتيوب فقط هنا بل عن المواقع والمصادر المختلفة مثل التوثيق (Documentation) وأسئلة StackOverflow وfreeCodeCamp وغيرها. لا أستطيع تخيل تجربة التعلم بدون هذه المصادر المجانية، وذلك لأنه من الصعب أن تدفع مقابل كل معلومة تريد الحصول عليها. وعلى سبيل المثال، كما ذكرت سابقاً أني تعلمت React.js قبل دخول دورة حسوب من محتوى مجاني. كان ذلك ممكناً بفضل دورة رائعة تشرح أساسيات React.js على موقع Scrimba لمدة 5 ساعات تقريباً.

وعلى الجانب الآخر، عندما أردت تطوير مهاراتي المتقدمة في لغة التنسيق CSS قمتُ بشراء دورة مدفوعة على موقع Udemy. لماذا لم أكتفِ بالمصادر المجانية؟ لأني وجدت هيكلة واضحة للدروس في الدورة المدفوعة لا أستطيع أن أجمعها بنفسي من المحتوى المجاني. ولذا فإن الدورات المدفوعة توفر عليك عناء البحث عن الدروس المناسبة وعن ترتيبها بأفضل شكل.

 

بعد تعلم البرمجة وحصولك على الشهادة، حدثنا هل ساعدتك في الحصول على عمل، هل جربت شيء هكذا؟

بداية أحب أن أوضح أن الشهادة نفسها ليست هي ما سيساعدك في الحصول على عمل، بل الخبرات والمهارات التي سوف تكتسبها خلال رحلة التعلم وأيضاً المشاريع التي ستعمل عليها. لذا فالمهم هنا هو محتوى الدورة نفسه وليس الشهادة، فالمهارات والمشاريع هي ما ستستعرضه عند البحث عن عمل وليس الشهادة. من المهم أيضاً أن أوضح أن الدورة لم تكن مصدري الوحيد للتعلم بل هناك مصادر كثيرة مختلفة كنت وما زلت أتعلم منها.

الآن هل ساعدتني الدورة في الحصول على عمل؟ أستطيع القول أن الخبرة التي اكتسبتها خلال رحلة التعلم من دورة حسوب ومن غيرها بالفعل ساعدتني على الحصول على فرصة تدريب (internship) مدفوعة. في شهر مارس من العام الحالي حصلت على مقابلتين مع أحد الشركات على فرصة تدريب مهندس واجهات أمامية (Front-End Engineer Internship) وقد كان أدائي في المقابلة التقنية (technical interview) جيداً مما أهلني للمقابلة الثانية. اعتذرت الشركة لاحقاً عن قبولي بسبب الظروف الراهنة لفيروس كوفيد-19 التي كانت في بدايتها هنا في السعودية.

في نهاية شهر أبريل حصلت على مقابلة أخرى ولكن هذه المرة كانت على فرصة تدريب مطور نظام ERP. بعدها بأسبوعين تم قبولي في الشركة وبدأت العمل كمتدرب مطور نظام بداية من شهر يونيو لمدة شهرين. كنت قد حصلت أيضاً على مقابلة أخرى في منتصف شهر مايو كمطور ويب باستعمال React.js.

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

 

ماذا تنصح من يريد تعلم البرمجة، ما هي أفضل وصفة للتعلّم حسب تجربتك؟

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

لدي بعض النصائح لمن يريد تعلم البرمجة، تحديداً تطوير الويب، من واقع خبرتي البسيطة وأيضاً مما تعلمته من الخبراء في هذا المجال:

1- ابدأ بتعلم الأساسيات قبل أن تحاول بناء المشاريع الحقيقية. عندما يكون أساسك صحيحاً فسوف يسهل عليك فيما بعد أن تبني عليه وأن تفهم جيداً المكتبات/أطر العمل المبنية على هذه الأساسيات. على سبيل المثال، عندما بدأتُ تعلم أساسيات تطوير الويب وقعتُ في خطأ الانتقال إلى إطار العمل Bootstrap الشهير قبل تعلم CSS جيداً مما كلفني الكثير من البحث والتجارب غير المثمرة في محاولة العمل به، وفي الأخير اضطررت إلى العودة لمحاولة إتقان CSS على أية حال. أعي أن مقاومة الرغبة في بناء مشاريع حقيقية جاهزة بسرعة صعب على النفس ولكن من تجربتي ومن كلام الخبراء فإن فهم الأساسيات جيداً قبل الشروع في بناء المشاريع مثمر أكثر وسيوفر عليك الوقت والجهد لاحقاً. لا يجب أن تكون محترفاً في الأساسيات حتى تبدأ في بناء المشاريع، ولكن حاول على الأقل إتقانها جيداً قبل البدء في التطبيقات العملية. 

 

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

 

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

 

4- أخيراً، تعلم الإنجليزية. إذا أردت تعلم أساسيات البرمجة وربما حتى بناء تطبيقات بسيطة فسوف يكفيك المحتوى العربي و أكاديمية حسوب بالفعل تقدم محتوى جيد من هذه الناحية. أما إذا أردت الاستمرار في البرمجة وقطع مشوار طويل فحتماً ستحتاج إلى تعلم الإنجليزية. الكثير من المحتوى ذو الجودة العالية، توثيق اللغات/التقنيات التي ستستعملها، المناقشات والأسئلة وغيرها موجودة بالإنجليزية فقط. لذا إذا كنت لا تجيد الإنجليزية فلن تستفيد من كل ذلك. وهنا أؤكد لك أنك لا تحتاج إلا أن تتعلم أساسيات اللغة الإنجليزية لتفهم المحتوى الأجنبي وسوف تعتاد على الاستماع والقراءة مع الوقت.

 

 تعلم البرمجة يعتمد على الممارسة العملية؛ برأيك كيف يمكن للمتدرب أن يوجد طريقة للممارسة؟

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

1- قم ببناء مشاريع كاملة بنفسك. بعد تعلم الأساسيات وفهمها جيداً، جرب بناء تطبيق كامل بنفسك. اختر فكرة معينة ثم حاول تحويلها إلى تطبيق ويب وليكن مثلاً تطبيق مهام أو تطبيق لعرض آخر الأخبار أو تطبيق لتتبع التمارين اليومية أو أي فكرة. جرب أفكاراً بسيطة، لا تعقد الأمر على نفسك. سوف تشعر بالارتباك في البداية، ولكنك سرعان ما ستكتسب المعرفة والثقة بالبحث والمحاولة إلى أن تنهي المشروع. 

 

2- إذا كان بناء مشروع كامل صعباً عليك في البداية، جرب أن تعدل على المشروع الذي بنيته خلال متابعة الدورة. على سبيل المثال، في دورات حسوب هناك دائماً مشروع عملي في نهاية كل مسار. بعد إنهاء المشروع العملي مع الدورة، قم بالتغيير في المشروع. أضف له وظائف ليست موجودة أو جرب عمل نفس الوظيفة لكن بطريقة أخرى. مثلاً في نهاية مسار أساسيات Node.js من دورة JavaScript هناك مشروع عملي لعمل تطبيق مدونة بسيط. في المسار هناك فقط عرض المشاركات، إنشاء مشاركات، إضافة تعليقات ونظام توثيق بسيط. لكي تزيد من فهمك لآلية عمل التطبيق، جرب مثلاً أن تضيف صفحة لعرض الملف الشخصي مع المشاركات الخاصة بكل مستخدم. أو جرب تعديل طريقة عرض المشاركات. هذا مجرد مثال، وبإمكانك إسقاطه على أي مشروع تعمله بالمتابعة مع دورة أو شرح.

 

3- أيضاً جرب أن تعمل تطبيق ويب/جوال لأحد معارفك مثل عائلتك أو أصدقائك. أضف مشاركة على الفيسبوك مثلاً أو تويتر تسأل عما إذا كان أحد يحتاج إلى تطبيق/موقع ويب وسوف تبرمجه له. صحيح أنه غالباً لن يُدفع لك مقابل مادي إلا أنك ستكتسب خبرة عملية مفيدة جداً. حاول عمل التطبيق أو الموقع بأفضل شكل حتى لو لم تحصل على مقابل، وذلك لأنك تستطيع الاستفادة من هذا المشروع في وضعه على معرض أعمالك وأيضاً الحصول على توصية من العميل الذي عملت معه.

 

حدثنا عن الوقت الذي كنت تخصصه للتعليّم الذاتي، كيف استطعت النجاح في تجربتك؟

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

 

أيضاً كنت أغير من هذا الحد الأدنى حسب الظروف. فمثلاً في الإجازة الصيفية، عندما أنهيت معظم محتوى الدورة، كنت أخصص 3 إلى 4 ساعات يومياً للتعلم. كان ذلك ممكناً لأني كنت أسكن لوحدي ولم يكن لدي أي التزامات جامعية.

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

 

 

انتقل إلى أعلى