Top Code 2024, les challenges sont de nouveau disponibles dans les boards pour les participant(e)s => Boards

Retour sur la soirée Top Code pour My Digital School

My Digital School a sollicité Tainix pour sa soirée Top Code. Une histoire originale, 7 challenges, et un peu d’IA…

19/04/2023

Top Code ?

My Digital School a sollicité Tainix pour sa soirée Top Code. C’est une soirée dédiée aux développeuses et développeurs des cursus de My Digital School. L’objectif est de se challenger, le temps d’une soirée autour d’exercices de programmation originaux. C’est un évènement qui est spécifiquement au programme des étudiant.e.s en Bachelor 3, mais les autres promos étaient également invitées.

La soirée en chiffres :

  • 7 challenges sur mesure autour d’une histoire originale
  • 4 classements qui évoluaient en direct
  • 113 participant.e.s
  • 363 tentatives de résolutions des challenges pour 306 réussites !
  • 93 évaluations de code

Dans cet article, tu découvriras comment les challenges ont été créés, comment le code est évalué, et comment ChatGPT (et autres IA) viennent à la fois nous aider et nous perturber 😉

Les challenges d’abord réservés à la soirée seront diffusés au fil de l’eau à partir du mois d’avril et disponibles sur cette page : Ada, l’art du code.

Le fil rouge des challenges

Chez Tainix, pour nos challenges on aime bien les énoncés sympas et originaux, qui permettent d’illustrer les données qui seront manipuler et le code qui sera produit.

Un premier échange avec My Digital School a donc permis de définir le fil rouge de la soirée. Ils avaient déjà cette année un thème récurrent : « Art et digital ». Nous sommes donc partis sur cette voie.

Pour démarrer, nous avons demandé l’aide de ChatGPT :

Ce synopsis a été notre base de travail, il restait beaucoup de choses à faire !

Tout d’abord ajuster et perfectionner la narration. Anna est devenue Ada, en référence à Ada Lovelace. Et si tu reprends les énoncés des challenges, quelques références à Ada sont disséminées au fil de l’histoire (Charlotte est une référence à Charles Babbage, etc.).

Il y avait quelques mécaniques liées aux Boards qu’il nous restait à développer avant la soirée (calcul des points, soumission de code, mails d’invitation, etc.).

Et surtout imaginer les challenges, les concepts impliqués et les algorithmes associés.

Voici donc les concepts et thématiques à utiliser pour les challenges :

  1. Rien de particulier, une somme à réaliser. Ce premier challenge servait surtout à apprivoiser le système pour celles et ceux qui n’auraient jamais utilisé Tainix auparavant.
  2. Recherche d’occurences
  3. Manipulation de chaines de caractères et tableau de correspondance
  4. Map en 2D
  5. Récursivité
  6. Cryptage
  7. Comportemental

Parfois le plus dur, ce n’est pas le challenge, mais la construction d’un jeu de données « qui marche » ! Par exemple pour le challenge 3, il y a toujours au moins 1 bonne réponse. Il faut s’en assurer quand on génère le jeu de données. Pour le challenge 5, il faut brouiller les pistes, donc on construit une longue chaine de blocs, puis de petites chaines de blocs, puis des blocs random supplémentaires. Et on mélange le tout !

Pour cette phase, ChatGPT peut aider, il est très fort pour générer rapidement « une liste de 200 prénoms féminins » ou « une liste de noms d’oeuvres d’art digitales futuristes ». Et il peut les mettre dans un tableau PHP tout seul !

Ces phases ont été itératives, la narration s’est adaptée aux challenges et inversement.

Une fois tout bien ficelé, les visuels ont été produits, cette fois avec MidJourney.

Tests automatisés et recettage manuel

Rentrons un peu dans le moteur de Tainix….

Dans les corrigés, et les articles nous parlons souvent de tests unitaires. C’est à dire que le bon fonctionnement du code est verrouillé par du code dédié. L’intérêt c’est que ces tests sont rejoués à chaque évolution du code permettant de s’assurer que ce qui fonctionnait bien continue de bien fonctionner.

Dans Tainix, il y 3 niveaux de tests automatisés :

  • Tests des mécaniques des challenges. C’est à dire que chaque algorithme de chaque challenge est testé. Plusieurs jeux de données test sont écrits « en dur » et sont rejoués par le système pour s’assurer que le challenge fonctionne comme souhaité.
  • Tests d’architecture. On a défini des conventions de code, comment les fonctions et méthodes doivent être nommées, des règles sur les interfaces ou sur l’héritage. Et ces éléments sont vérifiés par les tests.
  • Tests des fonctionnalités. On parle alors plus de tests d’intégration que de tests unitaires car on travaille avec des factories. On insère des données dans une base de test et on lance les fonctionnalités clés du site : inscription, résolution d’un challenge, inscription à un board, calcul du classement, etc.

Et spécialement pour l’occasion, on a réalisé un recettage manuel avec l’équipe de Web and Cow (l’agence éditrice de Tainix). Pendant 1 à 2h, 7 développeurs ont tenté de résoudre les challenges. Luis, alternant chez Web and Cow, a réalisé les 7 challenges en 2h01min36sec.

On a considéré que c’était pas mal et que les 7 challenges produits devraient tenir en haleine les participants !

Evaluation du code

Pour les B3 dev, le code était évalué manuellement. Selon 3 critères :

  • Lisibilité du code : Nommage clair des variables, des fonctions, le code se comprend sans commentaire superflus.
  • Respect des standards : Casse, indentation, typage, bonnes pratiques et conventions du langage respectées.
  • Organisation du code : Mise en place de fonctions ou d’objets

