أفضل تحديات البرمجة للمبتدئين: تمارين برمجة من السهل إلى الصعب

أفضل تحديات البرمجة للمبتدئين: تمارين برمجة من السهل إلى الصعب

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

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

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

لماذا تُنمّي تحديات البرمجة مهارات البرمجة الحقيقية؟

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

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

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

قال لي أحدهم ذات مرة إن للبرمجة قاعدة 80/20 خاصة بها، وهي دقيقة إلى حد كبير بالنسبة لمشاكل المبتدئين. فمعظمها يعتمد على نفس الخطوات الخمس: الحلقات، وعبارات if/else، والتعامل مع النصوص، وحساب العناصر في القاموس، والتنقل بين عناصر المصفوفة. بمجرد إتقان هذه الخطوات، ستجد أن الكثير من المشاكل "الجديدة" ليست سوى مشاكل قديمة مُعاد صياغتها.

أفضل تحديات البرمجة للمبتدئين

10 تحديات برمجة سهلة للمبتدئين لحلها أولاً

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

التحدي الأول: فيز باز

المهمة هي طباعة الأرقام من 1 إلى 100، ولكن كل مضاعف للعدد ثلاثة يظهر على شكل "Fizz"، وكل مضاعف للعدد خمسة يظهر على شكل "Buzz"، والأرقام التي هي مضاعفات لكليهما تظهر على شكل "FizzBuzz" بدلاً من ذلك.

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

في بايثون، بالنسبة لـ n في النطاق (1، 101): إذا كان n % 15 يساوي 0: اطبع ("FizzBuzz") وإذا كان n % 3 يساوي 0: اطبع ("Fizz") وإذا كان n % 5 يساوي 0: اطبع ("Buzz") وإلا: اطبع (n)

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

التحدي الثاني: عكس سلسلة نصية

كلمة "مرحباً" تدخل، وكلمة "أوليه" تخرج.

توجد اختصارات في معظم لغات البرمجة، مثل s[::-1] في بايثون أو split("").reverse().join("") في جافا سكريبت، ولا بأس بكتابتها مرة واحدة فقط لتجربتها. بعد ذلك، أنصحك بحذفها واستخدام النسخة التقليدية باستخدام حلقة تكرارية تضيف حرفًا واحدًا في كل مرة. هنا ستلاحظ أنه في معظم اللغات لا يمكن تغيير السلسلة النصية في مكانها، وهو ما يُربك الكثيرين لاحقًا إن لم يتعلموا هذه الخاصية هنا.

التحدي الثالث: مدقق الكلمات المتناظرة

الكلمة المتناظرة هي كلمة مثل "racecar" أو "noon" التي تُقرأ بنفس الطريقة في كلا الاتجاهين، لذلك يجب أن تقول دالتك نعم لتلك الكلمات ولا لكلمة "hello".

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

التحدي الرابع: متتالية فيبوناتشي

ربما تكون قد رأيت التسلسل من قبل: 0، 1، 1، 2، 3، 5، 8، 13، حيث يمثل كل عدد مجموع العددين اللذين يسبقانه. يجب أن تُرجع دالتك أول n عدد من هذه الأعداد.

يكفي متغيران وحلقة تكرار. تبدأ المتعة عند إعادة كتابة الكود باستخدام الاستدعاء الذاتي، بحيث تستدعي الدالة نفسها، ثم تطلب قيمة n = 35. في معظم أجهزة الكمبيوتر المحمولة، ستنتظر قليلاً، وفهم سبب ذلك يُعدّ بمثابة نظرة أولية لطيفة على البرمجة الديناميكية. إنها إحدى تلك اللحظات الصغيرة التي تُدرك فيها السبب فجأةً.

التحدي الخامس: تدوير مصفوفة

خذ مصفوفة وعددًا k، ثم حرك كل عنصر k خانة إلى اليمين، مع التفاف العناصر الموجودة في النهاية إلى الأمام. مع [1، 2، 3، 4، 5] و k = 2، يجب أن ينتهي بك الأمر إلى [4، 5، 1، 2، 3].

تفشل معظم المحاولات الأولى عندما تكون قيمة k أكبر من قيمة القائمة. تدوير خمسة عناصر بمقدار 7 هو في الواقع تدويرها بمقدار 2، وهو أمر واضح بمجرد رؤيته، بينما يكون غير مرئي قبل ذلك.

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

التحدي السادس: إيجاد أكبر عدد صحيح في مصفوفة

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

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

التحدي السابع: عد حروف العلة في الجملة

يُعدّ عدّ حروف العلة بمثابة تمرين تمهيدي. أما التمرين الفعلي فهو عدّ كل حرف علة على حدة، وإخراج نتيجة مثل {"a": 3, "e": 5, "i": 1, "o": 2, "u": 0}.

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

التحدي الثامن: مدقق الجناس الناقص

تستخدم الجناس التام نفس الأحرف بترتيب مختلف، مثل "listen" و "silent"، لذا فأنت تكتب دالة تخبرك ما إذا كانت سلسلتان مؤهلتان أم لا.

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

التحدي 9: مجموع اثنين

باستخدام قائمة مثل [2، 7، 11، 15] وهدف قدره 9، فإنك تعيد موضع الرقمين اللذين مجموعهما يساوي الهدف، وهو هنا [0، 1].

يبدأ معظم المبرمجين بحلقتين متداخلتين تُجرّبان كل زوج من العناصر، وهذا مناسب للقوائم القصيرة ولكنه يُصبح بطيئًا بسرعة. أما الطريقة الأسرع فتُخزّن الأرقام التي سبق رؤيتها في قاموس، مما يُتيح البحث عنها فورًا. ليس من قبيل الصدفة أن يضع موقع LeetCode هذه الطريقة أولًا، فهي تُظهر بوضوح أهمية بنية البيانات الصحيحة.

التحدي العاشر: لعبة تخمين الأرقام

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

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

أفضل المواقع الإلكترونية لتحديات البرمجة عبر الإنترنت

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

منصة الأفضل لـ شكل يكلف
إيدابت مبتدئون تماماً تحديات برمجية قصيرة في المتصفح المستوى المجاني
حروب البرمجة التدريب المُحفَّز بالألعاب "كاتا" مصنفة مع حلول مجتمعية حر
التمرين تعلم العادات الجيدة مسارات لغوية مع مرشدين بشريين اختياريين حر
freeCodeCamp التعلم المنظم منهج دراسي يتضمن تمارين وشهادات مدمجة حر
هاكر رانك مسارات المهارات والتحضير للوظائف مسائل قائمة على المواضيع مع تصنيفات الصعوبة مجاني للمتعلمين
LeetCode التحضير للمقابلة مسائل خوارزمية مصنفة إلى سهلة/متوسطة/صعبة المستوى المجاني
كود شيف الانتقال نحو المنافسات مسارات تدريبية بالإضافة إلى مسابقات منتظمة المستوى المجاني
مشروع أويلر محبو الرياضيات ألغاز تعتمد بشكل كبير على الرياضيات، ويتم تقديم الإجابات فقط. حر
ظهور البرمجة متعة موسمية ألغاز يومية ذات طابع قصصي في شهر ديسمبر من كل عام حر

إيدابت

لو سألني صديق من أين أبدأ، لنصحته بـ Edabit. المسائل قصيرة، وكل شيء يعمل في المتصفح، وتكتسب نقاط خبرة. يغطي البرنامج لغات برمجة مثل بايثون، وجافا سكريبت، وجافا، وسي++، وغيرها، ووصفه بأنه "سهل للغاية" يعني فعلاً أنه سهل للغاية.

حروب البرمجة

يُطلق موقع Codewars على مسائله اسم "كاتا" (وهي كلمة من فنون الدفاع عن النفس تعني التدريبات). تُصنّف المسائل من 8 كيو، وهو الأسهل، إلى 1 كيو. يكمن السرّ في الأمر بعد إرسال الحل. إذ يمكنك رؤية إجابات الآخرين، ومقارنة إجاباتك العشرة المعقدة بإجابات الآخرين المتقنة والمختصرة تُعلّمك أكثر مما تُعلّمه معظم الدروس التعليمية.

التمرين

يُدار موقع Exercism كمؤسسة غير ربحية وهو مجاني تمامًا. يتوفر الموقع مسارات لأكثر من 80 لغة برمجة، ويمكن للمرشدين المتطوعين مراجعة شفرتك البرمجية عند الطلب. يمكنك الاستمرار في استخدام المتصفح أو تنزيل التمارين على جهازك. أنصحك باختيار الخيار الثاني لاحقًا، لأنه يُساعدك على التعود على استخدام Visual Studio Code وواجهة سطر الأوامر.

freeCodeCamp

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

هاكر رانك

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

LeetCode

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

كود شيف

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

مشروع أويلر

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

ظهور البرمجة

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

ستسمع أيضًا عن Coderbyte، الذي يمزج بين التحديات ودورات المقابلات، و Topcoder، وهو مخصص حقًا للمطورين ذوي الخبرة.

تنبيه هام: لا تزال العديد من القوائم القديمة تشير إلى منصتي Google Code Jam و Kick Start. أغلقت جوجل المنصتين عام 2023، ولم يتبق منهما سوى أرشيفات المشاكل.

