jeudi 20 septembre 2012

Concours de Programmation (Programming Competition)

Les concours de programmation (Hacking ou Programming Contest) sont des compétitions créés autour de la programmation des ordinateurs, des algorithmes, des structures ou des traitements de données.

Les candidats (hackers, competitors, coders) participent à ces concours pour différentes raisons mais tout le monde s'accorde à dire que le principal apport de ces activités consiste en l'apprentissage et la maîtrise de la programmation informatique. Cette forme d'activité présente un double aspect, à savoir, le côté éducatif et le côté professionnel: elle permet de faire valider, au niveau international et en toute transparence, ses compétences en programmation informatique.

Parmi les retombées positives de la participation à ces activités, on peut notamment citer :

  • La communauté : les plateformes permettent d'échanger, communiquer avec tous les programmeurs du monde entier- dont les meilleurs mondiaux ou ceux travaillant pour les plus grandes entreprises. 
  • Les opportunités professionnelles : la validation de la compétence au niveau de ces concours permet à ses participants de faire valoir leurs réussites- qui peuvent être confirmées publiquement et en toute transparence au niveau des plateformes- dans leurs activités professionnelles : recrutement, justification de compétences pour les clients. 
  • Les ressources : l'accès aux différentes plateformes dotent les participants d'une source de documentation importante et exclusives à la communauté. 
  • Les récompenses : l'attribution des récompenses pourrait représenter le meilleur attrait pour ce genre d'activité. La portée et l'ouverture mondiale des compétitions peuvent néanmoins décourager les moins téméraires: beaucoup de candidats mais très peu d'élus
Sur le plan pratique, les concours de programmation sont généralement ouverts, disponible en ligne et acceptent un grand nombre de language de programmation. Je vous présente ici quelques unes de ces plateformes (celles auxquelles je participe) : 


TopCoder est la plus grande communauté de professionnel du web du monde entier. Elle est d'ailleurs la meilleure implémentation du concept "Open Innovation",où l'innovation est mise en valeur par le mode de compétition. Les concours organisés sur cette plateforme concernent tous les aspects de l'ingénierie web et pour la programmation, il expose principalement deux types de concouts : les SRM (Single Round Match)- concours de courte durée (75 min)- et les MM (Marathon Match), des concours plus élaborés portés sur l'analyse de données, la programmation, l'intelligence artificielle ou encore les Learning Machines. 

CodeChef est une plateforme installée en Inde et propose mensuellement deux types de concours : les Long Contest (10jours)- généralement du premier au dix du mois- et les Short Contest (Cook-Off, 2h30min), vers la troisième semaine. 
Les problèmes ne sont pas classées ni notés selon leurs difficultés, contrairement à la pratique générale des autres plateformes. 

CodeForces, disponible en version anglaise et russe, représente en quelque sorte la mise en oeuvre du modèle Programming Competition par la très grande et impressionnante communauté russe en matière de programmation informatique. Elle organise régulièrement des compétitions de courte durée (2h). 

InterviewStreet est une startup d'origine indienne, propulsée par YCombinator, qui propose une plateforme pour mettre en relation les programmeurs et les recruteurs (Startups, compagnies informatiques) en mettant en oeuvre des concours de programmation réguliers destinés à évaluer les codeurs. Elle met à la disposition permanente des codeurs une série de Challenges pour des solutions élaborées, et organise des CodeSprint (2h-1j) selon les besoins précis des recruteurs. 

HackerRank est un autre produit de InterviewStreet, et diffère de ce dernier par le fait qu'elle accorde une importance particulière à la compétition entre programmeurs. Il s'agit de problèmes de programmation aucours desquels chaque programmeur-ou plus précisémment, ses codes-est amené à affronter les travaux des autres programmeurs. 


SPOJ présente la plateforme qui supporte le plus nombre de language de programmation, et se distingue par le nombre important de problèmes disponibles : Classics, pour les problèmes à résultats précis, Challenges qui requierent des solutions plus élaborées, ainsi que des Tutoriaux particulièrement éducatifs. 

ProjectEuler est une plateforme de programmation qui met un accent particulier aux connaissances mathémathiques. Il souffre néanmoins d'un principal handicap dans la mesure où les candidats n'ont pas l'obligation de présenter ou tester leurs codes. 

Google Code Jam (GCJ) est une compétition annuelle organisée par Google sous la forme d'un concours de courte durée (2h-5h), en plusieurs étapes en ligne et dont la phase Finale se déroule pendant un évènement réel. 

Facebook HackerCup est organisé annuellement par Facebook, sur le même modèle et le même fonctionnement que Google Code Jam. 

Les plateformes proposent généralement un modèle de classement et de notation des codeurs- ainsi que des classements individuels, par équipe ou par pays. Madagascar est assez faiblement représenté au niveau de ces plateformes.

J'ai rédigé cet article essentiellement pour inciter, informer les développeurs de Madagascar quant à la nécessité de mettre en valeur et en commun, des talents et compétences qui ne sont pas des moindres. N'hésitez pas à partager, commenter si la participation à ces compétitions vous intéresse.
Bonne lecture à toutes et à tous !