في بداية مشواري لتعلم البرمجة منذ حوالي أربعة عشر سنة خلت ألح علي سؤال – ماذا سوف أستفيد منها إن كنت لا أخطط التخصص فيها؟

في الحقيقة هذا السؤال ظل يراودني طيلة فترة مراهقتي – فقد بدأت تعلم البرمجة في شتاء عام 2008 عن طريق كتاب الوزارة المتميز آنذاك والذي لا زلت أتذكر اسمه حتى هذة اللحظه: “مقدمة عن البرمجة باستخدام فيجوال بيسك دوت نت”.

كان ذلك هو أول كتاب قرأته عن البرمجة وكانت فيجوال بيسك دوت نت هي أول لغة برمجة تعلمتها في حياتي. وقتها لم أكن على دراية بأساسيات البرمجة ولم أدرس علوم الحاسب الآلي باستفاضة ولم أكن أدري ماهي هياكل البيانات Data Structures ولا الخوارزميات Algorithms ولا أنماط التطوير Software Design Patterns ولا حتى فلسفات البرمجة المختلفة سواء كانت برمجة إجرائية Procedural Programming أو برمجة كائنية التوجية Object Oriented Programming أو برمجة وظيفية Functional Programming.

كل ما كنت أعرفه آنذاك أنني أصبحت مبرمج ويالفرحتي حين قمت بتصميم وتنفيذ أول برنامج لي – لا زلت أذكر جيداً تلك اللحظات أيام ما كنت أعيش كامل اليوم داخل بيئة التطوير من مايكروسوفت Microsoft Visual Basic.Net ثم من بعدها جائت Microsoft Visual Studio ثم انتقلت بعدها لعالم البرمجة بلغة سي شارب الجميلة التي لا زالت لها مكانة خاصة في قلبي حتى هذة اللحظه.

كانت معظم برامجي في البداية بدائية جداً وكانت عبارة عن واجهة مستخدم غالباً مصنوعة باستخدام اطار العمل WinForms. كان ذلك حتى قبل Windows Presentation Foundation أو ما يعرف اختصاراً بال WPF.

لم أكن وقتها أعرف أن هناك عوالم أخرى من البرمجة – كنت في منطقة راحتي حيث إطار العمل .Net والفئات أو ال Classes التي كنت معتاد عليها وأعرف كيفية استخدامها.

ذلك كله أهلني أن أتعمق أكثر في اطار العمل WPF وأصمم قاموس عربي انجليزي وانجليزي عربي سميته Active Dictionary كان تصميمه جميلاً وكان به سمة تحمل رمزية الثورة المصرية وسمة أخرى لشهيد كلية الصيدلة فقيدنا المغدور د. أسامة السيد. كان ذلك البرنامج منذ تسع سنوات. ولكني لم أكمل مع مايكروسوفت.

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

جربت كل شيء تقريباً واستقررت على لغة البرمجة روبي فترة من الزمن – كانت فترة لا بأس بها تعلمت فيها أساسيات الويب عن طريق إطار العمل ريلز وتعلمت فيها كيف تكون اللغات مصممة بشكل جيد. إلا أن روبي كان ينقصها شيئين جعلوني أغير نظرتي لها.

  1. كانت غير مجدية خارج اطار الويب هذا أولاً.
  2. ثانياً كانت صعبه بشكل غير ضروري خصوصاً فيما يتعلق بال Meta Programming.

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

ثم وجدت ضالتي في بايثون. حقيقة لم تكن بايثون بلغة غريبة علي فقد تعلمتها قبل روبي إلا أنني لم أستخدمها كثيراً. ولكني وجدت لها استخدامات عدة جعلتني أعشقها. فهي على الرغم من كونها ليست على درجة عاليه من السرعة والكفاءه إلا أنها بسهولة تستطيع أن تدمجها مع برامج مكتوبة بالسي والسي++ لتخرج بأفضل أداء وأسرع تطوير ممكن كما هو الحال في مكتبات تحليل البيانات مثل بانداز – Pandas و نامباي – Numpy وسايباي – Scipy. مع إمكانية العمل مع مكتبات الذكاء الصناعي وتعلم الآله مثل سايكت ليرن – Scikit Learn و كيراس – Keras و تنسور فلو – Tensor Flow وباي تورتش – PyTorch وغيرها الكثير…

