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

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

البداية والقرار

أول دورة برمجة قررت أخيرًا أن أشتريها وأبدأ في دراستها كانت دورة “Front-end Web Development” من شركة Udacity، أو ما كان يسمى “Front-end Developer Nanodegree”. جاء هذا الاختيار بعد فترة طويلة من التذبذب والارتباك، والتي تحدثت عنها في مقال سابق حول كيف ساعدتني ساعتان من البرمجة يوميًا على التحول المهني من القطاع المصرفي إلى البرمجة.

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

أول وظيفة: العمل الحر

مباشرة بعد ذلك، بدأت في البحث عن وظائف مناسبة لما تعلمته في الدورة. في ذلك الوقت، كنت أبحث تحديدًا عن وظائف العمل الحر (Freelancing) أو الوظائف المؤقتة بعقود غير ثابتة، لأنني داخليًا لم أكن متأكدًا من قدرتي على العمل في شركة بالمهارات والخبرات التي اكتسبتها من الدورة فقط.

بعد أسبوعين من إنهاء الدورة، وجدت وظيفة مع مطور ويب لا يزال صديقي حتى الآن، اسمه خوان، يعيش في أمريكا. كان يريد اثنين من المطورين المبتدئين (Junior Developers)، أو حتى من لا يزالون في مرحلة التعلم، أحدهما لتطوير الواجهات الأمامية والآخر للخلفية (Back-end)، لمساعدته في تطبيق كان يعمل عليه لعميل في ولاية كاليفورنيا.

كانت فكرة التطبيق ببساطة هي عرض وبيع الوحدات السكنية في الولاية. كان المكدس التقني (Technology Stack) في ذلك الوقت بسيطًا جدًا مقارنة بالوضع الحالي، حيث كان مطلوبًا مني فقط معرفة:

لمن لا يعرف jQuery، هي مكتبة كانت منتشرة قبل ظهور المكتبات الكثيرة مثل React وAngular وغيرها. لا تزال jQuery موجودة حتى الآن، لكنها لم تعد مستخدمة كما في السابق.

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

أهمية الموجه (Mentor)

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

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

بهذه الطريقة، كنا جميعًا نعرف في نفس الوقت ما الذي نفعله وعلى ماذا نعمل. لقد تعلمت هذه الأمور في وقت مبكر جدًا.

الاستمرار في التعلم

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

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

استمررت في العمل على مشاريع حرة مع خوان، وكنت مرتاحًا جدًا في التعامل معه. بعد ذلك، بدأت تأتيني بعض العقود المؤقتة مع شركات أخرى، أبرزها شركة في أمريكا يملكها هنود، كانت تعمل في تقديم خدمات استضافة المواقع. كانت وظيفتي هي التأكد من أن كل شيء في الواجهة الأمامية للوحة تحكم المسؤول يعمل بشكل جيد وأن كل شيء في مكانه.

نقطة التحول: الخوارزميات وهياكل البيانات

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

في ذلك الوقت، لم أكن أعرف الكثير عن هياكل البيانات والخوارزميات بشكل عميق. كنت أفهم ما هو الكائن (Object) وما هي المصفوفة (Array)، لكنني لم أكن أفهم مزايا وعيوب كل منهما. كنت أعرف أنني بحاجة لاستخدام مصفوفة في هذه الحالة، لكنني لم أكن أعرف المنطق أو الخوارزمية التي تمكنني من تبديل (Shuffle) الشعارات.

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

كانت هذه نقطة تحول فارقة بالنسبة لي. مباشرة بعد تلك المقابلة، بدأت في تعلم الخوارزميات وهياكل البيانات. بدأت أفهم ما هي المصفوفة، ومم تتكون، وكيف يتم تخزينها في الذاكرة، ومتى ولماذا نستخدمها. بدأت أفهم جداول التجزئة (Hash Tables)، والكائنات، والقواميس (Dictionaries) في لغات مثل Python. بدأت أتدرب على حل المشكلات على مواقع مثل CodeWars (وصلت فيه إلى المستوى 3 أو 4، لا أتذكر بالضبط) وحللت عددًا لا بأس به من المسائل على موقع LeetCode، وهو من أشهر مواقع التدريب على حل المشكلات.

التوسع في المهارات

إلى جانب الخوارزميات وهياكل البيانات، بدأت أتعمق أكثر في React، ودخلت أيضًا في مجال تطوير الواجهات الخلفية باستخدام Node.js وExpress. بدأت أعمل أكثر على الخادم وأفهم ما هي قاعدة البيانات، وكيف تتواصل مع الواجهة الأمامية، وكيف يوجد خادم في المنتصف بينهما (أو بالأحرى خادمان: خادم ويب وخادم تطبيق). درست هذه الأمور كلها بشكل نظري أولاً، ثم بدأت في ربط قاعدة بيانات معينة بالواجهة الأمامية عندي والعمل على كتابة ما يسمى RESTful API، وهو ببساطة معيار معين لتصميم واجهات برمجة التطبيقات (APIs).

بعد الستة أشهر التي درست فيها HTML، CSS، JavaScript، وjQuery، والتي حصلت بعدها على أول وظيفة حرة، لم تستغرق مني React وNode.js نفس المدة. استغرقت React مني شهرًا ونصفًا بالضبط، بينما استغرق Node.js حوالي شهرين.

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

بعد ثلاثة أو أربعة أشهر بالضبط، حصلت على وظيفة في شركة ألمانية كانت تعمل بنظام التعهيد (Outsourcing) للمهندسين في مصر. كانت هذه بداية رحلتي في الوظائف بدوام كامل في الشركات المختلفة.

من طالب إلى موجه

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

نصائح هامة لرحلتك التعليمية

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

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

  2. الخوارزميات وهياكل البيانات أساسية: لا مفر من تعلم هياكل البيانات والخوارزميات. نعم، قد تتمكن من العمل دون فهمها جيدًا في البداية، كما فعلت أنا في بداية مسيرتي كعامل حر. لكن لاحقًا، عندما تعمل على مشاريع أكبر وأكثر تعقيدًا، ستجد نفسك مجبرًا على تعلمها، لأن تطبيقاتك يجب أن تكون فعالة من حيث السرعة واستهلاك الذاكرة. هذه أمور مهمة لا يجب أن تتغاضى عنها. لا يوجد ما يمنعك إطلاقًا من تعلم لغة تخفي عنك كيفية التعامل مع الذاكرة (Memory Management) مثل Python أو JavaScript في البداية، ثم تقرأ نظريًا عن الذاكرة والمؤشرات (Pointers) وتتدرب عليها بلغة جديدة مثل C أو C++. ليس من الضروري أن تتعلم C++ أولاً ثم JavaScript. إذا تعلمت C++ في البداية، قد يكون تعلم JavaScript أسهل نسبيًا، ولكن العكس صحيح أيضًا. الانتقال من لغة إلى أخرى ليس هو العائق الكبير الذي قد يخيفك. المشكلة كلها في التأسيس الصحيح والسير في المسار المضبوط من البداية.

  3. الأهداف الواقعية: جملة “تعلم البرمجة في مدة زمنية محددة” هي جملة خيالية. لكن “تعلم أساسيات معينة في مدة زمنية محددة” هو المعنى الحقيقي للهدف. وعندما تحقق هذا الهدف، تنتقل إلى هدف آخر، وهكذا، حتى تبني خبرة معينة وتبدأ مع الوقت في الشعور بالتطور. عندما تقيس الفرق بين ما كنت عليه وما أصبحت عليه، سترى مدى تطورك.

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

شارك المقال

أحدث المقالات

CONNECTED
ONLINE: ...
SECURE
00:00:00