مستخدم:X7md/البرمجة التنافسية

أثنان من أشهر المبرمجين التنافسيين، على اليسار يظهر Petr Mitrichev وعلى اليمين جينادي كوروتكيفيتش أثناء منافسة برمجية.

البرمجة التنافسية هي رياضة ذهنية تُقام عادةً عبر الإنترنت أو عبر شبكة محلية، وتشمل المشاركين الذين يحاولون البرمجة وفقًا لمعاير محددة. تعد البرمجة التنافسية شيء معروف لدى العديد من شركات البرمجيات متعددة الجنسيات والكبرى في الأنترنت، حيث تقدم تلك الشركات برامج فعاليات تحتضن رياضة البرمجة التنافسية، ومن أبرزها Google [1] وFacebook.

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

التاريخ عدل

أحد أقدم مسابقات البرمجة التنافسية المعروفة عبر التاريخ هي مسابقة البرمجة الجماعية الدولية (ICPC) التي نشأت في السبعينيات، ونمت لتشمل 88 دولة في طبعتها لعام 2011.

في الفترة بين عام 1990 إلى عام 1994 ، أدار أوين أستراشان ، وفيفك خيرا ، وديفيد كوتز واحدة من أولى مسابقات البرمجة الموزعة على الإنترنت المستوحاة من مسابقة البرمجة الجماعية الدولية (ICPC) . [2]

نظرة عامة عدل

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

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

مسابقات بارزة عدل

مسابقات الخوارزمية [3] عدل

اسم المسابقة المنظمون جمهور وصف عدد المشاركين موقع إلكتروني
مسابقة Google Code Jam (GCJ) جوجل يفتح مسابقة سنوية نظمتها ورعاها Google من عام 2003 حتى إلغائها في عام 2023. [4] 32702 (2022) [5] https://codingcompetitions.withgoogle.com/codejam
مسابقة البرمجة الجماعية الدولية (ICPC) [6] مؤسسة ICPC طالب جامعي مسابقة جماعية لطلاب الجامعات ، تتكون المسابقة من العديد من الجولات الإقليمية التي تختتم بنهائي عالمي يتم تنظيمه سنويًا. تتكون الفرق من ثلاثة طلاب من نفس الجامعة ويسمح لهم باستخدام جهاز كمبيوتر واحد فقط. 50000+ (2022) [7] https://icpc.global/
الأولمبياد الدولي للمعلوماتية (IOI) IOI طلاب المدارس الثانوية مسابقة دولية لطلاب المدارس الثانوية. ينظم سنويا منذ عام 1989. يمكن لكل دولة إرسال 4 مشاركين كحد أقصى للمنافسة. 349 من 88 دولة (2022) [8] https://ioinformatics.org/
كأس Meta Hacker ( كأس Facebook Hacker سابقًا) منصات ميتا يفتح تقام المسابقة السنوية منذ عام 2011. منظمة وبرعاية Meta ( Facebook سابقًا). 27604 (2022) [9] https://www.facebook.com/codingcompetitions/hacker-cup
Topcoder Open (TCO) توب كودر يفتح أقيمت مسابقة الخوارزمية السنوية من عام 2001 حتى إلغائها في عام 2023 [10] https://www.topcoder.com/community/member-programs/topcoder-open/

منصات على الإنترنت عدل

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

