Que faut-il enseigner aux apprentis programmeurs ?
Selon un sénior, la discipline est la clé pour avoir un code clair
Le 2015-01-08 19:28:37, par Amine Horseman, Expert éminent sénior
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 :
« 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 ?
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 ?
-
ThornaMembre éprouvé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.le 09/01/2015 à 10:34
-
michel.bosseauxMembre confirmé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.le 09/01/2015 à 10:37 -
ChristianRobergeMembre habitué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é!)le 18/01/2015 à 15:19
-
SaverokExpert éminentLes 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 ajouterle 12/01/2015 à 10:45 -
IthildineMembre régulierLe 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 : orthographele 12/01/2015 à 18:45 -
kolodzModérateur
Envoyé par pvincent Envoyé par pvincent
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.le 15/01/2015 à 11:34 -
l'art souilleMembre régulierL'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.le 16/01/2015 à 15:45 -
Zero62Futur Membre du ClubBien 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....
cordialemmentle 16/01/2015 à 17:44 -
Matthieu VergneExpert éminentEt 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.
Tu veux les faire fuir ou quoi ? {'°o°}le 19/01/2015 à 15:45 -
kolodzModérateurJe 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...
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".
Je ne peux qu'approuvé.
Cordialement,
Patrick Kolodziejczyk.le 19/01/2015 à 16:36