البرمجة التنافسية، مضيعة للوقت أم وسيلة للنجاح في مقابلات العمل؟

كتبت بواسطة Ali Ibrahim | بتاريخ الاثنين 20 نيسان 2020

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

البرمجة التنافسية وفقاً لتعريف ويكيبيديا هي "رياضة عقلية تقام عادة على الإنترنت أو ضمن شبكة محلية، متضمنة مجموعة من المتسابقين يحاولون كتابة برامج وفقاً لمعطيات محددة ومقدمة، البرمجة التنافسية مدعومة بشكل كبير من قبل الكثير من الشركات العالمية، أمثال google, Facebook... المسابقة البرمجية تتضمن بشكل عام مجموعة من المشاكل المنطقية والرياضية المقدمة للمتسابقين، والذين يطلب منهم كتابة برامج قادرة على حل كل مشكلة."[1] إضافة إلى التعريف السابق أود أن أذكر أيضاً أن المشاكل المطلوب حلها هي مشاكل تم حلها مسبقاً من قبل لجنة التحكيم وفقاً للحدود المعطاة في المشكلة، بمعنى أن المتسابقين يطلب منهم التفكير في إيجاد حلول لمشاكل لها حل مسبق، وليس كغير مسابقات يطلب فيها إيجاد حلول لمشاكل لا حل لها. 

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

  • ACM-ICPC (Association for Computing Machinery — International Collegiate Programming Contest). 
  • IOI (International Olympiad in Informatics). 
  • Facebook Hacker Cup. 
  • Google Code Jam. 
  • IEEEXtreme.


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

ماكسيم بوزدالوف أحد أفراد فريق جامعة St. Petersburg State University of IT, Mechanics and Optics الذي أحرز كأس مسابقة ACM-ICPC عام 2009 [2] أحد المشاركين في تحضير سلسلة How to Win Coding Competitions: Secrets of Champions يعمل حالياً أستاذ مساعد ورئيس قسم تقنيات الحاسوب في الجامعة، تحدث عن تجربته مع البرمجة التنافسية وعن فوائد البرمجة التنافسية من أجل إيجاد النجاح في العمل الوظيفي، وشمل هذا في خمس نقاط رئيسية: