تعتبر نفسك مطورًا؟ عليك حل مسائل أويلر

ترجمة بتصرّف لمقال:(Consider Yourself a Developer? You Should Solve the Project Euler Problems by Bennett Garner)

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

تدقيق ومراجعة: داليا شافعي

سوف أقوم بإدعاء جريء، كل مطور (أو من يرغب أن يكون) عليه أولًا حل المسائل الخمسين الأولى من مشروع مسائل (أويلر- Euler).

والعمل على مشروع مسائل أويلر له ثمار كثيرة لا يستهان بها:

ستكتشف إن كنت متمكنًا من أساسيات لغة البرمجة التي تستخدمها، حيث يمكن حل هذه المسائل بأي لغة برمجية.

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

سيكون عليك التفكير في كيفية التخزين والوصول إلى بيانات الذاكرة.

–     ستحتاج للتحليل السريع والتفكير بتعمق للتعامل مع الخوارزميات.

 في هذا المقال السريع (أقل من خمسِ دقائق)، ستكون مهمتي إثبات لمَ يجب حل مسائل أويلر في كل لغة برمجة تودّ تعلمها؟

ابدأ بالأساسيات

(فينس لومباردي- Vince Lombardi)، مدرب كرة القدم الأسطوري، الذي يستهل التدريب في كل موسم بخطابه:

«أيها السادة..» كان يقول لغرفة من لاعبي كرة القدم المحترفين، «هذه هي كرة القدم» ثم يمضي قدمًا في شرح مبادئ اللعب والفوز في اللعبة بما فيها الركض والتمرير والمناورة والتسديد.

تركيز لومباردي الصلب على الأساسيات جعلت منه أكثر المدربين فوزًا بالبطولات (خمس بطولات) أكثر من أي مدرب آخر في التاريخ.

نفس المبدأ ينطبق على تطوير البرمجيات.

أي تحدٍ برمجي سوف يختبر قدرتك على استخدام المتغيرات (variables) والجمل الشرطية (conditional statements)، والحلقات أو الدوران (loops)، وهياكل البيانات (data structures) والميزات الأخرى للغات البرمجة.

مشروع أويلر هو اختبار جدي لمدى إلمامك وتحكمك بالأساسيات. سيتوجب عليك الجمع بين العديد من تلك المبادئ بتباديل متعددة للوصول إلى حلٍ للمسائل.

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

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

تدريب على شيء يصعب تدريسه: حدس التحسين.

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

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

في بعض الأحيان الحل المباشر هو الحل الأفضل

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

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

في أوقات أخرى ستحتاج للتحسين كي تلمس مكاسب حقيقية في الأداء.

لا يمكن لدروس الخوارزميات النظرية في الجامعة أن تخبرك عن شعور الانتظار لتشغيل خوارزمية بطيئة لحل مسألة ما. 

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

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

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

سوف تصبح أكثر تمكنًا وثقة في اللغة التي تختارها

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

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

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

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

فرصة جيدة للتدرب على الوثائق البرمجية وإجراء الاختبارات

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

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

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

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

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

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

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

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

مشروع أويلر، في نقاط  

إذا قمت بحل المسائل (50 – 100) الأولى من مسائل مشروع أويلر:

ستكتسب معرفة جيدة بالمبادئ البرمجية.

ستكتسب ثقة وتمكن من بناء اللغة البرمجية التي تختارها.

ستتعلم عن تحسين الخوارزميات والأهم من ذلك حدسًا التحسين.

ستكتسب خبرة في كتابة نصوص برمجية نظيفة اعتمادًا على التوثيقات الجيدة.

توفير فرصة ملائمة للتدرب على تقنية التطوير المعتمدة على الاختبار.

امتلاك شيء مبهر يمكنك عرضه على صفحتك في (جت هب-GitHub) وفي ملفك الشخصي.

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

المصدر

أحدث المقالات
أحدث التعليقات
الأرشيف

اترك تعليقاً

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