البروبليم سولفينج هو مهارة زي أي مهارة تقدر تنمِّيها مع التدريب، وكل ما تطوَّرها، مستوى تفكيرك بيزيد، وده بيفرِق مع سرعتك وكفاءتك في الشغل.
شركات كتير حاليًا، أبرزهم FAANG مثلًا، بقت تعتمد في الانترفيو بتاعها على البروبليم سولفينج.
هتبدأ تشوف المشاكل بشكل منظم وتحلِّلها خطوة بخطوة، وده بيساعدك تكون أسرع وأفضل في كتابة كود مُتقن كمبرمج.
وكمان بعيدًا عن البرمجة، هي مهارة مهمة في حياتك اليومية، لأن لما تجيلك مشكلة هتعرف تحلِّلها وتُقسِّمها لمشاكل أسهل تقدر تحلّها.
حاجة كمان، البروبليم سولفينج بيعلمك تفكر بطريقة منظمة وسريعة، وده بيساعدك تطرح حلول أسرع وتشتغل على مشاريع أكبر بثقة، لأنك فعلًا هتكون اتدربت كتير وحلِّيت مشاكل كتير، وده بيخلِّي الأمور أسهل وأحسن.
كلنا عارفين ان ده تدريب problem solving فـلو ده هدفك بس ،، فمش ديه الطريقة الوحيدة انك تخش الــ Community ،، ممكن تقرأ كتب زي"“Cracking the coding interview و تتعلم Data-structures and Algorithms وتنمي مهارة الـ Problem Solving عندك.
و لو مشيت بالطريقة ديه فــانت بتتعلم فعلا و بتكونKnowledge كويسة لكن بيبقي ناقصك حاجة مهمة و هي الـ Practice و ديه حاجة بتميز مسابقات البرمجة لأنك بتخليك تطبق علي اللي بتتعلمه و لأن مسابقات البرمجة بتعتمد بشكل اساسي علي الـ practice.
و ده هيبان من خلال الـ Training طول الـ Season إن شاء الله. و لو انت بتتعلم بس مش غيرPractice للأسف مش هيبقي ليك مكان في مسابقات البرمجة.
طب ايه مميزات الـ CP؟
مهارة الـ تفكير بشكل منظم (Algorithmic Thinking) و ازاي ننميها.
مهارة كتابة الـ Code بسرعة و الـ Debugging و الـ Testing Skills.
الــ Accuracy مهم جدا لأنك بتحاول دايما تكتب كود صح و بيأدي الـ Task بشكل صحيح لأن في مسابقات البرمجة الغلطات بتفرق في ترتيبك.
مهارة الـ Teamwork أغلب مسابقات البرمجة بتبقي فرق مكونة من 3 افراد و علي جهاز واحد فلو متدربتش علي المهارة ديه للأسف عنصر مهم جدا بيفرق في سوق العمل لأنك اغلب الوقت بتشتغل في شركات مع ناس فلازم تعرف تتعامل معاهم بشكل كويس.
التفكير تحت ضغط و عشان هي مسابقة ف بيبقي ليها وقت محدود مطلوب منك عدد مشاكل تحلها.
تنظيم وقتك ،، بتتعلم تنظم وقتك جوا المسابقة ازاي.
مش بتكتب Code و خلاص لا انت بتهتم بالــ Time اللي بياخدة الكود عشان يتعمله Run و الـ Space اللي محتاجها لانها بيبقي فيها Limits.
دي بقى نقطة مهمة أوي عشان ميحصلش خلط .. كنا قولنا فوق ان تركيزنا موجه ناحية البرمجة التنافسية والمسابقات لكن محتاجين نوضح الاول الفرق بين البرمجه التنافسيه CP و حل المشكلات Problem Solving باختصار البرمجة التنافسية هي رياضة بيتنافس فيها المبرمجين ضد بعضهم لحل أسئلة البرمجة في مدة زمنية محدودة. بيتم تحكيم النتائج بناءً على عدد الأسئلة المحلولة والوقت المستغرق في حل المشكلات وعوامل تانيه ، زي الــ Time, Memory (الوقت اللي بياخده الكود عشان يــ run و المساحة اللي هياخدها الكود).
من ناحية تانية حل المشكلات هو مفهوم أوسع يتضمن إيجاد حلول للمشكلات باستخدام التفكير الحاسوبي computational thinking أو بالبلدي كدا إنك تعمل برامج وتكون مبرمج.
انت كمبرمج الضروري بالنسبة ليك التانية اللي هي البروبلم سولفينج بس وتحاول تنمي مهاراتك وتقوي نفسك فيه طول ما انت شغال في البرمجة .ودي انت محتاج level 0 , level 1 عشان تبقى كويس لكن في البرمجة التنافسية انت بتحتاج تحتك بخوارزميات أعقد وتفهمها بشكل كويس وصداع بقى وتركيز وتدريب مكثف كإنك بتمارس رياضة معينة وطبعًا دا بيجي بنتايج رايقة عليك كمبرمج مش محتاج أقول يعني.
طب انت ايه اللي هيحدد الكود بتاعك صح ولا غلط؟ هل انت لو طلع نواتج صح هتقول دا كدا فل أوي وتمام .. لول مكنش حد غلب لأن ممكن يكون في حاجة غلط ومش باينة في الكود وبيطلع نواتج صح لكن حاجات تانية تطلع غلط ,, فلازم طبيعي يكون في حاجة تقولك الكود دا صح Online Judegesدور الــ
و دي بتكون عبارة مواقع بتشوف الكود بتاعك صح ولا غلط و بيتم تنظيم مسابقات البرمجة عليها, و تقدر تتدرب عليها لمسابقات الـ PS و الـ CP و ديه أمثلة لأشهر المواقع Codeforces, AtCoder, Leetcode, Codechef, ..etc.
بتسمح لينا ان احنا نركز أكثر على المفاهيم البرمجية و البروبليم نفسها بعيدا عن أي تعقيدات او مفاهيم إضافية أنت مش محتاجة دلوقتي في التدريب.
اللغة حسب معدل استخدامها فهي اسهل و اكثر اختصارا عن لغات تانية زي الـ جافا و الــ Time اللي بياخده الكود عشان يشتغل هو اسرع بفرق كبير جدا عن لغات ممكن تكون سهلة بس بتاخد time كبير عشان تعمل execution ل كود زي بايثون مثلا و ده بيساعدك على حل المشكلة نفسها بدون الدخول في مشاكل بعض اللغات اللي ممكن يكون ليها حلول طويلة و بعضها ملهاش حلول.
لو بصينا للــ Top Coders على مستوى العالم هتلاقي أغلبهم بيحل الــ CPP.
غير ان فيه مصادر كتير تساعدك في التدريب سواء شرح مواضيع منها Algorithms و Data Structure أو حل بالــ CPP.
غير ان فيه حاجات تانية الــ CPP بتوفرها ليك و تختصر عليك وقت هتعرفها في التدريب و احنا ماشيين إن شاء الله.