يعني إيه هاكاثون؟

Saturday, February 22, 2014

يعني إيه مسابقة برمجة؟

دي مسابقة بتتعمل على الإنترنت، بيقوم فيها المشاركين بعمل برامج وفق متطلبات محددة بتعلن مسبقا. في شركت عالمية كبيرة في مجال التكنولوجيا بتدعم المسابقات دي، زي جوجل و فيسبوك و آي بي إم، وفي هيئات بتستضيف المسابقات دي بشكل دوري. عادة المضيف عن مجموعة من المسائل المنطقية والرياضية للمتسابقين، اللي بدورهم لازم يكتبوا كود يحل المسائل دي. الحكم النهائي على المتسابق بيكون من خلال عدد المسائل اللي حلها والوقت اللي بياخده المتسابق علشان يكتب كود لحل المسائل (وطبعا لازم يكون حل صحيح). ممكن كمان يتاخد عوامل إضافية في الاعتبار عند التقييم، زي الوقت اللي بياخده البرنامج علشان يتنفذ، حجم البرنامج، شكل المخرجات، إلخ.
من أشهر المسائل اللي بتيجي في المسابقات دي مسائل ال combinatorics، number theory، graph theory، geometry، string analysis، data structures، and artificial intelligence.
المتسابقين عادة بيعملوا حاجتين أساسيتين علشان يحلوا المسائل دي: أولا لازم يصمموا ألجوريثم كويس لحل المسألة (زي المثال في الصورة أدناه)، وثانيا يكتبوا الألجوريثم ده بلغة برمجة (وممكن يكون اختيار اللغة مفتوح أو محدد مسبقا من المنظمين للمسابقة).

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

أنواع المسابقات

مسابقات ليها مدة زمنية محددة

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

مسابقات ممتدة

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

يعني إيه هاكاثون؟

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

مين المسؤول عن تنظيمه؟

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

إيه اللي بيحصل في الهاكاثون؟

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

أنواع الهاكاثون

هاكاثونز لأنواع تطبيقات معينة

زي تطبيقات الموبايل، أو الويب، أو تطوير الألعاب. في هاكاثونز لتطبيقات موبايل على أندرويد بس، أو iOS بس. بل إن في هاكاثونز مثلا لتطبيقات ال bioinformatics.

هاكاثونز للغات برمجة أو APIs معينة

زي HTML5 و Ruby on Rails، وزي الهاكاثونز اللي بتعملها شركات زي ياهو وجوجل وفورسكوير (Foursquare) لاستخدام ال APIs بتاعتها.

هاكاثونز بتخدم قضية معينة

زي ال Educational Hack Day  للتكنولوجيات اللي تخدم عملية التعليم، وال Random Hacks of Kindness اللي بترعاه شركات كبيرة زي جوجل وياهو ومايكروسوفت، وهدفه تقديم حلول لمشاكل مجتمعية زي الفساد وإدارة الأزمات والاقتصاد والزراعة وتأمين الغذاء وشفافية الحكومة وترشيد استهلاك الطاقة والمياه والتخطيط العمراني. وده بيتعمل كل سنة في مدينة وممكن يبقى له ثيم محدد في بعض الأوقات.

هاكاثونز لفئات عمرية معينة

زي الهاكاثون لطلبة الإعدادية، وهاكاثونز لطلبة الجامعة، واللي من أشهرها هاكاثون ال MIT، واللي ممكن أي طالب جامعة يشارك فيه (بس بيسافر على حسابه)

هاكاثونز داخلية

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

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

* المقال مأخوذ بتصرف من مقالات ويكيبيديا اللي بتشرح نظام مسابقات الكمبيوتر ومشار إليها بالرابط في العناوين.