
J’ai récemment effectué une session de recrutement de 3 élèves pour un organisme de formation. Ce dernier souhaitait développer et mettre en place un intranet capable de gérer les notes des étudiants et des emplois du temps. Laissez moi conter dans les colonnes de ZT les questions et points abordés, et les retours obtenus.
Premier contact entre le candidat et le recruteur : le CV. Bien que corrects, ils comportaient quelques perles. Pour commencer, une utilisation assez litigieuse du terme « ingénieur », pour une école qui ne propose absolument pas des formations et des diplômes d’ingénieurs. Je retiendrai aussi l’approximation suivante :
Base de données : Oracle (MySQI, Pl/SQL certifié 1Z0-007)
Étrange utilisation des parenthèses, n’est-ce pas ?
Question 1 : le jeu des 15 erreurs
Passons ensuite aux questions techniques. Je commence par fournir un code hideux, écrit par mes soins, tant au niveau du comportement de la fonction que du code en lui même. Je demande alors au candidat de me trouver un maximum de choses qui ne vont pas, qu’on pourrait changer, qu’il ne faudrait pas faire, dont on pourrait discuter. L’objectif n’est pas tant de trouver TOUS les écarts, mais au moins de montrer ce à quoi on accorde de l’importance. Voici le code en question, admirez plutôt :
<?
// fonction qui calcule la vitesse maximale
// en fonction du type de la voiture passé en paramètre
function calcul_vitesse_maximale($voiture)
{
// si le type est "sport"
if ($voiture->getType() == "sport") {
$max = 230;
}
// si le type vaut "1980"
if ($voiture->getType() == "1980") {
$max = "120";
}
else
{
$max = "inconnu";
}
mysql_query("update from voitures where id="$voiture->getId" set max=$max);
return($max);
}
?>
Je considère qu’il y a facilement 15 « erreurs », ou au moins points à discuter. Certains sont carrément des gorritudes. Je vous invite à essayer de touver un maximum de choses par le biais des commentaires, je laisserai la solution dans un prochain billet.
Et bien, quelle ne fût pas ma surprise de découvrir que les candidats avaient un mal fou à trouver ne serait-ce qu’un seul point discutable. À l’exception d’un candidat, qui paradoxalement avait beaucoup moins de pratique que les autres (pour ne pas dire presque aucune), qui a tout de même remonté 3 points importants. Inquiétant, pour des élèves « ingénieurs » et développeurs en Bac+4. La réponse la plus surprenante ? La voici : « Oh vous savez, j’ai l’habitude de travailler sur du code bien plus laid que ça ! »
Question 2 : Simulateur de grand mère
L’organise recruteur ne possède absolument aucune connaissance technique. J’étais donc à la recherche d’un stagiaire capable de vulgariser au mieux les termes, questions et démarches techniques. Je demande donc aux candidats de m’expliquer un mot technique comme si j’étais leur grand-mère. Voici un extrait de conversation type :
- Pouvez-vous m’expliquer le mot « framework » ?
- Hum.. un quoi ?
- Un framework. Comme Zend, symfony, ou Struts
- Jamais entendu parler…
- Bon.. peut-être pouvez-vous m’expliquer ce qu’est un design pattern ?
- Ha.. ça me dit quelque chose, mais en mathématiques…
- Un ORM alors peut être ?
- …
Et je vous jure que je n’exagère pas du tout. Pas évident de faire un exercice de vulgarisation dans ces conditions… Du coup, j’ai laissé de côté mes autres questions :
- Vous utilisez un système de versionning ?
- Vous pourriez m’écrire la fonction factorielle en récursif ? en itératif ? (Amaury si tu passes par là…)
- Quels types d’attaques connaissez-vous ?
- Vous aimez le Nutella ?
Le but de ce billet était bien évidemment de montrer comment une école qui prétend au titre d’école d’ingénieur en informatique peut envoyer des étudiants avec peu de background technique pour un stage en Bac +4. Ces étudiants avaient bien entendu d’autres qualités qui leurs sont propres : bon relationnel, bonne gestion de projet, pour ne citer que les principales. La solution de l’exercice1 au prochain billet !
Abonnement Fil RSS
Alors, deja le code est mal indenté, les accolades sont pas toutes placées de la même façon, çay mauche. $max on sait pas trop si c’est un entier, un string… Soit mettre 230 entre guillemets ou virer les guillemets sur 120 et utiliser -1 à la place d’inconnu. Si la voiture est de type sport, ça renvoit inconnu
vaudrait mieux foutre tout ce qui suit le premier if dans un else, ou mieux, utiliser des elseif.
Update from ça va faire une jolie erreur. ça marcherais mieux comme ça : « UPDATE voitures SET `max`=’ ».$max. »‘ WHERE `id`= ».$voiture->getId()
Ils ont vraiment pas vu d’erreurs ?
marcherait même
Le 1er candidat n’a rien trouvé.
Les 2 autres n’ont pas vu l’erreur causé par le if/else, mais un « switch » a été proposé pour que ça soit plus clair.
Je rajouterais aussi le <? à éviter et préférer afin de limiter le risque d’attaque d’injection SQL.
Bon on pourraît aussi parler des commentaires qui sont plus que sommaires. Notamment pour décrire la fonction et utiliser des formalismes reconnues :
- Pour utiliser un outil de génération automatique tel que DOxygen (mon préféré).
- Pour permettre l’autocomplétion automatique avec Eclipse ou autre, ainsi que les vérifications automatiques (les IDE sont souvent capables d’indiquer des erreurs potentiels)
Bon je m’arrêterais ici :p
haha … bug dotclear ou pas, mais le < ? php a jarté la moitié de mon commentaire :/
PS : Effarant le résultat :/
« bug » wordpress sûrement, oui
La protection de la requête j’ai été déçu de voir que personne ne me l’a proposé, du coup ça met un gros frein pour leur confier la création d’un intranet qui contient des notes que des étudiants seraient bien motivés pour modifier…
*Wordpress -_-
Bon bin c’est bon, tu peux me filer le projet alors ^^ (oui mais il y a Piwam.com a sortir avant)
ah ouais, mettre des mysql_real_escape_string, mais bon théoriquement là c’est dur de faire une injection.
Ce qui est flippant, c’est quand je leur ai dit qu’ils pouvaient échapper les caractères avec un mysql_real_escape_string, on m’a sorti un « comment ça ? », « c’est quoi échapper ? pour quoi faire ? »
Je trouve ça super inquiétant. Le pire c’est que j’ai ce type de constats pour ma propre formation.
Il y a à l’origine deux problèmes selon moi :
– L’enseignement complétement dépassé (la plupart du temps) par des enseignants qui font peu/pas de veille et reste sur leurs acquits.
– Des élèves passifs (je m’inclus dedans lors de ma formation) qui n’ont pas l’idée d’aller approfondir par eux même avant de se casser le nez face au monde du travail.
Mais de toute façon tout ce que j’ai appris « d’important » en php/mysql je l’ai appris au cours de mes stages. Ce qui est important c’est pas forcément d’être un pur roxxor qui connait tout, il suffit qu’il ait de bonnes bases en PHP/mysql et qu’il comprenne/apprene rapidement et facilement.
A mon tour…
1. Utiliser la balise d’ouverture de tag PHP version longue au lieu de la version courte.
2. Utiliser un standard de description de fonctions (par exemple, phpdoc avec @param, @return…) plutôt que 2 lignes de commentaires en vrac.
3. Utiliser une convention de codage reconnu et facilement vérifiable par PHP Code Sniffer (gestion accolades, indentation…)
4. Supprimer les commentaires inutile. ça ne sert pas à grand chose de commenter les « if » de cette manière-là.
5. La fonction doit retourner une string ou un int mais pas l’un ou l’autre.
6. Utiliser un switch plutôt qu’un if et if/else (qui pose problème d’ailleurs ici)
7. La requête SQL ne fonctionne pas (pas d’échappement des caractères, string PHP non terminée, appel de la fonction getId incorrect)
8. Utiliser un ORM évitant ainsi de se tromper dans les requêtes SQL et permettant de se connecter à de nombreuses base de données sans changer le code PHP.
9. Vérifier la valeur de retour de mysql_query
10. La fonction getType renvoit un type ou une année
11. Ne pas mettre la balise de fermeture de tag PHP
12. La fonction indique qu’elle calcule la vitesse maximale mais elle met à jour également à jour la base de données. Il vaudrait mieux faire une autre fonction.
13. $voiture étant un objet, pourquoi créer une fonction calcul_vitesse_maximale($voiture) de manière procédurale ?
Voilà ce que j’ai trouvé…
T’es carrément dedans Rev
J’avais même pas pensé à la balise fermante…
Pour l’histoire de l’utilisation litigieuse du terme « ingénieur », on retrouve ça à peu près partout.
Lundi soir, au débat de TF1 avec NS: la première interviewée se dit être diplômé d’une « Bonne Ecole Supérieure de Commerce ».
Par « Bonne ESC », on s’attend à un HEC, ESSEC ou autres Sup de Co (GEM?).
En fait, pas du tout, elle sort de l’ESG (rires), une pseudo école de commerce qui enseigne des masters équivalent BTS…
La nana en question se plaint de pas trouver de travail… Mais réclamer 3000€ parce que madame à un BTS, je comprend largement les employeurs qui la dégagent.
Tout ça pour dire que moi même je suis Ingénieur Informaticien (oui parce que j’ai pris option PC au bac).
PS: Si jamais t’es sur Grenoble demain, y’a DJ Paulette et le dj de TTC qui viennent mixer à l’école
Ce problème, on le retrouve partout, (j’en ai fais l’expérience l’année dernière pour changer d’école pour voir s’il y avait pas qlq chose de plus intéressant ailleurs)… De toute façon, on ne peut pas être ingénieur à la sorti de l’école…
Cela s’aquière avec l’expérience, comme beaucoup de chose, et uniquement avec l’expérience. Moi perso, quelqu’un qui viendrais me voir, qui sortirais d’école et m’affirmerais je suis un ingénieur, je le renvois illico… au mieux t’es junior (et encore) ^^.
Supinfo n’a jamais été une vraie école d’informatique, et ce n’est pas nouveau:
http://emfleury.free.fr/index.php/2009/12/supinfo-il-ne-passera-pas-par-moi/
http://supinfo-watching.blogspot.com/2010/01/supinfo-toulouse-et-bordeaux-franchises.html
http://emfleury.free.fr/index.php/2010/01/supinfo-la-guerre-des-franchises/
Inquiétant…. j’ai des amis a SupInfo Macon, des soucis économiques ont eu lieu également, les mêmes apparement :/
[...] avez récemment découvert mon histoire d’un curieux recrutement. J’y montrais alors une portion de code PHP exemptée de bonne pratique et fourmillant [...]
Ouhla, j’arrive un peu en retard.
Effectivement, c’est assez étonnant de voir le niveau globalement déplorable des jeunes informaticiens. Framework, design pattern, outil de gestion de sources (CVS, SVN), connaissances IT (bases en administration système, connaissances Unix minimales), méthodes de travail (cycle en cascade, cycle en V, cycle itératif, méthodes agiles)… C’est le minimum, c’est pas bien compliqué.
Et je passe sur les problèmes de logique. C’est vrai que le test de la factorielle est incroyable : Ça sert normalement d’introduction à la programmation, pour expliquer comment on passe des fonctions mathématiques aux fonctions informatiques. Et pourtant, vous verriez le nombre d’ingénieurs « expérimentés » qui sont incapables d’en écrire le code ! C’est affligeant.
(tiens, je ne pensais pas que tu te souvenais de cette anecdote !)
En même temps le php c’est pour les noobs
@Sephiroth972 : Mouahaha ! Le gros troll !
Non, c’est vrai, tu as raison, le PHP c’est juste bon pour faire son petit site perso. C’est sûrement pour ça que Wikipedia, Yahoo, Facebook, Digg, Friendster, Flickr et WordPress (et tant d’autres) l’ont choisi…