وكذا يمكنك دمجها مع أي برنامج من أي لغة أخرى وليكن على سبيل المثال لا الحصر لغة البرمجة راست.

وبهذا أصبح معي لغة واحدة أستطيع أن أحلل بها البيانات عن طريق مكتبات بانداز و نامباي وسايباي وأكتب بها مواقع انترنت عن طريق إطار العمل جانجو وأكتب بها واجهات رسومية عن طريق إطاري العمل تي كي Tk و كيوت Qt والعديد العديد من الإمكانيات الأخرى.

إلى أن وصلت للكتاب الذي غير من نظرتي للغة البرمجة من كونها فلسفة أتبناها إلى كونها مجرد أداه تساعدني في عملي وهو الكتاب العظيم: ميكنة الأشياء المملة ببايثون أو كما يعرف باللغة الانجليزية Automate the boring stuff with python.

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

أريد أن أجهز روتين عملي اليومي؟ أكتب له سكريبت يقوم بفتح التطبيقات التي أستخدمها.

أريد أن أفتح موقع بشكل روتيني وأقوم ببعض العمليات عليه؟ أكتب له سكريبت يقوم بذلك نتيابة عني.

أريد أن أحلل البيانات؟ أكتب سكريبت يقوم بها بشكل تلقائي بدلاً من أن أقوم بنفسي بعمل كل الخطوات على اكسل أو باور بي أي وخلافة من برامج تحليل البيانات.

إلى أن وصل بي الحال أني قد كتبت محركات تدير عمل منظمة بأكملها وتسهل عمل موقع الكتروني ضخم بحجم موقع آدم أون لاين.

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

في كل مرحلة من مراحل حياتي تعلمت تقنية ما أفادتني فبرغم أني لم أتخصص في شيء واحد وأبدع فيه إلا أنني تعلمت من كل مرحلة القليل مما يكفيني لكي أسير أموري فيها. فمثلاً أثناء رحلتي مع روبي أون ريلز تعلمت معها جافاسكريبتJavaScript و كافي سكربتCoffeeScript و تايب سكريبتTypeScript و كيفية التعامل مع ملف اعدادات موحد مثل YAML وتعلمت ال HTML و ال CSS والعديد من هجائن ال HTML مثل PUG و HAML و SLIM.

تعلمت أيضاً لغة الاستعلام الشهيرة SQL واستخدمتها مع أنظمة متعددة مثل MySql و Microsoft SQL Server و حتى Microsoft Access.

لقد كانت رحلة مليئة بالمعلومات المفيدة والقيمة التي ساهمت في تكوين شخصيتي الحالية وقدراتي الشخصية سواءاً كانت في العمل أو في الحياة اليومية.

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

ولكن الاستفادة الأعظم من البرمجة على الأقل بشكل شخصي لي أنا كانت شيئاً مختلفاً عن ذلك كله تماماً.

كانت أعظم استفادة لي هي نظرة المبرمج في حل الأمور وتحليل المشاكل.

لكي تعي ما الذي أعنية لابد أن تدرك أن المشاكل لكي يتم حلها عن طريق الكمبيوتر فلابد من عدة أشياء بديهية ولكن العديد منا عند قيامة بحل المشكلة يغفل عنها:

  1.  أولاً تحديد المشكلة.
  2. ثانياً تحديد أقصر الطرق لحل المشكلة.
  3. ثالثاً بناءاً على الأول والثاني تحديد خطوات الحل والسير عليها بحذافيرها بلا زيادة ولا نقصان.

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

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