Pourquoi les intervieweurs ne demandent-ils pas au candidat de lire du code? [fermé]

13

J'ai eu une douzaine d'entretiens dans ma vie (je suis sur le point d'obtenir mon diplôme) et je me demande pourquoi on ne m'a demandé qu'une seule fois de lire et d'expliquer du code. En gros, 90% des emplois concernent principalement la maintenance des systèmes existants. La capacité de l'OMI à lire le code de quelqu'un d'autre est une compétence importante.

Pourquoi les enquêteurs ne vérifient-ils pas? *

* Parmi mes amis, je suis le seul à avoir été invité à réviser un code.

Lukasz Madon
la source
4
On m'a demandé de lire du code C lors d'une interview une fois, et j'ai souligné de nombreuses mauvaises pratiques dans le code: la mémoire allouée ici et libérée là-bas, etc. C'était leur code de production. Je n'ai pas reçu d'offre.
kevin cline
1
Voter pour clôturer simplement parce que nous ne pouvons pas dire pourquoi d'autres personnes ont fait ou n'ont pas fait quelque chose. Pour tout ce que nous savons, il a été éliminé du processus d'embauche avant d'arriver à l'étape de lecture du code source. Si cela était remplacé par «si les enquêteurs l'exigent ...», cela pourrait être une question appropriée.
GrandmasterB
1
@GrandmasterB Des intervieweurs apparaissent également sur ce site. S'ils ne recherchent pas intentionnellement des compétences en lecture de code, il peut bien y avoir une bonne raison à cela.
Izkata
Veuillez éviter une discussion approfondie dans les commentaires. Si vous souhaitez discuter davantage du bien-fondé de cette question, veuillez ouvrir une question sur Meta à laquelle appartient une telle discussion. Je vous remercie.
maple_shaft
Je voudrais ajouter qu'on m'a déjà demandé de lire le code et de signaler les mauvaises pratiques et les erreurs.
andy

Réponses:

10

Lorsque je posais des questions d'entrevue, je l'ai fait au début, mais je l'ai progressivement supprimé. Les candidats qui pouvaient bien écrire du code lors de l'entretien pouvaient tous bien lire le code pendant l'entretien. Les candidats qui ne savaient pas lire le code ne pouvaient pas non plus l'écrire. Les questions liées à la lecture du code ne différencient pas vraiment les candidats.

Signe
la source
4

Version courte

Si le travail consiste à maintenir une candidature, les compétences à tester lors des entretiens sont:

  • La capacité de comprendre la grande base de code avec sa documentation, ses tests unitaires , etc.

  • La possibilité de refactoriser le code et d'apporter des modifications sans tout casser.

Demander aux gens de lire du code ne vous aidera pas à évaluer ces capacités.

Version longue

Vous a-t-on demandé d'écrire du code? Si oui, comme Sign l'a noté dans sa réponse , cela suffit. Si nous généralisons un peu, une personne qui écrit du code source clair et facile à comprendre serait capable de lire le code source écrit par d'autres personnes.

Si on ne vous a pas demandé d'écrire du code, eh bien, vous avez probablement été interviewé par une personne du département des ressources humaines. De tels entretiens ne peuvent pas être trop techniques et sont pour la plupart sans valeur, car ils ne valorisent pas vos compétences et votre capacité à bien travailler, mais plutôt le nombre d'années que vous avez passées à l'université et d'autres choses qui n'ont rien à voir avec le travail.

Il y a quelques autres raisons de ne pas demander à lire le code d'un travail de maintenance:

1. Il est difficile de le faire de manière fiable

Concrètement, que feriez-vous si vous étiez intervieweur? Faites lire à vos candidats du code. Quel code? Dans quelle langue? Comment bien ou mal écrit? Avec ou sans commentaires? Avec ou sans documentation?

Plus important encore, que dit-il sur le candidat? Dans quelle mesure est-il en corrélation avec la base de code elle-même?

Supposons que vous ayez une ancienne application VB.NET à maintenir. Vous savez que le code source est surtout laid et non testé, et quelques commentaires sont obsolètes ou trompeurs. Au cours des trois derniers mois, un développeur très compétent a travaillé sur la solution; il a refactorisé et testé à l'unité les parties les plus critiques de l'application, ajouté des commentaires là où il y avait un besoin de commentaires, et, surtout, écrit une documentation détaillée sur l'architecture globale, les parties critiques et les pièges.

Vous embauchez maintenant un développeur pour maintenir cette base de code. Au cours d'une interview, donneriez-vous un morceau de code hérité (laid non testé), ou le morceau de code qui a été refactorisé par le développeur précédent?

Souhaitez-vous donner la documentation? Pour lire la documentation, le candidat devra passer au moins quelques heures. Cela rend impossible de le faire lors d'une interview.

2. La lecture d'un court morceau de code n'est pas la même chose que la lecture du code d'un projet familier

N'oubliez pas, le travail consiste à maintenir un projet. Il est difficile de maintenir une base de code importante les premiers jours ou semaines lorsque vous n'êtes pas familier avec le projet. Il est beaucoup plus facile de le faire après quelques mois lorsque vous avez écrit toute la documentation et que vous avez une vue claire de la base de code globale.

La chose la plus importante à tester est de savoir si la personne sera efficace pendant ces mois . Peu vous importe que la personne ne puisse rien comprendre du tout les deux premiers jours.

En demandant à une personne de lire un court morceau de code à partir de zéro, vous ne testez pas comment cette personne pourrait gérer un code codé familier et documenté de milliers de LOC .

3. Le maintien du code source ne se limite pas à sa lecture

Lorsque vous gérez une base de code, vous la modifiez . Un développeur qui ne fait que lire du code n'apporte rien d'utile à son entreprise.

Les compétences utiles sont la capacité de refactoriser le code , d' ajouter des tests unitaires , de prédire l'impact d'un changement , etc. Vous ne testez pas ces compétences en demandant à une personne de lire le code pendant l'entretien.

Arseni Mourzenko
la source
2

La lecture est une hypothèse basée sur le fait que la capacité d'écrire est présente. Considérez le concept dans n'importe quelle langue. La programmation n'est qu'un langage pour communiquer entre l'homme et la machine. Considérez une communication interhumaine. Si vous recrutiez quelqu'un pour être interprète de japonais, ne serait-il pas logique que s'il pouvait écrire un essai de 1 000 mots sur un sujet particulier, il serait capable de le lire?

En tant que programmeurs, notre activité principale est la création de code et la traduction d'idées abstraites en implémentations concrètes. Cela signifie généralement écrire. Je suis d'accord que la lecture est tout aussi critique, mais dans la grande majorité des cas, où la capacité d'écriture est présente, la capacité de lecture est également présente. Le seul vrai cas où je pourrais voir une différence notable serait dans un environnement où il y a beaucoup de cas très complexes qui ont évolué au fil du temps. Même compte tenu de ces derniers, cependant, vous ne vous attendriez pas à ce que quelqu'un puisse les lire et les comprendre sans au moins quelques études.

En outre, la lecture du code et l'explication de ce que vous pensez qu'il ne fait pas vraiment comprendre à un intervieweur comment vous utilisez vos compétences de pensée critique. Cela montre un peu d'analyse, mais la plupart des employeurs veulent voir si vous pouvez réfléchir sans être placé dans une boîte. Ils veulent savoir si vous pouvez saisir les concepts sans l'avantage (ou même la béquille) du code existant pour vous dire quoi ou comment faire quelque chose.

Joel Etherton
la source
Lisez-le, oui, comprenez-vous? ... pas nécessairement.
jmoreno
1
@jmoreno: Peut-être pas, mais étant donné le temps précieux, si vous demandez à un candidat d'écrire quelque chose de similaire, vous pouvez acquérir beaucoup plus de connaissances que vous pouvez le regarder lire quelque chose de complexe.
Joel Etherton
Je ne suis pas d'accord. Une fois que vous avez dépassé les implémentations triviales, la lecture de code est beaucoup plus difficile que l'écriture de code, et il existe un grand nombre de développeurs qui peuvent écrire du code mais ne peuvent pas lire le code existant, principalement parce que le code est tout au temps impératif. Pour utiliser la métaphore de la langue étrangère, les développeurs sont principalement des touristes riches qui doivent être suffisamment compris pour obtenir ce qu'ils veulent, mais ne ressentent pas le besoin de comprendre ce qui se dit autour d'eux.
Dan Monego
1
@DanMonego: Je comprends votre point, et ce n'est pas du tout que je suis en désaccord, mais la question est de savoir pourquoi la plupart des entretiens n'incorporent pas la lecture, pas quelle est la valeur de la lecture. La plupart des entretiens n'impliquent que des implémentations triviales, qu'il s'agisse de lecture ou de redressement en raison de la nature du temps.
Joel Etherton
1

Dans le passé, j'ai l'habitude de penser que la lecture du code devrait être quelque chose démontré dans les entretiens, mais au fil du temps, j'ai réalisé que c'est une perte de temps pour l'intervieweur et l'interviewé. Pourquoi? Parce que même les mauvais codeurs peuvent lire un snip-it de code.

Être capable de juger de la capacité de quelqu'un à lire du code ne devient pertinent que lorsque vous regardez quelque chose de complexe ou de code couvrant de nombreuses classes et fichiers. Être capable de tracer du code pour comprendre ce qu'il fait est un trait souhaitable, mais il n'y a tout simplement pas assez de temps pour que quelqu'un arrive avec un bon exemple (pas de code de production) ni de temps dans une interview pour poser une telle question .

Ainsi, les mauvais codeurs peuvent lire le code, mais ils ne peuvent pas bien l'écrire. Demander à voir des exemples de travail d'un candidat ou demander à un candidat d'écrire du code dans l'entretien est de bien meilleurs indicateurs de ses compétences. S'ils peuvent écrire du code concis propre, il y a de fortes chances qu'ils puissent lire le code était bien.

Je demande à chaque candidat que j'interroge une variante du problème FizzBuzz . C'est rapide, simple et peut normalement détecter les mauvais codeurs beaucoup plus rapidement que tout ce que j'ai trouvé. Un bon programmeur l'obtiendra très rapidement et facilement et vous donnera un aperçu rapide de leur style de codage et de leur processus de réflexion.

Tyanna
la source