اسم وصف موقع إلكتروني
كودرهب أول منصة برمجة تنافسية باللغة العربية، مدعومة من طرف الإتحاد السعودي للأمن السيبراني والبرمجة والدرونز www.coderhub.sa
[1]beecrowd أكبر منصة برمجة تنافسية مقرها في أمريكا اللاتينية. يحتوي على أكثر من 2300 من تحديات البرمجة في 3 لغات مختلفة (الإنجليزية والبرتغالية والإسبانية) ، مصنفة في 9 فئات و 10 مستويات مختلفة من الصعوبة. تستضيف مسابقات متكررة برعاية الشركات وأنفسهم. كان يُعرف سابقًا باسم URI Online Judge. www.beecrowd.com.br
كود شيف [11] [12] تحتفظ بها Unacademy ، تستضيف مسابقة لمدة 3 أيام واثنين من المسابقات القصيرة كل شهر (واحدة على غرار IOI تسمى Lunchtime وأخرى على غرار ICPC تسمى Cook-Off) ، وتوفر منصة استضافة المسابقة للمؤسسات التعليمية مجانًا. الفائزان الأوائل في المسابقة الطويلة يفوزان بجوائز نقدية بينما يحصل العشرة الأوائل على قميص. www.codechef.com
كودكوب مسابقة برمجية سنوية للذكاء الاصطناعي تنظمها الأولمبياد الهولندي للمعلوماتية منذ عام 2003. [13] [14] codecup.nl
كود فورسيز [15] [11] مورد روسي ، تحتفظ به جامعة ITMO ، والذي يقدم في الغالب مسابقات قصيرة متكررة (تصل إلى مرتين في الأسبوع). ميزات خاصة: جميع الحلول مفتوحة المصدر ، والقدرة على التحقق من صحة حلول المتسابقين الآخرين خلال "مرحلة القرصنة" ، والمسابقات الافتراضية ، والتدريب ، إلخ. codeforces.com
codingame الألغاز (الصعوبة المتزايدة) ، لعبة غولف الكود . يستضيف مسابقات منتظمة عبر الإنترنت (تحديات الذكاء الاصطناعي ، مشاكل التحسين ). www.codingame.com
هاكر إيرث [11] بنغالور ، شركة مقرها الهند تقدم مسابقة عبر الإنترنت مثل البيئة التي تهدف إلى توفير حلول تقييم التوظيف. www.hackerearth.com
هاكر رانك يقدم HackerRank مشاكل البرمجة في مجالات مختلفة من علوم الكمبيوتر. كما أنها تستضيف مطبوعات Codesprints السنوية التي تساعد على ربط المبرمجين والشركات الناشئة في Silicon Valley. hackerrank.com
مشروع أويلر [12] مجموعة كبيرة من مسائل الرياضيات الحسابية (أي لا ترتبط مباشرة بالبرمجة ولكنها تتطلب غالبًا مهارات البرمجة لحلها). projecteuler.net
Topcoder [15] [11] شركة موارد وشركات أمريكية ، التي تنظم المسابقات وتوفر أيضًا المشكلات الصناعية كنوع من العمل الحر ؛ تقدم العشرات من المسابقات القصيرة والعديد من المسابقات الطويلة ("الماراثون") كل عام. ميزة محددة - المشاركون لديهم فرصة للتحقق من صحة حلول المتسابقين الآخرين بعد مرحلة الترميز وقبل الاختبار التلقائي النهائي (ما يسمى "مرحلة التحدي"). www.topcoder.com
onlinejudge[15] [11] يحتوي على أكثر من 4500 مشكلة للممارسة. يستضيف مسابقات منتظمة عبر الإنترنت. تم افتتاحه في عام 1995 ، وهو أحد أقدم مواقع الويب من هذا القبيل. onlinejudge.org
SPOJ [11] نظام القاضي البولندي عبر الإنترنت الذي يوفر الكثير من المشاكل للتدريب ، ويوفر منصة للمنظمين الآخرين لاستضافة مسابقات البرمجة الخاصة بهم. www.spoj.com
open kattis نسخة عامة من نظام إدارة مسابقة كاتيس ، مع أرشيف لأكثر من 2600 مشكلة. [15] تم تطوير Kattis لمساعدة دورات علوم الكمبيوتر ، ولكنها تستخدم أيضًا لاستضافة مسابقات مرموقة ، مثل نهائيات ICPC العالمية. [16] open.kattis.com
at coder مقرها في اليابان ، تقدم AtCoder مسابقات برمجة عبر الإنترنت على أساس أسبوعي. يتم تقديم المسابقات باللغتين اليابانية والإنجليزية.

