Que faut-il enseigner aux apprentis programmeurs ?
Selon un sénior, la discipline est la clé pour avoir un code clair

Le , par Amine Horseman

0PARTAGES

7  0 
Dans un billet de blog, un développeur de jeux vidéo chez Ronimo Games, qui avait passé plus de 7 ans à former les nouvelles recrues à l’art de la programmation, partage avec nous sa façon de voir les choses en ce qui concerne le transfert du savoir. Selon lui, la chose la plus importante à enseigner aux apprentis programmeurs n’est ni les algorithmes, ni les mathématiques, ni les autres connaissances techniques. Bien qu’il ne nie pas leur importance capitale, il affirme que « la principale chose dont ils ont besoin d'apprendre est la discipline. La discipline de toujours écrire un code plus clair, la discipline de le refactoriser après les changements, la discipline de supprimer le code inutile et ajouter des commentaires ».

Il explique ensuite que la discipline est nécessaire et c’est la raison pour laquelle il est toujours important pour un apprenti programmeur de faire un stage, car on ne peut l’apprendre qu’en présence d’un bon superviseur qui restera toujours vigilant sur la qualité du code.

Et pour garder cette qualité de code, il conseille aux apprentis programmeurs de faire attention à une série de fautes qu’on répète souvent lorsqu’on débute :
  • éviter les fonctions/variables/classes dont le nom ne reflète pas leur réel fonctionnement ;
  • diviser une classe si celle-ci fait beaucoup trop de choses à la fois, où si vous ne pouvez pas résumer ce qu’elle fait dans son nom. En effet, cela rendra le code plus clair et facilitera la détection de bugs ;
  • éviter de laisser des bouts de code dans les commentaires sans aucune information sur les raisons. S’il s’agit d’un code erroné à corriger, il faut le spécifier. Sinon, il vaut mieux le supprimer carrément ;
  • éviter de dupliquer le code en faisant du copier-coller d’une classe à l’autre. Penser à la réutilisation du code en l’incluant dans une fonction ou une classe à part, et ça facilitera la maintenance plus tard.


« La plupart du temps que je passe à la supervision de stagiaires en programmation est consacré à ces sujets. Et non sur l'explication des technologies de pointe ou les détails de notre moteur », conclut-il. Toutes les choses discutées sont « vraiment évidentes », selon lui. Le défi consiste à les appliquer et toujours les garder à l’esprit et non se contenter de juste les connaître. « C’est pourquoi la chose la plus importante c’est que les apprentis programmeurs apprennent la discipline ».

Source : Joost’s Dev Blog

Et vous ?

Êtes-vous d’accord avec cet avis ?

Quelle est la chose la plus importante durant l’apprentissage de la programmation selon vous ?

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de Thorna
Membre éprouvé https://www.developpez.com
Le 09/01/2015 à 10:34
Si je suis bien évidemment d'accord avec ce qui est dit plus haut, à la fois dans l'article et les premiers commentaires, je ne peux que m'inquiéter de constater que cette "discipline" n'est guère utilisée/employée par les programmeurs dont je reçois de temps en temps les productions... Il faut dire qu'avec comme seul critère d'exigence le trop bien connu "je veux tout pour hier !", ça n'encourage pas l'usage de bonnes pratiques, quand ça ne l'empêche pas tout bonnement.
2  0 
Avatar de michel.bosseaux
Membre confirmé https://www.developpez.com
Le 09/01/2015 à 10:37
Définitivement d'accord

J'ai été amené à donner des cours de rattrapage de programmation en javascript à des étudiants en ... infographie (ils en ont besoin pour créer des sites web donc on leur donnait un cours). Ce n'est pas forcément le langage idéal pour commencer, et j'avais donc un public n'ayant pas la façon de penser "programmeur", que le prof principal avait déjà bien égaré avec une méthode "apprenez par vous même en cherchant sur internet, et je corrige après". Et ses corrections n'étaient pas forcément lisibles.

J'ai pu constater en leur redonnant toutes les bases théoriques que ce qui posait le + problème n'était pas le langage lui même, ni même l'algorithmique (car ils étaient capables de décomposer un problème en diverses étapes et de le traduire en code), mais bien l'organisation du code lui même, surtout dans ce langage où il y a du code synchrone ET de l'asynchrone. Ils ne savaient pas quoi mettre où, nommaient leurs fonctions, objets, variables, n'importe comment ... utilisaient mal les fonctions (trop longues, ou inutiles car code utilisé une seule fois, ou non utilisées dans des cas où il aurait fallu ...). Et au final, étaient incapables de trouver un bug tout bête, ou de modifier leur code pour rajouter qqch.

J'ai eu trop peu d'heures avec eux, et ce qui leur a semble-t-il le plus servi dans ce que je leur ai donné comme matériel est le corrigé de deux exercices, bien structurés et sur-commentés.

