أي برمجة

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

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

لو أخذنا مثال محرك الألعاب، سنرى أن محرك الألعاب نفسه فيه أجزاء كثيرة يبرمجها عدة أشخاص. أحدهم متخصص في برمجة رسوم الحاسوب computer graphics، و آخر يبرمج نظام الصوتيات، و غير يبرمج نظام الاتصال بالشابكة. محركات الألعاب نفسها يستخدمها مطورو الألعاب، و المطور كلمة تشمل مبرمج الألعاب، التي يكتب برنامج اللعبة.

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

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

نأتي بعدها إلى لغات البرمجة. لغات البرمجة نفسها مستويات، أيها أقرب للفهم البشري أكثر من الآلة، ولغات البرمجة على خلاف لغات التجميع assembly التي كل واحدة خاصة بمعالجات خاصة. منطق لغات البرمجة يخفي تفاصيل يضطر مبرمج لغات التجميع التعامل معها مثل المسجلات registers و عناوين الذاكرة memory address. بعض اللغات موجهة لمنصات دون غيرها، لغات موجهة للشابكة، و أخرى لسطح المكتب (و سطح المكتب يشمل الحواسيب بأشكالها و بعضها يمتد للهواتف)، و أخرى عابرة لكل المنصات.

لغات البرمجة ليست الشيء الوحيد المهم، بل لدينا أطر العمل framework. إطار عمل مطلوب في السوق أكثر من غيره…

هل انتهيت؟ لا، لكن أكتفي بما ذكرت. لن أتطرق لبرمجة الإلكترونيات، فهو الآخر له تعقيداته. لكن الهدف من كل هذا أن نحدد أي مجال في البرمجة نقصد عند الحديث عن البرمجة. أقرب مثال هو الطب. في الطب تخصصات كثيرة مثل الأسنان و العظام و الأعصاب والعيون و غير ذلك من مجالات الطب. صحيح لدينا الطبيب العام، لكن لدينا الطبيب المتخصص في المجالات السابق ذكرها. البرمجة واسعة كالطب و ربما أكثر بكثير.