اعتبارًا من عام 2020 ، تعد واحدة من أكثر المنصات شعبية من نوعها. [17]

atcoder.jp
تيموس يحتوي على مشاكل من مسابقات في منطقة الأورال. acm.timus.ru
VJudge يحتوي على مشاكل من العديد من القضاة عبر الإنترنت. vjudge.net
Baekjoon OJ قاضي كوري اون لاين. acmicpc.net
LeetCode يحتوي LeetCode على أكثر من 2300 سؤال تغطي العديد من مفاهيم البرمجة المختلفة ويقدم مسابقات أسبوعية ونصف أسبوعية. يتم تقديم مهام البرمجة باللغتين الإنجليزية والصينية. leetcode.com

الفوائد والنقد عدل

قد تؤدي المشاركة في مسابقات البرمجة إلى زيادة حماس الطلاب لدراسات علوم الكمبيوتر . كما تعمل المهارات المكتسبة في مسابقات البرمجة الشبيهة بلجنة امسابقة البرمجة الجماعية الدولية (ICPC) على تحسين الآفاق الوظيفية، حيث تساعد في اجتياز "المقابلات الوظيفية"، والتي تتطلب غالبًا من المرشحين حل مشكلات البرمجة المعقدة والخوارزميات في الحال. [15] [18]

كانت هناك أيضًا انتقادات للبرمجة التنافسية، خاصة من مطوري البرامج المحترفين. [19] إحدى النقاط المهمة هي أن العديد من مسابقات البرمجة سريعة الخطى تعلم المنافسين عادات البرمجة السيئة وأسلوب الكود (مثل الاستخدام غير الضروري لوحدات الماكرو ، ونقص تجريد OOP والتعليقات ، واستخدام أسماء متغيرة قصيرة ، إلخ. ). [20] [19] أيضًا من خلال تقديم ألغاز خوارزمية صغيرة فقط مع حلول قصيرة نسبيًا ، فإن مسابقات البرمجة مثل ICPC و IOI لا تعلم بالضرورة مهارات وممارسات هندسة البرمجيات الجيدة، حيث تحتوي مشاريع البرامج الحقيقية عادةً على عدة آلاف من أسطر التعليمات البرمجية ويتم تطويرها بواسطة فرق كبيرة على مدى فترات طويلة من الزمن. [19] صرح بيتر نورفيج أنه بناءً على البيانات المتاحة ، فإن كونك فائزًا في مسابقات البرمجة يرتبط سلبًا بأداء المبرمج في وظيفته في Google (على الرغم من أن الفائزين في المسابقة لديهم فرص أعلى في التوظيف). [21] صرح نورفيج لاحقًا أن هذا الارتباط لوحظ في مجموعة بيانات صغيرة ، ولكن لا يمكن تأكيده بعد فحص مجموعة بيانات أكبر [22]

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

مؤلفات عدل

  • Halim, S., Halim, F. (2013). Competitive Programming 3: The New Lower Bound of Programming Contests. Lulu.
  • Laaksonen, A. (2017). Guide to Competitive Programming (Undergraduate Topics in Computer Science). Cham: Springer International Publishing.
  • Kostka, B. (2021). Sports programming in practice. University of Wrocław.

أنظر أيضا عدل

  • الفئة: مسابقات علوم الحاسب
  • كود جولف
  • هاكاثون

