Une interview «mauvais code» est une interview dans laquelle on montre à l'interviewé un extrait de «mauvais code» et on lui demande de le corriger ou de signaler des choses qui ne vont pas. J'ai des problèmes avec ces interviews car cela me prend un certain temps pour lire le code, comprendre ce qu'il fait et signaler les défauts. Dans une situation où le temps presse, j'ai tendance à geler et je vois que le code «devrait» fonctionner, même quand ce n'est pas le cas.
Quelle est la bonne façon de gérer ce type d'interview et, plus généralement, quelles sont les bonnes techniques pour lire et comprendre rapidement le code ?
interview
reading-code
quantique
la source
la source
Réponses:
Les entrevues de mauvais code (si elles sont effectuées correctement) devraient vous montrer le code avec les éléments suivants:
using
instruction en C # en cas de besoin, ou utiliser unArrayList
au lieu d'unList<T>
)ref
-nousout
autant de paramètres?)Il y a une liste de contrôle mental que vous devez parcourir, en touchant chacun des points ci-dessus. Si vous ne pouvez pas regarder le code et le faire, c'est un point d'amélioration. Quelle que soit la langue dans laquelle vous prétendez être «compétent», vous devriez pouvoir regarder un bloc de code et signaler ces quatre types d'erreurs.
J'ai récemment blogué sur un morceau de code qui présentait tous ces problèmes , cela devrait vous aider à passer par le même processus mental.
Ayende va plus loin avec sa série Wages of Sin .
la source
List<T>
qui contient desnull
éléments ...)N'essayez pas de le comprendre rapidement. Le but ici n'est pas de voir si vous pouvez comprendre le code comme un gourou, mais plutôt de voir comment vous pensez.
L'IMO clé est simplement de penser à haute voix. Donc, même si vous vous figez - alors dites simplement: "Je suis stressé ici, mais laissez-moi passer cela lentement à voix haute".
En supposant que vous ayez la compétence de penser à haute voix, vous ralentirez suffisamment pour vous remettre en forme. Si les entretiens sont assez avertis, ils verront votre situation et vous aideront jusqu'à ce que vous réfléchissiez clairement. Ils ne sont pas là pour essayer de vous inciter à avoir l'air stupide - juste une technique puissante pour voir comment vous pensez.
la source
Les chances sont que la «pression du temps» que vous ressentez est entièrement auto-imposée. Cela a plus à voir avec vos propres sentiments d'insécurité et de vous inquiéter de votre niveau de performance.
Le meilleur conseil que l'on puisse donner est: Détendez-vous. Prenez votre temps, regardez le code et parlez simplement de ce que vous voyez tel que vous le voyez. N'hésitez pas à parler des bonnes et des mauvaises parties; cela vous aidera à réduire votre nervosité et à vous inquiéter du fait que trop de temps passe.
De plus, le fait de passer par différentes «passes» pourrait faciliter un peu la détection de détails spécifiques. Faites un seul passage à la recherche d'accolades ou de fautes de frappe incompatibles. Faites un autre passage à la recherche de lignes obscurcies. Prenez-en un autre à la recherche de bretzels sémantiques. Se concentrer sur un type de «mauvaise chose» pourrait faciliter la détection de ces détails et (encore une fois) réduire votre voix intérieure en vous demandant si vous le faites rapidement / assez bien.
Surtout, parlez de ce que vous faites et pensez - cela vous aidera, vous et l'intervieweur, tous les deux.
la source
Je n'ai jamais participé à ce genre d'interview, mais lorsque j'essaie de travailler sur un morceau de code délicat que je soupçonne d'être mauvais, je me parle parfois tranquillement. Je trouve que la vocalisation aide parfois à résoudre les problèmes. Toujours dans une interview, vous pouvez essayer de retracer les étapes de l'exécution sous forme de diagramme ou de quelque chose avec un crayon et du papier. Cela fonctionnait pour moi à l'école, je le fais toujours parfois au travail. YMMV, bien sûr ...
la source
Je pense qu'un bon point de départ (si vous ne voyez rien d'évident) serait de le "déboguer". Sauf si vous voyez des problèmes possibles dès le départ, un bon point de départ est de faire une petite liste de valeurs de test. Les bonnes valeurs sont une valeur «normale» (normale), une valeur «zéro» ou «vide», des valeurs nulles, une très petite valeur (une chaîne de 1 caractère, l'int 1, etc.), une très grande ou très longue et des valeurs «étranges» spécifiques au type (par exemple, caractères Unicode pour les chaînes, nombres négatifs pour les entiers, etc.). Cela ne ferait pas de mal de mentionner que normalement vous écririez des tests unitaires en utilisant ces valeurs pour tester le code, et les exécuteriez simplement pour vérifier la fonction.
Commencez par parcourir vos valeurs de chemin heureux. Pour une fonction d'addition, vous pouvez commencer par 3 ou 4. Examinez chaque ligne pour les fautes de frappe et les erreurs logiques, en suivant les valeurs des variables locales au fur et à mesure. J'espère que vous trouverez quelques bugs. Lorsque vous aurez terminé avec le chemin heureux, vous aurez une meilleure idée du code et, espérons-le, vous vous sentirez un peu moins submergé - alors dites quelque chose comme: "Maintenant que j'ai une meilleure idée de ce que fait ce code, je suis va prendre du recul et y jeter un œil ", alors faites juste cela - en recherchant des choses qui vous paraissent différentes comme des choses que vous auriez faites différemment (mauvaises décisions de conception, variables mal nommées, enquêter sur des bogues possibles, etc.).
Si cela ne vous mène nulle part, ou si vous avez l'impression de manquer de choses à dire, revenez à votre liste de valeurs de test et parcourez-la à nouveau avec une nouvelle qui, selon vous, est susceptible de causer des problèmes.
Cela vous permettra au moins de démarrer.
la source
Comme l'a dit Stephen Bailey, penser à haute voix est une excellente technique dans cette situation car elle permet à vos enquêteurs de voir votre processus de réflexion. Expliquez en quelque sorte ce que vous essayez de comprendre. L'autre chose que vous pourriez faire est de faire savoir aux enquêteurs que vous allez lire le code correctement avant de fournir un diagnostic sur la méchanceté du code. J'ai été des deux côtés de la table et je sais que cela peut être frustrant pour les deux parties dans ces situations.
la source
Si vous ressentez moins de pression à le faire comme un test écrit, sortez votre ordinateur portable et commencez à prendre des notes. J'ai sorti un cahier et commencé à esquisser des notes dans le cadre de mon processus de réflexion dans une interview. Avoir un carnet et un stylo vous donne même l'air organisé. Vous pourriez noter quelques points à rechercher, la syntaxe, les erreurs logiques, les incompatibilités de types de données, les valeurs des variables locales (la liste peut varier en fonction du type de code que vous avez obtenu, ma liste pour un élément complexe de SQL serait être différent de quelqu'un qui a obtenu un morceau de code qui n'était pas centré sur les données) au cours du processus, etc. Une fois que vous en avez écrit quelques-uns, commencez à les rechercher. De cette façon, même si vous ne trouvez pas tous les problèmes avant que l'enquêteur ne souhaite passer à autre chose, il / elle pourra voir une liste des choses que vous alliez vérifier. Si vous créez au préalable une liste de contrôle des choses que vous voudrez peut-être rechercher, vous vous sentirez plus en confiance en commençant le processus en sachant quelles choses vous avez prévu de regarder. Habituellement, ces questions portent davantage sur la façon dont vous trouveriez les erreurs que sur la recherche de toutes.
la source
Je suis un peu en retard à cette fête, mais une technique que vous pourriez utiliser serait d'écrire des tests unitaires pour le code en question. Ensuite, vous pouvez vous concentrer moins sur ce qui est subtilement faux avec le code et plus sur les résultats attendus que vous recherchez. Je préfère embaucher quelqu'un qui peut écrire de bons tests que quelqu'un qui peut immédiatement détecter ce qui ne va pas avec un morceau de code.
la source
Il peut y avoir deux problèmes:
Il peut s'agir d'une "interview sur le stress" http://en.wikipedia.org/wiki/Job_interview#Stress . L'enquêteur essaie de voir comment vous gérez le stress, car son environnement de travail est tel.
OU
Vous pourriez être stressé vous-même. Dans ce cas, vous devrez gérer ce stress, par exemple, faire preuve d'introspection et voir comment vous pouvez rester calme.
la source