C’est une des valeurs de Tainix, à savoir produire un code de qualité, qui peut être compris efficacement par ses pairs.

Après coup, il semble qu’il a manqué un critère de simplicité. Pas mal de solutions utilisaient des choses compliquées pour faire des choses simples. Le but n’est pas de réduire le code à tout prix mais bien d’en diminuer la complexité tout en conservant une bonne compréhension. Le bon exemple est le challenge 1 qui était très abordable, et pour lequel on a reçu une bonne dizaine de versions différentes !

Les différentes solutions soumises feront l’objet de corrigés dédiés dans les prochaines semaines. Et promis pas que en PHP 😉

Détection de ChatGPT

En corrigeant les challenges, je suis tombé sur du code de bonne qualité, et parfois… de trop bonne qualité… il n’y avait pas de doute, le challenge avait été résolu avec l’aide de ChatGPT, ce qui était interdit pour les B3 Dev.

Qu’est ce qui a éveillé notre curiosité :

  • Plusieurs étudiants ont soumis le même code
  • Des étudiants de 2 villes différentes avaient exactement la même logique de résolution, dans 2 langages différents (logique identique, noms de fonctions identiques, etc.)
  • Trop de commentaires. Les commentaires c’est bien mais qui a déjà écrit « Initialisation du tableau associatif » ? On écrit en général « initialisation du tableau » mais « associatif » ??
  • Des fonctions « exotiques » qu’on ne voit presque jamais
  • On avait aussi soumis à ChatGPT chacun des énoncés, donc on savait quelle logique il utiliserait pour résoudre les challenges

Ces étudiants ont été retirés des classements finaux.

Le but d’une soirée comme celle la était de se challenger sur ses propres compétences en programmation. ChatGPT a beaucoup d’usages et de potentiel pour aider les développeurs et développeuses au quotidien mais il faut garder des réflexes et des connaissances en algorithmiques.

Mon avis sur l’utilisation des IA dans la pratique quotidienne du code

L’IA ne peut pas être plus intelligente que toi. C’est à dire que si tu l’utilise à un niveau d’intelligence égale, pour lui faire faire des choses que tu maitrises, ou que tu aies en capacité de comprendre rapidement, c’est très puissant et tu vas gagner du temps dans ton quotidien. Je dirais même qu’il faut les « apprivoiser », parce que le « bon développeur de demain », sera le développeur qui a son IA à côté de lui pour accélérer sa productivité.

Quelques exemples de tâches qui fonctionnent bien :

  • Créer une expression régulière
  • Accompagner l’écriture de requêtes SQL complexes
  • Créer une « petite » fonction, méthode voir classe qui réalise une ou un ensemble d’actions que l’on peut décrire en 2 ou 3 phrases.
  • Aider dans l’écriture des tests unitaires, pratique pour améliorer la robustesse de son code. On envoie le code et on demande d’écrire les tests unitaires associés.
  • Demander des exemples d’utilisation d’une fonction (native ou issue d’une librairie)
  • Générer des jeux de données (liste de villes, liste de prénoms, liste de paniers E-commerce, etc.)

Par contre, quand on lui demande des choses au delà de notre champ de compétences actuelle, il devient difficile d’apprécier la précision de la réponse, et on peut se retrouver avec du code qui ne fonctionne pas, qui n’est pas lié à la bonne version de nos outils, qui utilise des concepts trop avancés par rapport à ce qu’on maitrise réellement, etc. Et au final, on peut parfois perdre du temps à démêler ce qui est juste de ce qui ne l’est pas. Ou encore utiliser du code qu’on ne saura pas faire évoluer ou réparer si nécessaire.

Cette soirée Top Code en est une bonne illustration, ChatGPT et MidJourney ont été très efficaces en phase d’inspiration et pour certaines petites briques. Mais sans connaissances techniques pour créer les challenges, coder les fonctionnalités des boards, écrire les tests pour s’assurer du bon fonctionnement de l’ensemble, cette soirée n’aurait jamais pu avoir lieu !

Mon conseil serait donc de pratiquer les IA, comprendre ce qui fonctionne bien pour toi, quelles sont les opérations qui habituellement te prennent 15, 20, 30 minutes, qui finalement peuvent être réalisées en 2 ou 3 en passant par une IA. Et intégrer ces opérations dans ton quotidien. Et pour les sujets + poussés, des choses fortement liées « au métier » d’une application, les utiliser avec parcimonie sinon cela pourrait s’avérer contre productif.

Remerciements et bravo à tous les participant.e.s

Encore bravo à toutes et à tous pour votre participation à la soirée Top Code ! Nous avons eu beaucoup de retours positifs et nous tenions à vous remercier encore une fois.

Vous verrez apparaitre dans vos comptes Tainix prochainement un (ou deux) trophées rappelant votre participation à la soirée Top Code ! et d’autres trophées vont suivre…

Un grand merci à My Digital School pour leur confiance 🙂

Et sans oublier les équipes de Tainix et de Web and Cow qui m’accompagnent dans ces aventures et qui avaient les mains dans le cambouis pour faire de cette soirée un bel évènement 😉

Retour sur l’évènement

Ressources pour aller + loin


Qui a codé ce superbe contenu ?


Ta newsletter chaque mois

Corrigés, challenges, actualités, veille technique... aucun spam.