كيف تستعد للبرمجة التنافسية؟

هكذا ربحت 3 ميداليات ذهبية في أولمبياد الحاسبات.

التعديل الأخير: لقد تأهلت للنهائيات العالمية لجوجل HashCode 2017 ، أكبر مسابقة حسابية نظمتها Google.

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

بعد يومين من المنافسة ، جاءت النتائج: لقد فزت بالميدالية الذهبية.

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

أعرف ما الذي جلب لي النجاح وأريد أن أشارككم هذا.

ما اللغة التي يجب أن تختارها؟

  1. C ++ - موصى به للغاية! انها سريعة جدا. يستغرق تنفيذ خوارزميات مختلفة وقتًا قليلًا بسبب STL. تم قبول C ++ في جميع المسابقات. لقد كنت أستخدمه منذ السطر الأول من الشفرة.
  2. C - اذهب وتعلم C ++ بسبب STL. إذا كان لديك معرفة بـ C ، فأنت جاهز للتشفير في C ++ أيضًا.
  3. جافا - إنها بطيئة. لكن لديها فئة Big Integer ، حتى إذا كانت هناك مشاكل قليلة جدًا تتطلب استخدامها. إذا كان الحد الزمني ضيقًا ، فستتجاوز الحد الزمني. لم يتم قبول Java في جميع المسابقات.

أين يمكنك ممارسة؟

أوصي Sphere Online القاضي (SPOJ). إنه فعال من حيث الجودة والكمية. تتوفر المقالات الافتتاحية والحلول عبر الإنترنت إذا واجهتك مشكلة أثناء حل المشكلات. دعم مواقع الويب SPOJ Toolkit و Problem مصنف لـ SPOJ.pl.

أولاً ، عليك أن تتقن الأساسيات.

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

يجب عليك العثور على أسلوب الترميز الخاص بك لأنه خاص بك.

وتذكر هذين المبدأين أثناء تطوير أسلوب الترميز لديك.

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

هنا هو أسلوبي الترميز.

كيفية تعزيز مهارات التنفيذ الخاصة بك؟

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

لا تقل "هذه المشكلة صعبة للغاية بالنسبة لي ، سأحاول المشكلة التالية". هذه هي العقلية الخاسرة.

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

نتائج هذا النهج؟ تنفيذ سريع. وتعلم المشاكل والخوارزميات الكلاسيكية.

ثانيا ، عليك أن تتقن الخوارزميات وهياكل البيانات.

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

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

ابدأ باستخدام الخوارزميات الأساسية وهياكل البيانات.

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

إذا كنت تعمل مشاكل سهلة ، فلن تصبح أفضل حالًا.

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

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

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

الآن حفر أعمق في كل موضوع رئيسي.

هنا مورد هائل له أفضل 10 خوارزميات وهياكل البيانات في كل موضوع. بعد هذه المشاكل الـ 250 من SPOJ ، ستعرف الكثير من تلك القائمة. ولكن لا يزال هناك الكثير الذي لم تسمع عنه. لذلك ابدأ في تعلمهم بترتيب تصاعدي.

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

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

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

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

وهذا شيء جيد. لأنه إذا فهمت حقًا موانئ دبي ، فستفوز.

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

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

اعمل بجد.

هل سمعت يومًا عن الرياضيين الذين يفوزون بالأولمبياد بدون سنوات من الممارسة؟ ليس لدي.

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

كل يوم في هذه الأشهر الثمانية ، كنت أمارس 5 ساعات.

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

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

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

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

جربه بنفسك. يبدو وكأنه السحر.

لقد بدأت مدونة فيديو

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

العمل الذكي.

هذا هو سر النجاح. تحتاج الأهداف.

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

كيف يمكنك التغلب على التسويف؟

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

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

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

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

كيفية تصحيح فعال؟

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

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

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

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

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

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

وجدت هذا المنصب مفيد؟ يرجى الضغط على زر below أدناه! :)

نبذة عن الكاتب

Andrei Margeloiu هو مبرمج عاطفي مهتم في ريادة الأعمال والشركات الناشئة والطبيعة. يمكنك التواصل معه على LinkedIn.