أفضل تحديات البرمجة للمبتدئين

كيفية ممارسة تحديات البرمجة دون الشعور بالإرهاق

لا يجعلك حفظ عشرة مواقع في المفضلة أفضل حالاً، بل العادة هي التي تفعل ذلك. إليك ما أفعله تقريباً:

  1. اختر لغة برمجة واحدة والتزم بها. عادةً ما يُختار بايثون لأنها سهلة القراءة تقريبًا كاللغة الإنجليزية. أما جافا سكريبت فهي مناسبة إذا كنت ترغب في بناء مواقع ويب.
  2. قم بتثبيت محرر أكواد حقيقي. محررات المتصفح مناسبة للأسبوع الأول. تثبيت Visual Studio Code مبكراً يعلمك كيفية تشغيل الملفات، وقراءة الأخطاء في سطر الأوامر، والتعامل مع مصحح الأخطاء.
  3. حلّ من مسألة إلى ثلاث مسائل يوميًا. ممارسة البرمجة اليومية على فترات قصيرة أفضل من الدراسة المكثفة لمدة ست ساعات يوم الأحد. تترسخ الأنماط بين الجلسات، ويصعب تخطي هدف صغير.
  4. اقرأ حلولاً أخرى بعد الانتهاء. على موقعي Codewars أو Exercism، اطّلع على إجابتين أو ثلاث إجابات أخرى. ستتعلم أفضل الممارسات وبعض الحيل الذكية التي تستحق الاقتباس.
  5. راجع المسائل القديمة. بعد أسبوع، أعد حل إحداها من الذاكرة. إذا لم تستطع، فأنت حفظتها عن ظهر قلب بدلاً من فهمها.
  6. انتقل إلى مشاريع صغيرة. حلّ ما بين 30 إلى 50 مشكلة، وابنِ شيئًا ما: قائمة مهام، تطبيق طقس على واجهة برمجة تطبيقات مجانية، لعبة مغامرات نصية. هنا تبدأ المهارات المختلفة بالعمل معًا.

ماذا تفعل عندما تواجه مشكلة في تحدي البرمجة؟

ستواجه مشكلة. حتى كبار المطورين يواجهون مشاكل قبل الغداء. لديهم روتين محدد للخروج من هذه المشكلة، لذا استعر واحداً منهم:

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

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

تحديات برمجية ذات طابع العملات المشفرة للمبتدئين في تقنية البلوك تشين

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

  • احصل على سعر عملة رقمية مباشر. استخدم واجهة برمجة تطبيقات مجانية عامة لأسعار العملات الرقمية، واطبع سعر البيتكوين الحالي، وقم بتحديثه كل دقيقة. مرحباً، طلبات HTTP و JSON.
  • تحقق من صحة تنسيق عنوان المحفظة. تأكد من أن السلسلة النصية تبدو كعنوان صحيح: الطول الصحيح، والبادئة الصحيحة، والأحرف المسموح بها فقط. تمرين رائع على التعامل مع السلاسل النصية، ومقدمة بسيطة للتعبيرات النمطية.
  • أنشئ محول وحدات. حوّل الساتوشي إلى بيتكوين (1 بيتكوين = 100,000,000 ساتوشي)، والوي إلى إيثيريوم (1 إيثيريوم = 10¹⁸ وي). ستكتشف سريعًا لماذا لا تتوافق الأرقام العشرية مع العملات، ولماذا يحتفظ المطورون بالمبالغ كأعداد صحيحة.
  • قم بتشفير سلسلة نصية باستخدام خوارزمية SHA-256. قم بتشفير جملة باستخدام مكتبتك القياسية، ثم غيّر حرفًا واحدًا، وقم بتشفيرها مرة أخرى. ستكون النتيجة مختلفة تمامًا. هذه الخاصية جزء أساسي مما يربط سلاسل الكتل ببعضها.
  • أنشئ صفحة دفع بسيطة. صفحة منتج تحتوي على زر "الدفع بالعملات الرقمية" يقوم بإنشاء فاتورة تجريبية من خلال واجهة برمجة تطبيقات بوابة الدفع.

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

ابدأ ممارسة البرمجة بمسألة واحدة اليوم

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

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

أي أسئلة؟

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

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

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

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

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

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

Ready to Get Started?

Create an account and start accepting payments – no contracts or KYC required. Or, contact us to design a custom package for your business.

Make first step

Always know what you pay

Integrated per-transaction pricing with no hidden fees

Start your integration

Set up Plisio swiftly in just 10 minutes.