منذ حوالي ١٦ عاماً، بدأت مسيرتي في عالم المعلوماتية كهاوٍ فضولي، يحب أن يتعلّم كيف تعمل الأشياء. واليومَ أقضي معظم وقتي في ممارسة البرمجة واعمل في مجالها.
سأتحدث في هذه المقالة عن تجربتي الشخصية مع البرمجة، البرمجيات، والمعلوماتية بشكل عام: بدايتي، المراحل التي مررت بها، والأشياء التي تعلمتها.
وسأختم بتقديم بعض النصائح لمن يحب تعلم البرمجة (او احترافها).
قصتي الشخصية مع البرمجة
بدايتي مع الحاسوب
لطالما حلمت في طفولتي أن امتلك حاسوباً، وقد حقق والداي حلمي هذا عندما كنت في حوالي الثانية عشرة من عمري.. في بادئ الأمر، كنت اقضي وقتا طويلا في استكشاف هذا العالم المختلف: أجرب جميع برامجه، أعبث بالطابعة، أنصّب البرامج المختلفة واجربها.. وسرعان ما اصبحت من متقني استخدام هذه الالة.
كيف اكتشفت "وجود البرمجة"؟
في حوالي الصف السابع (بعد سنة تقريبا) بدأ فضولي يدفعني لتعلم كيف تصنع برامج هذا الحاسب؟ وبدأت اتخيل السيناريوهات المختلفة.. أخذت اجرب موجه الأوامر في ويندوز (command line) واجرب تعديل الملفات الدفعية وأعيث فساداً.
في المدرسة، وفي حصة المعلوماتية تحديدا، سألت مدرّس المادة: كيف تُصنع البرامج؟ وأجابني حينها: هناك شيء ما يدعى "لغات البرمجة" وتستخدم هذه اللغات لكتابة البرامج.
كان هذا كل ما احتاجه في لحظتها، توجهت برفقة احدى خالاتي الى متجر حاسب يبيع السيديات المختلفة (CDs) المتعلقة بالحاسب، وطلبت منه اعطائي لغات برمجة! كان سؤالاً غريبا، الا ان الجواب كان أغرب، فقد أخبرني المهندس: هل انت متاكد؟ يمكنك حرفيا تخريب وحرق جهازك اذا أسأت استخدامها! على الرغم أني اليوم اعرف ان رده كان مبالغا فيه، الا اني شعرت عندها ببعض الخوف، لكني طلبت منه ان يبيعني هذه الاقراص.
كيف بدأت اللعب مع البرمجة؟
ذهبت الى منزلي، وقمت بتنصيب هذه البرامج.. كان هناك العديد منها، على اي حال اليوم فقط أذكر Vistual Basic 6.
استغرقت بضع ايام في استكشاف هذه البرامج، وتجريب الاشياء المختلفة الموجودة بداخلها.. وجدت امثلة (examples) مرفقة بهذه البرامج، كنت دائما افتحها واشغلها، اقوم باجراء التعديلات وارى الاخطاء الناتجة.. هكذا وبالتجربة والخطا كانت بوادر تعلمي للبرمجة.
بعد حوالي سنة من ذلك، قمت بتطوير أول برنامج خاص بي، وقد كان برنامجا بسيطا للمساعدة في كتابة الشعر! اعتمدت كثيرا على الامثلة الموجودة، نسخ المقاطع البرمجية وتعديلها، وتدريجيا بت اعرف ماهي وظيفة كل عبارة برمجية فيها.
خلال هذا الوقت (هذه السنة)، كنت قد قمت باعداد حاسوبي للاتصال بالانترنت (باستخدام Dial-up connections)، وقد كانت سرعة الاتصال القصوى حوالي ٤-٨ كيلو بايت في الثانية! على اية حال، كانت كافية لايجاد اجوبة لمعظم استفساراتي على الانترنت.
بداية تعلمي للبرمجة بشكل ممنهج
مع بداية الصف التاسع (في سن الخامسة عشر تقريبا)، كنت قد سمعت كثيرا عن لغة C++ وكنت قد شعرت ان الوقت حان لتعلم البرمجة بشكل منهجي، فقمت بشراء كتاب لتعليم هذه اللغة، من مركز الفجر للمعلوماتية.
كان انتقالا نوعيا من تطوير البرامج المعتمد على الواجهات (كما في Visual Basic) الى تطوير البرامج النصية بدون الواجهات. بدأت باتباع الكتاب شيئا فشيئا، تعلمت الادخال، الاخراج، الشروط، الحلقات، التوابع، وغير ذلك.. لكنني توقفت في مرحلة مبكرة بدون الغوص كثيرا في الكتاب وانتقلت الى التطبيق.. كيف؟
في تلك المرحلة.. كنت أدير بعض المجموعات على Google Groups حيث كنت كثيرا ما اجرب واكتشف اشياء ممتعة في Visual Basic 6 وكنت استمتع بمشاركتها مع الاخرين، استقبل اسئلة المشتركين واجيب عليها، وغير ذلك.. كمان وانني قمت في تلك الفترة بكتابة كتاب للمساعدة في تعليم اساسيات Visual Basic 6 ونشرته، وقد تلقى الكثير من الاعجاب.
وقد وجدت مجموعة مشابهة عن طريق الصدفة، كان فيها بعض الاعضاء النشطين، احدهم مشرفا ينشر اسئلة تحوي مسائل رياضية معينة ويطلب من الاخرين (المتدربين) كتابة برامج لحلها.. وقد وجدت الامر ممتعا وقمت بارسال حلي لاحدى المسائل (كانت تدعى الجمعة الثالثة عشر)، وقد أعجب المشرف بحلي وتواصل معي ليشجعني على الانضمام الى الاولمبياد السوري للمعلوماتية، بعد ماعرف اني من سوريا، وانني مؤهل للانضمام (ضمن حد السن).. هذا المشرف هو اليوم الدكتور شادي صالح، والذي كان له دور كبير في ادخالي في مجال البرمجة التنافسية وكذلك في مسيرتي في مجال البرمجة بشكل عام.
الدخول في عالم البرمجة التنافسية (Competitive Programming)
نهائيات كأس العالم في 2013 ICPC، روسيا
الاولمبياد السوري للمعلوماتية، والاولمبياد العالمي للمعلوماتية
كما ذكرت، بدأت اشارك في الاولمبياد السوري للمعلوماتية والذي نظمته ودعمته حينها الجمعية العلمية السورية للمعلوماتية، وتدريجيا تمكنت من تحقيق بعض النجاحات، لن اكون مغرورا، كان هناك من هو افضل مني بكثير حينها، الا اني تمكنت من الوصول الى المراتب الثلاث الاولى على مستوى سوريا، من خلال عدة مشاركات.
اختتمت مشاركاتي في الاولمبياد السوري للمعلوماتية عندما تأهلت مع بعض الرفاق الى الاولمبياد العالمي للمعلوماتية، الذي اقيم في كندا.. لم أحرز نتائج مذهلة هناك لكن مجرد الوصول كان انجازا جيدا بالنسبة لي، وقد كانت أول مرة اغادر فيها سوريا، لارى اشخاص مختلفين، ثقافة مختلفة وعالم مختلف.
لم يكون الوصول الى هذا المستوى سهلا ابدا.. بل تطلب مني ومن الفريق الكثير من التحضير، التدريب والدراسة.
كنا نقوم بحل المسائل المعقدة المكتوبة بالانكليزية، وبتقييم حلولنا على مواقع المسابقات البرمجية، كما وقمنا بدراسة الكثير من بنى المعطيات والخوارزميات والتقنيات المختلفة.. والدراسة باللغة الانكليزية كانت من التحديات بالنسبة لي.. لكن تدريجيا، ساهم ذلك في تحسين مهاراتي اللغوية بشكل ملحوظ.
المسابقة البرمجية للكليات الجامعية (سورياً، عربياً ثم عالمياً)
لاحقا، كنت قد انهيت مرحلة الدراسة الثانوية بمجموع ممتاز، واصبحت امام خيار مصيري.. هل أدرس الطب، ام الهندسة المعلوماتية؟ لن أطيل الكلام، خالفت توقعات المجتمع ومعظم الناس المحيطة بي، واخترت المتابعة في طريق المعلوماتية.
هنا، وقبل البدء بالجامعة، دخلت عالم المسابقة البرمجية للكليات الجامعية في سوريا، والتي كانت قد أدخلت حديثا الى سوريا، حيث كان هناك مجموعة من القامات التي تقودها من بينهم الدكتور شادي وكان حينها طالبا في الهندسة المعلوماتية (نفسه من ساعدني في دخول عالم البرمجة التنافسية)، الدكتور جعفر الخير وغيرهم..
بدأت مشاركاتي بشكل متواضع في المسابقة البرمجية السورية، ومن بعدها على المستوى الاقليمي، حيث اقيمت المسابقة في بيروت.
في السنة التالية، حققت برفقة فريقي المميز (محمد أسعد، زين شاهين وشادي صالح كمدرب، لهم اطيب التحيات) انجازات اكثر اهمية، وتأهلنا الى المسابقة العربية مجددا، وهناك استطعنا التأهل الى المسابقة العالمية ICPC 2013 التي اقيمت في سان بطرسبورغ، روسيا، وكنا بذلك أول فريق سوري يصل الى العالمية في هذه المسابقة. على الرغم من اننا لم نحقق نتائج مذهلة هناك، الى ان الوصول الى هذا المستوى كان حلما لنا.. لكن ما يجعلني اكثر سعادة، هو ان سوريا ومنذ 2013 حاضرة كل سنة في المسابقة العالمية، لكن اليوم الفرق السورية تحقق نتائج مبهرة بحق فيها.
مجددا، لن انسب هذا التميز لنفسي، بل لولا وجودي ضمن فريق مميز مكون من اشخاص اذكياء جدا، لما كان هذا النجاح ممكنا.
يمكنك مراجعة مقالتي البرمجة التنافسية، أول خطوات تعلم البرمجة للحصول على مزيد من المعلومات عن كيفية دخول مجال البرمجة التنافسية.
الدراسة في مجال المعلوماتية
مشاركاتي في البرمجة التنافسية ساهمت بشكل كبير في صقل مهاراتي في بعض لغات البرمجة (بشكل خاص في ما يتعلق بالبرمجة التنافسية)، كما وساعدتني على فهم الخوارزميات وبنى المعطيات بشكل جيد جدا، مما ساعدني في النجاح في دراستي لمجال المعلوماتية.. فمواد البرمجة والتي كانت من اصعب المواد واكثرها تحديا بالنسبة لرفاقي الجدد في المجال، كانت بالنسبة لي المواد الممتعة التي لا تحتاج الى دراسة.
خلال فترة دراستي، قمت بالعمل على العديد من المشاريع التي تحوي تحديات.. ففي معظم الاوقات كنت اقرر العمل على اشياء لا علم لي بها، لمساعدتي في التعلم.. وقمت بالعمل على العديد من المشاريع العملية، كما وتعلمت انشاء التطبيقات بالواجهات، التعامل مع قواعد البيانات، وغيرها الكثير.
كما وقمت بالعمل في هذا الوقت مع بعض الاصدقاء على الدخول في سوق العمل بشكل متواضع، من خلال بناء بعض البرامج لادارة الاعمال المختلفة، مما ساعدني في التعامل مع قواعد البيانات ومع العملاء المختلفين.
دراستي لعلوم الحاسب ساهمت في تكوين اساس نظري جيد جدا لمعارفي العملية، وانا مسرور جدا بما تعلمته في الجامعة.
بالنسبة للمشاريع المميزة التي عملت عليها، فقد قمت في السنة الرابعة بالعمل في مجال معالجة اللغات الطبيعية (Natural languages processing) مع بعض الرفاق، وقمنا ببناء مترجم الي عربي-انكليزي، وحققنا نتائج مرضية جدا.
كما وعملت في مشروع التخرج ايضا في مجال اللغات الطبيعية، على مايدعى اكتشاف الموضوع وتتبعه (Topic detection and tracking) ومجددا حصلنا على نتائج مرضية جدا. كان العمل في هذه المشاريع ممتعا جدا بالنسبة لي، لانه ساعدني على استخدام الكثير من المعارف النظرية التي تعلمتها ودمجها مع التطبيقات العملية..
الانتقال الى سوق العمل
العمل في محرك البحث شمرا
خلال سنة الدراسة الاخيرة، بدأت العمل في مشروع محرك البحث شمرا، وقد استفدت من دراستي في مجال معالجة اللغات الطبيعية.
لم يكن هناك هوية محددة لطبيعة عملي، بكون المشروع كان في مرحلة نشوء، فكنت تارة اعمل في مجال الـ Backend، تارة في مجال الـ Frontend، لكن تركيزي كان على امور الـ Backendـ جلب المحتوى من المواقع المختلفة، تحسين البحث وغير ذلك.. كما وقمت لاحقا مع الفريق ببناء مترجم عربي-انكليزي، مستفيدا من الخبرة المكتسبة من مشروع تخرجي.
العمل في شمرا اعطاني فكرة افضل عن العمل في فريق، وساعدني في تعلم كيفية التعامل مع المخدمات، وقد اكتسبت العديد من المهارات خلاله.
العمل على مشروعنا الخاص
باختصار، كان لدي بعض الافكار لمشروع موقع انترنت وتطبيق، وقمت بالتواصل مع بعض الاصدقاء بُعَيدَ تخرجنا، وبدأنا العمل على تطبيقها.
اجتمعنا العديد من المرات، قمنا باجراء جلسات العصف الذهني لتشكيل الافكار، وبدأنا محاولة تطبيقها.. العديد منا اكتسب الكثير من المهارات التقنية خلال هذا التعاون.. وهذا ساعد الكثيرين في الحصول على فرص عمل لاحقا..
على كل، لم يستطع الجميع المتابعة في هذا المشروع نظرا لانشغالهم في اعمالهم، ولعدم قدرتهم على التفرغ بسبب الظروف الاقتصادية السيئة في سوريا، الا انني تابعت مع أحد الاصدقاء (المهندسة بانة عمر، لها كل التحية)، وكان مشروعنا هو نفسه أفق (Oufok)، الموقع الذي تستخدمه حاليا!
من الجدير بالذكر أنني تابعت العمل على هذا المشروع كمشروع جانبي في وقت فراغي، وقد كان لذلك فضل كبير جدا في اكتساب الكثير من مهاراتي التقنية التي املكها اليوم.
الانتقال الى Booking.com
بعد أن تخرجت بفترة قليلة وقد أحرزت المرتبة الاولى، وخلال الفترة التي كنت لا أزال اعمل فيها في شمرا، وأحاول البدء بمشروعي الخاص، رأيت عن طريق الصدفة اعلان للشركة التي اعمل فيها حاليا (Booking.com) على موقع للبرمجة التنافسية يدعى (HackerRank)، وقد قررت أن أجرب التقدم - فقط للتجربة - وقمت بحل الاختبار الذي وضعوه على الموقع.
من المفاجئ أن الشركة تواصلت معي وطلبت مني البدء بالمقابلات، وبالفعل بدأت، وقد تمكنت من اجتياز مقابلة اولى عبر الانترنت (وكانت عبارة عن بعض الاسئلة البرمجية التي تطلبت بعض المهارات في حل المسائل البرمجية)، ولم أجدها صعبة.
الآن، بقي أمامي مرحلة المقابلات وجها لوجه، والتي تطلبت أن احضر الى مقر الشركة في أمستردام، بالتالي ان احصل على جواز سفر وعلى فيزا مؤقتة.. بعد الكثير من التحديات والوقت، حصلت على جواز السفر وتقدمت للحصول على الفيزا، لكن رفض طلبي.
على كل حال، من خلال النقاش مع الشركة، عرضت لجنة التوظيف علي اجراء المقابلات بشكل كامل عبر الانترنت، وقد كان هذا شيئا استثنائيا في وقتها. وفعلا قمنا بذلك، وقد ابديت اداء جيدا في جميع المقابلات ماعدا مقابلة تصميم النظام (لم اكن حينها اعرف ماذا يعني تصميم النظام في الحقيقة، فلم احظ بأي فرصة للعمل على انظمة على نطاق واسع كما الحال في الشركات الكبيرة).
نتيجة لذلك، ولعدم وجود سنوات الخبرة الكافية، عرضت علي الشركة العمل كمطور برمجيات متخرج حديثا (Graduate Developer)، وقد كان ذلك برنامجا قدمته الشركة لدعم الخريجين الجدد، لاعطائهم فرصة لاثبات انفسهم، حيث يحصلون على عقد دائم في حال ادو جيدا خلال السنة الاولى.
من المؤكد أن خبرتي السابقة في مجال البرمجة التنافسية ساعدتني بشكل كبير جدا في اجتياز المقابلات.
قررت الموافقة على العرض والانتقال الى هولندا للعمل.. ستجد الكثير من التفاصيل عن انتقالي الى هولندا في هذا المنشور على صفحتي الشخصية على الفيس بوك.
الانتقال الى Booking.com كان نقلة نوعية بالنسبة لي، وقد كانت هذه التجربة مختلفة بشكل جذري عن اي تجربة عمل خضتها مسبقا.
ساعدني العمل هنا في التعرف على كيفية العمل في الشركات الكبيرة، تحسين مهارات التواصل، تعزيز قدرتي على التعاون مع الاخرين، بالاضافة الى اطلاعي على عالم جديد من التقنيات والمهارات التي لم اكن اعرف بوجودها مسبقا، كما أن الشركة قدمت لي (ولجميع الموظفين) الكثير من الورشات وجلسات التدريب في شتى المجالات التقنية وغير التقنية.
نصائحي لمن يرغب في تعلم البرمجة والعمل في مجالها
لكلٍّ منا تجربته الفريدة، وما انطبق علي قد لا يعمل جيدا على غيري.. لكني سأحاول مشاركة بعض النصائح مع حضرتك، لعلك تجد منها ما هو مفيد.
كن صبوراً
البرمجة (مثل العديد من المجالات) هي حصيلة خبرات ستراكمها عبر سنوات عديدة جدا.. لكن، في كثير من الاحيان ستحتاج الى قضاء وقت طويل جدا في محاولة ايجاد مشكلة ما في النص البرمجي، او تفسير طريقة عمل خوارزمية.. ربما ساعات، ربما يوم أو ايام.. كل هذا يحتاج صبرا.
ابحث، افهم كل ما يمر أمامك، لا تكتفي بنسخة ولصقه
سواء أكان نصا برمجيا، خوارزمية، علاقة رياضية، مخططا بيانيا او اياً كان. من أهم ميزات المبرمج هي الفكر التحليلي القادر على تحليل المسائل المعقدة وفهمها.. بدون الفهم الصحيح، سيكون من الصعب استنباط الخوارزميات لحل المشاكل المختلفة.. ومجددا، في البداية يحتاج هذا صبرا كبيرا.. لا تظن بأنك فاشل، البداية قد لا تكون سهلة لكن حتما ستصبح أسهل.
ادخل في مجال البرمجة التنافسية
من أهم الأمور التي ساعدتني في تعلم اساسيات البرمجة، وتشكيل اساس جيد، هو دخولي في مجال البرمجة التنافسية.
للدخول في البرمجة التنافسية، ستحتاج الى قراءة وتعلم الكثير عن الخوارزميات وبنى المعطيات (اطلع على هذه المقالة) بالاضافة الى ممارستها وحل الكثير من المسائل البرمجية.. صدقني، لهذا فائدة تفوق التصورات، ومثل هذه المهارات ستكون اساسية وتساعدك كثيراً عند التقدم للعمل في الشركات المتوسطة والكبيرة.
سأترك مهمة البحث عن المراجع في الخوارزميات وبنى المعطيات عليك حاليا، لكني ساقدم لاحقا مقال منفصلا لمساعدتك في الدخول في مجال البرمجة التنافسية. وبالمناسبة، البرمجة التنافسية لا تعني بالضرورة الخوض في المسابقات، بل يمكنك الاكتفاء بتعلم بعض المفاهيم، وحل المسائل. هناك العديد من المواقع لمساعدتك في ايجاد المسائل وحلها، من بينها SPOJ، Code forces, Hacker Rank وغيرها الكثير.
تعلم الانكليزية، استخدمها للبحث، واصبر على قراءتها
بالنسبة لي، كانت جميع المراجع التي استخدمتها مكتوبة بالانكليزية، كذلك المسائل. بالاضافة لذلك، استخدم غوغل وبعض المواقع (مثل StackOverflow) للبحث عن اي معلومات احتاجها، بالانكليزية. على الرغم من أن العديد يحاولون اغناء المحتوى العربي في هذا المجال (ومن بينهم موقع أفق)، الا انه من الصعب تغطية كل شيء في وقت قصير.
كن منفتحا دائما للبحث والقراءة باستخدام اللغة الانكليزية، ومن جديد، كن صبورا على ذلك، استخدم ادوات الترجمة مثل مترجم غوغل لمساعدتك، او ثبت الاضافات الى متصفحك لترجمة الكلمات عند النقر عليها.
ضع هدفا، واعمل باتجاهه.. مثلا، مشروعك الخاص
صدقني، معظم المهارات التقنية والكثير من مهاراتي غير التقنية اكتسبتها من خلال عملي في أفق.
من خلال هذا المشروع، تعلمت الكثير، من بين ذلك روح المبادرة والقيادة، القدرة على الاقناع، والكثير من المهارات التقنية، من بينها php, symfony framework, javascript, css, webpack, reactJS, docker, kubernetes, amazon web services وغير ذلك الكثير.
العمل على المشروع احتوى في كثير من الاحيان على التحدي، فمن الصعب ان تبقى متحمسا، وقد تحتاج الى شركاء تشاركهم الطموح، وتشجعون بعضكم البعض. ستكون قادر على ايجاد طريقك بنفسك.. فقط حدد هدفا وابدأ.
تعلم بشكل ممنهج
الخبرة العملية ضرورية جدا، لكن من الضروري جدا حصولك على أساس قوي لتبني فوقه، وبهذا أعني التعلم عن المواضيع المختلفة في مجال علوم الحاسب. لي مقال منفصل ذكرت فيه بعض هذه المواضيع.
في الختام
أتمنى أن تكون وجدت قصتي الشخصية مفيدة لحضرتك. اذا كنت مهتما بتعلم البرمجة بنفسك، قم بمتابعتي وزيارة مقالاتي بشكل دوري، وابق على اطلاع على مدونة أفق. كما يمكنك دائما البحث عن المقالات ذات الكلمات المفتاحية تعلم البرمجة، علوم الحاسب وغيرها، ومن بين هذه المقالات
تعلم البرمجة من الصفر - ما قبل البداية، الأساسيات النظرية
لا تتردد بطرح اي اسئلة او استفسارات، أو ملاحظات من خلال التعليقات
مع أطيب التمنيات
دريد عبد الله
صورة الغلاف من قبل Pablo Heimplatz on Unsplash
شكرا لمشاركتك الملهمة ونصائحك القيمة ..
هذا المشروع هو فعلا ذو الفضل الأكبر في تطوير مهاراتنا وقد كان الانطلاقة الحقيقية لي لدخول سوق العمل، أتمنى أن يحقق النجاح الذي نتمناه وأمنياتي لك بالمزيد من النجاح والتميز في مسيرتك.
كل الشكر لك المهندسة العظيمة بانة، بالفعل كان العمل في هذا المشروع نقلة نوعية لنا جميعا، وماكان ليبصر النور لولا مساهماتك القيمة.
عسى ان يحقق كل النجاح، واطيب الامنيات لك ايضاً!