Site Loader
الموقع الرئيسي
البرمجة التنافسية

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

وينبغي توضيح بعض المفاهيم قبل الانطلاق إلى البرمجة التنافسية وسنبدأ بالخوارزميات:

الخوارزميات والخوارزمية البرمجية:

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

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

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

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

تعريف البرمجة التنافسية:

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

الخوارزميات

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

الخبرات التي تقدمها البرمجة التنافسية للمتعلم:

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

ستيف جوبز

أهميتها في سوق العمل:

تكمن أهمية البرمجة التنافسية في سوق العمل من خلال اكتساب متعلميها المرونة والقدرة على التفكير وحل المشكلات بالشكل الأمثل، وهي ميزات تفضل الشركات وجودها لدى موظفيها، فامتلاك تلك المهارات يساهم في خلق بيئة عمل احترافية وناجحة، وهو السبب الذي أدى لتزايد اهتمام الشركات العالمية بمجال البرمجة التنافسية، حيث تعلن شركة Google عن مسابقة سنوية تدعى Code jam على منصة ويب خاصة، عدا عن شركات مثل Microsoft و Facebook ممن يحضرون فعاليات المسابقات البرمجية، ويقومون بمراقبة المشاركين لاختيار موظفين منهم، ولعل أشهر من تم اختياره من العالم العربي المتسابق أحمد علي، الموظف السابق في Google ومؤسس موقع A2 Online Judge لحل المسائل البرمجية.

النشاطات الأكاديمية:

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

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

مسابقة البرمجة

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

قصة نجاح:

يعد الروسي Gennady Korotkevich من أهم الأسماء في هذا المجال، وهو المبرمج صاحب التقييم الأعلى في رياضة البرمجة التنافسية حسب مواقع عديدة مثل: CodeChef, Codeforces, HuckerRank وغيرها، بدأ Gennady بالاهتمام بعمل والديه بالبرمجة في السادسة من عمره، وفي الثامنة صمم له والده لعبة ليستخدمها في تعلم البرمجة، وفي عمر الحادية عشر نافس للمرة الأولى في الأولمبياد البرمجي وحصل على الميدالية الفضية، ونال الميدالية الذهبية بعد ذلك منذ عام 2007 حتى عام 2012، كما فاز بالمسابقة البرمجية ACM ICPC في عامي 2013 و 2015، وفاز أيضاً ب Facebook Hacker Cup و Google Code Jam و غيرها، ولما سُؤِل عن نجاحاته قال “أجرب العديد من الاستراتيجيات، أحدها صحيحة، أنا لست عبقرياً أنا فقط مثابر!”


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

بعض المراجع المفيدة:


تحرير: غيث عباس
تصميم: راسم السلطي


كاتب المقال: كوزيت كوزي

طالبة في السنة الخامسة قسم هندسة الحواسيب و الاتمتة

تابعوني على:

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

Copy link
Powered by Social Snap