مقابلة مع خبير حول البرمجة التنافسية ومسابقات البرمجة

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

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

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

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

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

محمود أهلًا بك، هلا قمت بالتعريف عن نفسك لقراء الرابحون.

أهلًا بك علي، أنا محمود صلاح في السنة الرابعة من كلية الحاسبات و الذكاء الاصطناعي، جامعة القاهرة. شاركت في العديد من مسابقات البرمجة، وتأهلت هذه السنة إلى مسابقة ACPC -Africa and Arab Collegiate Programming Championship-.

وشاركت في مسابقة جوجل Hash Code أنا وفريقي، واستطعنا أن نحرز المركز الثالث على مصر من بين أكثر من 200 فريق مشارك، والمركز الـ 204 عالميًا من بين أكثر من 10 آلاف فريق مشارك، كما شاركت في العديد من مسابقات البرمجة الأخرى.

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

ما هي البرمجة التنافسية Competitive Programming وما علاقتها بمسابقات البرمجة؟

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

هذه المسائل عادة ما تكون متعلقة بالرياضيات والهندسة، وفي بعض الأحيان قد تتعلق بمشكلة نريد حلها على أرض الواقع باستخدام الحاسوب و الخوارزميات.

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

ولكونها ممتعة للغاية فإن الكثير منا يقضون الكثير من الوقت في التدرب عليها، فلا تتعجب لو وجدت أن بعض الأشخاص في المجال يتدربون لـ 9 أو 10 ساعات في اليوم.

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

مسابقات البرمجة هي الوجه الآخر لعملة البرمجة التنافسية أو قل إنها التطبيق العملي لها.

اقرأ أيضًا: أفضل مواقع تعلم البرمجة الأجنبية والعربية (مصادر موثوقة)

ما الفرق بين البرمجة التنافسية Competitive Programming والبرمجة العادية التي نعرفها؟

البرمجة التنافسية Competitive Programming هي جزء من العالم الأكبر للبرمجة، فهما الاثنان يشتركان في كل شيء تقريبًا عدا أن البرمجة التنافسية Competitive Programming يكون لها أهداف وأولويات مختلفة.

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

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

كما أن التوقيت واحد من أهم العوامل التي تفرق بين البرمجة التقليدية والبرمجة التنافسية Competitive Programming، ففي البرمجة التقليدية لا يكون وقتك محدودًا مثل ما يحدث في البرمجة التنافسية حينما يكون عليك حل المشكلة برمجيًا وكتابة الكود في فترات زمنية قصيرة للغاية.

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

اقرأ أيضًا: أنواع البرمجة الإلكترونية (Programming Paradigms)

ما فائدة البرمجة التنافسية Competitive Programming؟ ولماذا تقوم الشركات التقنية الكبرى بإقامة مسابقات البرمجة؟

البرمجة التنافسية Competitive Programming مفيدة للغاية لأي مبرمج، فهي تستطيع إعطائه بعض المهارات التي لا يمكن الحصول عليها بسهولة بدونها.

وهذه المهارات هي:

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

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

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

العمل الجماعي: عادة ما تكون مسابقات البرمجة جماعية، حيث تتنافس الفرق مع بعضها البعض، وذلك ما يجعل المبرمج يعتاد على العمل ضمن فريق.

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

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

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

وهناك عدد كبير من مسابقات البرمجة الشهيرة تكون مدعومة من شركات التقنية الكبرى، على سبيل المثال: مسابقة Code Jam الخاصة بجوجل ومسابقة Hacker Cup الخاصة بفيسبوك.

اقرأ أيضًا: أكبر شركات التكنولوجيا في العالم (العشرة العمالقة)

هل البرمجة التنافسية Competitive Programming ومسابقات البرمجة للعباقرة فقط أم أنه يمكن لأي شخص أن ينجح في هذا المجال؟

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

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

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

لذا لا تدع فكرة قلة معرفتك بالمجال تعيقك، وعامة فإن مع التدريب يمكن لأي شخص أن ينجح في مجال البرمجة التنافسية.

اقرأ أيضًا: أفضل كتب تعلم البرمجة (دليلك الشامل للتعلم من الكتب)

هل مسابقات البرمجة للمبرمجين فقط الذي يدرسون أو درسوا في كليات الحاسبات والهندسة؟

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

فهناك مسابقات برمجة لطلبة المدارس ك EOI والـ IOI، وهناك مسابقات برمجة لطلبة الجامعات، مثل: ECPC و ACPC  و ICPC.

كما أن هناك مسابقات برمجة عامة، مثل مسابقات CodeHash و Code Jam الخاصة بجوجل وغيرها من المسابقات.

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

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

اقرأ أيضًا: تعلم لغة البايثون: كل المصادر والمعلومات التي تحتاجها

ما هي المهارات المطلوبة للبرمجة التنافسية؟ وكيف يتدرب أو يؤهل الشخص نفسه لمسابقات البرمجة؟

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

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

كما أن هناك مدربين مشهورين يساعدون الطلبة على تعلم البرمجة التنافسية وكيفية الالتحاق بالمسابقات؛ مثل المدرب محمد عبد الوهاب الذي يُعد من أشهر المدربين في الوطن العربي.

توجد على الإنترنت العديد من المواقع التي تقدم لك مئات وآلاف المسائل والمشكلات لحلها، مثل: Codeforces و HackerRank والعديد غيرها.

وبإمكاني أن أقدم للمبتدئين بعض الخطوات التي ستمكنهم من اقتحام هذا العالم، وهي:

  1. تعلم أي لغة برمجة (ويفضل لغة C++ أو Java).
  2. تعلم أساسيات الرياضيات.
  3. التعرف على الخوارزميات وهياكل البيانات Data Structures.
  4. التدرب…. التدرب….. التدرب.

اقرأ أيضًا: تعلم الذكاء الاصطناعي (كل المصادر والمعلومات التي تحتاجها)

كيف سيستفيد الشخص من البرمجة التنافسية ومسابقات البرمجة؟

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

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

وهناك آخرون يدخلون مسابقات البرمجة بهدف أن يصيروا مبرمجين أفضل خاصة في استخدام الخوارزميات وبنيات البيانات.

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

 لكي تستفيد منها ويظهر أثرها عليك، يجب أن تكون ملتزمًا بممارستها لفترة معقولة، هذا في البداية.

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

اقرأ أيضًا: دليلك الكامل لتعلم لغات تطوير الويب الأساسية

هل ضروري للعمل في الشركات الكبرى كجوجل وأمازون وفيسبوك أن يربح المبرمج في هذا المسابقات أو أن يشترك فيها ويحصل على ترتيب مرتفع؟

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

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

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

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

ويجب أن أنبه هنا على شيئين قد تؤثر من خلالهم مسابقات البرمجة عليك بالسلب، خاصة في العمل لدى الشركات الكبيرة، وهما:

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

التفكير في السيناريو الأسوء: يجب أن تفرق بين العالم الحقيقي والمشاكل الخاصة به وبين المشاكل المُتخيلة الخاصة بمسابقات البرمجة.

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

موضوعات أخرى ستعجبك

عن الكاتب

1 فكرة عن “مقابلة مع خبير حول البرمجة التنافسية ومسابقات البرمجة”

اترك تعليقاً

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

Scroll to Top