Si je suis amené à redonner ce cours, au lieu de me concentrer sur la théorie et devoir dévier (comme ça a été le cas ici), j'aborderai directement les sujets qui fâchent. Je serai sans doute plus efficace.

PS : on pourrait penser que je fais un constat d'échec. Pourtant j'ai fait réussir 80% des étudiants, alors que le taux d'échec habituel dans ce cours est de 90%, vu qu'ils ne sont pas programmeur et la méthode de cours de leur professeur principal inadaptée. J'ai donc, selon tous les critères, plutôt bien fait mon boulot. Mais j'en garde quand même le sentiment de m'être planté en beauté tellement le décalage était grand entre ce que j'avais préparé, et ce dont ils avaient réellement besoin.
2  0 
Avatar de ChristianRoberge
Membre habitué https://www.developpez.com
Le 18/01/2015 à 15:19
Outre les erreurs classiques mentionnées, je leur dis souvent au nouveaux de s'attarder beaucoup au design et pas seulement à la mécanique du code mais insistant sur les concepts qu'il faut pour résoudre le problème. S'il n'y a que cette directive et les règles mentionnés ci-haut, ils produisent habituellement un design très complet et détaillées et un implantation convenable assez bien commenté. Par contre, je qualifie leur code d'à peine passable. Un bon design n'est pas nécessairement détaillé. D'ailleurs trop de détails s'avèrent souvent inutile en cours de route du projet, précision des spécifications, nouvelles fonctionnalités, etc. Des concepts définis et clairs pouvant s'appliquant à résoudre notre problème tout en pouvant être employé dans un autre contexte est le but à atteindre. Souvent, quand les nouveaux programmeurs prennent ce commentaire à la lettre, ils construisent alors des classe très générales. C'est ici un autre piège. Un concept général a nullement besoin d'une classe général pour être implanter. Il faut être un programmeur paresseux et ne coder que le minimum, tant au niveau du code, documentation, commentaire et design. Un paresseux intelligent toutefois, qui a un discipline de fer pour réutiliser et faire évoluer les concepts qu'il a mis au point (SVP. Ne pas refaire ce qui a déjà été réalisé!)
2  0 
Avatar de Saverok
Expert éminent https://www.developpez.com
Le 12/01/2015 à 10:45
Les développeurs débutants ont souvent 2 défauts :
- ils veulent aller trop vite et en oublient certaines étapes essentielles telles que l'analyse du besoin métier (est-ce que j'ai bien compris la demande ?), la conception et l'analyse de l'existent (comment mon code va t'il s'insérer dans le code existant ? est-ce que le code existant contient déjà des méthodes que je peux réutiliser ?)
- ils pensent souvent à tort que la quantité du code exprime sa qualité avec les travers que cela implique

Je partage donc bien le point de vu exprimé dans ce billet de blog
Par grand chose à y ajouter
1  0 
Avatar de Ithildine
Membre régulier https://www.developpez.com
Le 12/01/2015 à 18:45
Le courage me semble important aussi...
Accepter de mettre à la poubelle une portion de code sur laquelle on a passé du temps et de l'énergie quand on s'est trompé (ne pas s'obstiner) ou quand elle n'est plus tout à fait utile.
Accepter de remettre en cause des choix quand ils s'avèrent incorrects et ne pas essayer de bidouiller le truc pour qu'il rentre dans les clous au détriment de la simplicité et de la lisibilité, là encore, ne pas s'obstiner.
Accepter de ne pas utiliser la super librairie dernier cri quand une classe existante fait très bien l'affaire (erreur que j'ai vu commettre par beaucoup de débutants)
Accepter de faire une modif pénible dans son propre code quand c'est la solution la plus simple pour tout le projet (combien de développeurs ai-je vu argumenter pour refiler le bébé au collègue !).
Accepter de modifier du code que personne ne comprend plus... mais qui tourne en prod et sur lequel un avenant a été vendu...

Coder, ce n'est pas toujours s'amuser et cela donne parfois des sueurs froides... Pour caricaturer un peu, on peut passer de l'euphorie au désespoir par la simple manifestation d'un problème imprévu.

EDIT : orthographe
1  0 
Avatar de kolodz
Modérateur https://www.developpez.com
Le 15/01/2015 à 11:34
Citation Envoyé par pvincent
À l'âge où l'on apprend à programmer, il est déjà bien trop tard pour que cette discipline devienne naturelle.
Quand le service militaire était encore obligatoire, beaucoup de personnes considéraient avoir appris la rigueur pendant celui-ci. Ce qui est l'âge où on apprends à programmer aujourd'hui... En quoi, ce qui était possible hier ne serai plus possible aujourd'hui ?