مراجع عدل

  1. ^ "Google Code Jam". google.com. اطلع عليه بتاريخ 2016-02-20.
  2. ^ Khera، Vivek؛ Astrachan، Owen؛ Kotz، David (1993). "The internet programming contest" (PDF). ACM SIGCSE Bulletin. ج. 25 ع. 1: 48–52. DOI:10.1145/169073.169105. ISSN:0097-8418.
  3. ^ Kostka، Bartosz (2021). Sports Programming in Practice (PDF). University of Wrocław.
  4. ^ "Celebrate Google's Coding Competitions with a final round of programming fun". Google Developers Blog. Google. اطلع عليه بتاريخ 2023-02-28.
  5. ^ "Code Jam - Google's Coding Competitions". Coding Competitions (بالإنجليزية). Retrieved 2023-02-26.
  6. ^ "ICPC". icpc.global (بالإنجليزية). Retrieved 2023-02-26.
  7. ^ "ICPC". icpc.global (بالإنجليزية). Retrieved 2023-02-26.
  8. ^ "Olympiads". stats.ioinformatics.org. اطلع عليه بتاريخ 2023-02-26.
  9. ^ "Meta Hacker Cup - 2022 - Qualification Round". www.facebook.com. اطلع عليه بتاريخ 2023-02-26.
  10. ^ "FAQ - Topcoder Community Town Hall with Doug Hanson, Topcoder CEO". Topcoder (بالإنجليزية). Retrieved 2023-02-28.
  11. ^ أ ب ت ث ج ح Luigi، William Di؛ Farina، Gabriele؛ Laura، Luigi؛ Nanni، Umberto؛ Temperini، Marco؛ Versari، Luca (2016). "oii-web: an Interactive Online Programming oii-web: an Interactive Online Programming Contest Training System" (PDF). Olympiads in Informatics. ج. 10: 207–222. DOI:10.15388/ioi.2016.13.
  12. ^ أ ب Combéfis، Sébastien؛ Wautelet، Jérémy (2014). "Programming Trainings and Informatics Teaching Through Online Contests" (PDF). Olympiads in Informatics. ج. 8: 21–34.
  13. ^ Lasse Hakulinen. Survey on Informatics Competitions: Developing Tasks – Olympiads in Informatics, 2011, Vol. 5, 12–25.
  14. ^ Wevers، Lesley (2014). "Monte-Carlo Tree Search for Poly-Y" (PDF). University of Twente. مؤرشف من الأصل (PDF) في 2017-04-13. اطلع عليه بتاريخ 2018-09-16.
  15. ^ أ ب ت ث ج Bloomfield، Aaron؛ Sotomayor، Borja. "A Programming Contest Strategy Guide" (PDF). SIGCSE '16: Proceedings of the 47th ACM Technical Symposium on Computing Science Education. وسم <ref> غير صالح؛ الاسم "sigcse16" معرف أكثر من مرة بمحتويات مختلفة.
  16. ^ Enström, E.؛ Kreitz, G.؛ Niemelä, F.؛ Söderman, P.؛ Kann, V. (2011). "Five years with Kattis – using an automated assessment system in teaching" (PDF). IEEE Frontiers in Education Conference.
  17. ^ Mirzayanov، Mike؛ Pavlova، Oksana؛ Mavrin، Pavel؛ Melnikov، Roman؛ Plotnikov، Andrew؛ Parfenov، Vladimir؛ Stankevich، Andrew (2020). "Codeforces as an Educational Platform for Learning Programming in Digitalization" (PDF). Olympiads in Informatics. ج. 14. ISSN:1822-7732.
  18. ^ Jackson، Dean (1 ديسمبر 2013). "The Google Technical Interview. How to Get Your Dream Job" (PDF). XRDS: Crossroads, the ACM Magazine for Students. ج. 20 ع. 2: 12–14. DOI:10.1145/2539270.
  19. ^ أ ب ت ث Smith، Duncan (2 ديسمبر 2015). "The Competitive Programming Debate". وسم <ref> غير صالح؛ الاسم "rg15" معرف أكثر من مرة بمحتويات مختلفة.
  20. ^ Halim، Steven. "CS3233 - Competitive Programming". NUS School of Computing.
  21. ^ "Winning at programming competitions is a negative factor for being good on the job". YouTube. 5 أبريل 2015.
  22. ^ "HN discussion on correlation between job performance and competitive programming". ديسمبر 2020.

روابط خارجية عدل