Il semble qu'il y ait une énorme différence entre ce que j'attends d'une personne qui a étudié la programmation pendant quelques années à l'université et ce que l'on sait réellement.
Je n'ai pas l'impression de poser des questions trop compliquées lors des entretiens. Certaines de mes questions habituelles sont:
Quelle est la différence entre un type de référence et un type de valeur?
S'il semble que l'interviewé ne comprenne pas vraiment sa propre réponse, ou s'il ne connaît pas la terminologie que j'utilise, j'entre dans les détails en lui demandant de m'expliquer ce qui se passe quand j'écris int i = 0; dans une méthode, qu'en est-il de l'objet o = 0, objet o = new MyClass (), etc ...
Fondamentalement, je fais tout ce que je peux pour inciter l'interviewé à me parler de la pile d'appels, du tas, etc., et j'essaie de rester dans les concepts d'angnostique linguistique. Si l'interviewé me dit qu'il a fait beaucoup de C, ou C ++, ou c #, je plonge plus profondément dans le langage spécifique, et peut-être dans les détails d'implémentation.
Si nécessaire, je demande à l'interviewé ce qu'est une pile d'appels ou où sont stockés les arguments passés à une fonction dans le langage impératif de son choix.
la plupart des personnes interrogées n'ont aucune idée de ce qu'est une pile d'appels, encore moins des considérations de boxe, etc.
Quelle est la différence entre une classe abstraite et une interface. Dans quels cas devez-vous utiliser l'un sur l'autre?
Habituellement, je leur demande également d'imaginer la conception d'une petite bibliothèque avec un cas d'utilisation visant à utiliser un héritage et des usines abstraites
La plupart des personnes interrogées n'ont aucune idée de ce que pourrait être le véritable objectif de l'héritage. Ils connaissent généralement certains mots clés (virtuel, remplacement, etc.), mais ne savent pas vraiment quand les utiliser, sans parler d'expliquer ce qu'est une table virtuelle.
Même si je sélectionne les CV au préalable, même pour les personnes ayant 5 ans d'expérience dans des projets réels impliquant des architectures complexes, je dirais que moins de 25% de toutes mes personnes interrogées peuvent répondre correctement à ces deux questions. Et quand je dis correctement, je ne veux pas dire «en profondeur» ... juste pour avoir une idée approximative de ce qu'est le concept.
En ce qui concerne les juniors, je suis content d'embaucher quelqu'un qui ne sait pas très bien organiser son temps, ou quelqu'un qui n'est pas habitué aux processus de construction industrielle par exemple, mais j'ai le sentiment que si l'on n'a pas entendu le mot " callstack "après quelques années d'études en informatique, il est soit stupide, soit démotivé, ou a choisi son université de façon très imprudente.
Pensez-vous que je suis trop extrémiste ici? Est-il courant d'apprendre ces concepts de base après avoir terminé ses études universitaires? Connaissez-vous des gens qui ne les connaissaient pas et qui sont devenus de très bons ingénieurs logiciels après quelques années? Et pensez-vous que mon entreprise pourrait avoir du mal à attirer des personnes talentueuses, ou rencontrez-vous le même genre de problèmes avec votre propre processus d'embauche?
Éditer. en ce qui concerne le «type immédiat», ce n'était qu'une traduction littérale du français vers l'anglais, comme nous faisons habituellement nos interviews en français. Je l'ai corrigé dans ma question. Mais encore, je pense que vous comprenez tous parfaitement ce que je voulais dire, ce qui fait mon point, non?