Citation Envoyé par pvincent
En réalité, c'est le respect des règles d'orthographe au moment où l'on apprend à écrire qu'il faudrai réhabiliter. On donne ainsi des habitudes de rigueur dès l'enfance.
Si j'en crois mes collègues universitaires en activité, ce n'est hélas pas le chemin pris par notre Éducation Nationale.
Je suis dyslexique, je fait une tonne de fautes d'orthographe et de grammaire. Et pourtant, quand il s'agit d’écrire un programme informatique propre et fonctionnel. Je pense pouvoir faire aussi bien que toutes les autres personnes.
D'ailleurs, résumé un développeur à une personne qui écrit du code qui compile me semble très réducteur. Il est rare de voir un développeur qui n'a qu'à lire une spécification et appliquer à la lettre celle-ci. Où la seule intelligence du développeur serai de savoir faire la traduction du langage formel d'une spécification à celui d'un langage informatique.

D'ailleurs, le blogueur cité explique bien que l'un des problèmes que le développeur sache se qu'il fait et pourquoi il le fait. Ce qui n'est pas selon moi une notion de rigueur. Et la rigueur de la langue française, c'est souvent connaitre et appliquer des règles sans en connaitre les raisons. Je doute que le future de l'informatique soit à mettre entre les mains des personnes qui ont la rigueur d'appliquer "bêtement" ce qu'ils ont appris.

Je préfère avoir un développeur qui a du bon sens et de la logique.
1  0 
Avatar de l'art souille
Membre régulier https://www.developpez.com
Le 16/01/2015 à 15:45
L'auto-discipline est celle qu'on s'impose tandis que la discipline, on l'impose.
La première a davantage de chances de produire des effets que la seconde.
1  0 
Avatar de Zero62
Futur Membre du Club https://www.developpez.com
Le 16/01/2015 à 17:44
Bien sur Saverok mais la compréhension peut être parfois "floue ou interprétée " le développeur "croit " avoir compris le besoin et donc ne prend pas toujours le temps de se renseigner sur un besoin exprimé qui lui paraît "évident" et pourtant....
ex : afficher l'information xxx peut être une demande utilisateur
si le demandeur ne précise pas que cette information est numérique (combien de chiffre après la virgule)ou alphanumérique, qu'elle comporte zz caractères et que de plus in y a une règle d'affichage... et bien on peut perdre beaucoup beaucoup de temps....

cordialemment
1  0 
Avatar de Matthieu Vergne
Expert éminent https://www.developpez.com
Le 19/01/2015 à 15:45
Et c'est qui qui va leur enseigner tout ça et leur payer cette formation ? {'^_^}
S'il suffisait de tout apprendre, je pense pas qu'on aurait ce genre de soucis.

Citation Envoyé par zaza576 Voir le message
"Codes. Codes bien. Codes en imaginant que le mec qui reprendra le code derrière toi est un sérial killer qui sait où tu habites !"
Tu veux les faire fuir ou quoi ? {'°o°}
1  0 
Avatar de kolodz
Modérateur https://www.developpez.com
Le 19/01/2015 à 16:36
Citation Envoyé par Saverok Voir le message
Savoir réorienter les formations pour être plus proche des réalités du terrains
Une formation est justement là pour préparer au mieux à la vie professionnelle
Je ne suis pas d'accord avec ce propos, ou du moins il nécessité d'être nuancé. Par exemple, une formation en "ingénieur en informatique" apprends aussi de l'électronique de la théorie des langages, du droit (sur les entreprises et l'informatique), un minimum de comptabilité etc... La formation n'est pas là pour t'apprendre ce que tu va faire dans ton premier job, ni dans le second. Mais, bien d'avoir les bases nécessaires pour l'ensemble de ta vie professionnel (ou non).
Bien que cela soit le rêve de l'employeur, je doute que n'importe quel formation "forme" exactement pour un travail. Mise à part l'alternance, mais c'est parce que tu fait actuellement le travail...

Citation Envoyé par Saverok Voir le message
Le rapprochement, forcé, des universités avec le privée est dans ce sens une très bonne chose
Avoir des formations mieux adaptées au marché de l'emploi et mieux adaptés aux exigences de l'entreprise ne peut être qu'un plus
J'en doute fortement. C'est certes plus confortable pour les entreprises, mais cela contraint les universités de former sur ce qui ce fait et non sur ce qui pourrai se faire. Comme la programmation orienté aspect, qui n'a aucun intérêt pour une entreprise qui veux des gens formé pour un poste. Or, c'est peut-être quelque chose qui va faire évoluer l'informatique dans le bon sens. D'ailleurs, les recherches universitaires sont de plus en plus contraint à faire des recherches qui ont une application directe, vendable . Ce qui est aussi une grande problématique pour la création de nouvelle technologie, qui se base sur des "recherches fondamentales".

Citation Envoyé par Saverok Voir le message
En effet, rien ne remplace l'expérience
Je ne peux qu'approuvé.

Cordialement,
Patrick Kolodziejczyk.
1  0 
Contacter le responsable de la rubrique Accueil

Partenaire : Hébergement Web