Bonjour à tous,
Je souhaiterais recueillir vos points de vue sur une problématique liée à la motivation des stagiaires.
Le contexte est le suivant:
Je participe au montage d’une entreprise. Le coeur de métier de cette entreprise n’est pas l’informatique. En revanche, le modèle économique s’appuie sur l’outil informatique. L’outil informatique joue un rôle «*périphérique*», mais néanmoins déterminant dans la mesure où un « échec informatique » conduirait à l’échec de l’entreprise.
Mon rôle est de m’occuper de toutes les questions techniques. Ce rôle est compatible avec mon parcours professionnel, car je suis ingénieur développeur depuis 16 ans. Je suis également intervenu (gratuitement) auprès de startups afin de les aider lors de situations critiques (la majorité a malheureusement réagi trop tard... et a déposé le bilan).
Le décideur nous a présenté une vision de l’informatique qui me semble totalement irréaliste.
Je précise un point important: le décideur n’a aucune formation ni expérience en ingénierie informatique. Il possède un très haut niveau d’étude, mais ces études ne sont pas des études d’informatique.
Le contexte étant posé, voici la problématique.
Le décideur souhaite ne faire appel qu’à des stagiaires pour développer le système informatique de son entreprise.
Le décideur souhaite contraindre les développeurs (les stagiaires) à écrire du code compréhensible par lui. Autrement dit, je reformule, car ce point est très important:
Le décideur souhaite contraindre les développeurs (les stagiaires) à écrire du code compréhensible par une personne qui n’a pas de formation ni d’expérience en informatique... et qui — par ailleurs — est chef d’entreprise et qui n’a donc pas le temps d’étudier l’informatique pour se mettre à niveau.
Le décideur souhaiterait mettre en place un système pour qu’un développeur n’ait accès qu’à une toute petite partie du code... Objectif: empêcher un stagiaire de « pomper » le système informatique (en faisant une copie sur une clé USB).
Ces points soulèvent de mon point de vue de gros problèmes.
Comment motiver des stagiaires talentueux si on leur dit qu’ils doivent écrire du code compréhensible par une personne qui n’a pas de formation ni d’expérience en informatique ?
Cela reviendrait à leur interdire d’utiliser les gros frameworks (comme .NET, Symfony, ZF, Ruby On Rails...). En effet, ces frameworks font lourdement usage de tous les concepts étudiés dans les cours d’ingénierie informatique*: les objets, l’héritage, les surcharges, les traits, les interfaces, les patrons de conception...
Contraindre des stagiaires à n’utiliser aucun des concepts « évolués*» étudiés en cours est, selon moi, le moyen le plus sûr de faire fuir les meilleurs éléments.
En effet, du point de vue de la motivation:
- Écrire du code sans utiliser ces concepts ne présente aucun intérêt intellectuel.
- Écrire du code sans utiliser ces concepts ne présente aucun intérêt du point de vue de la carrière.
- Écrire du code sans utiliser ces concepts ne présente aucun intérêt du point de vue de la formation.
- Écrire du code sans utiliser ces concepts est « super rébarbatif » (pour ne pas dire « chiant à mourir »).
Mais, c’est sans prendre en compte un autre facteur essentiel: écrire du code sans utiliser ces concepts revient à produire du code qui n’est pas « maintenable » ni évolutif. Les concepts étudiés en école d’ingénieur ont pour objectif le découplage du code... dans le but de la rendre évolutive et « maintenable » (c’est tout l’intérêt de ces concepts).
Interdire l’utilisation de ces concepts, c’est donc:
- Faire fuir les bons stagiaires.
- Interdire l’utilisation des frameworks tels que « .NET », « Symfony », « Zend », « ROR », « Sinatra », « Django »...
- S’assurer que l’on va développer une usine à gaz impossible à faire évoluer.
Bref, c’est juste une très mauvaise idée de on point de vue.
En fait, la définition d’un code simple ne doit pas s’entendre par rapport à un « néophyte en informatique », mais par rapport à l’ingénieur en informatique. Un code « simple » pour un ingénieur en informatique n’est pas simple pour le néophyte. Et un code « apparemment simple » pour un néophyte ne l’est pas forcément pour un développeur...
Ensuite, l’idée d’interdire à un développeur de travailler sur l’ensemble du code est juste irréaliste:
Le développeur a besoin d’avoir accès à l’ensemble du code pour se faire une idée « de comment les choses interagissent avec la partie sur laquelle il doit travailler ».
Si l’on travaille avec des langages non compilés (ex PHP) : le développeur a besoin d’avoir accès à l’ensemble du code pour tester son travail sur son poste de développement.
Bien sûr, il est possible de « cloisonner » les développeurs, comme cela se fait dans l’armée ou au ministère de l’Intérieur. Mais cela implique une organisation bureaucratique très lourde... et totalement incompatible avec le contexte d’une startup qui souhaite réduire au maximum le coût du développement.
Enfin, nous savons tous par expérience qu’une entreprise qui n’embauche que des stagiaires ne produit pas du code fiable. Les stagiaires doivent être entourés par des développeurs expérimentés, embauchés en CDI... Il doit y avoir une majorité de développeurs expérimentés, embauchés en CDI et quelques stagiaires. Les « anciens » veillent à la qualité de la formation tout en assurant la qualité du travail.
Voilà,
Je souhaiterais recevoir vos points de vue.
Merci,
Denis
Partager