web-dev-qa-db-fra.com

Les questions d'algorithme sont-elles de bonnes questions d'entrevue?

J'ai récemment eu un argument avec un autre programmeur. Il interviewait pour un nouveau poste et a été posé à cette question:

Donnez une séquence de nombres à partir de x et se terminant par Y mais avec un élément manquant alors N est Y-X-1, trouvez l'élément manquant dans O(N) ou mieux.

Maintenant, la réponse est sans importance ici (mais intéressante). Cela a commencé une discussion sur la question de savoir si cela était même une bonne question à poser lors d'une interview.

Un côté: les algorithmes sont une partie hérite de la programmation et une capacité de candidats à répondre à cette question soutient que ce candidat sera un bon programmeur et être capable de résoudre des problèmes plus importants et de gérer la plupart des tâches de programmation, qui sont finalement faciles à comprendre et à répondre.

Autre campeur: les algorithmes d'écriture de zéro sont rarement utilisés dans la programmation moderne et ne sont donc pas pertinents dans la plus grande question de savoir si la personne sera un bon programmeur. Une personne pourrait répondre à cette question avec succès pourtant ne pas être capable de faire des tâches de programmation plus courantes.

Tes pensées? Bonne question d'entretien ou pas?

25
MBonig

Je suis d'accord avec demander une question d'algorithme, mais je suis en désaccord avec insister sur un niveau de qualité spécifique.

Demander à ce type de question est intéressant de voir comment la personne s'approche du problème et des pièges qu'ils considèrent dans leur tentative, mais à moins d'écrire quelque chose d'incroyablement incorrect ou inefficace le détail réel de ce qu'ils écrivent n'est pas aussi raconté que possible Parcourez les étapes de résolution/de conception de problèmes de manière cohérente.

Je pose une question similaire, mais les gens que j'ai eu la meilleure chance après la location sont les gens qui ont donné des réponses imparfaites mais ont eu la bonne idée de leur approche.

20
Bill

Je serais en désaccord avec l'idée que la capacité d'écrire des algorithmes est sans importance dans la plus grande question de savoir si la personne sera un bon programmeur. Même s'il ne doit jamais l'utiliser, (qui est douteux, il montre toujours s'il a la flexibilité mentale nécessaire pour élaborer une solution logique à un problème plus compliqué qu'un simple ensemble d'exigences qui sont déjà rédigées et aménagées. en détail par le client.

Je ne voudrais certainement pas embaucher quelqu'un qui ne sait pas comment penser et analyser. C'est ce qui fait la différence entre un singe de code et un programmeur informatique.

9
Mason Wheeler

Je dois admettre ici que je suis l'un de ceux qui aiment poser des questions d'algorithme dans des entretiens, mais je dois souligner que la réponse réelle à la question est absolument non pertinente. Je ne me soucie pas du moindre si l'interviewé connaît la réponse ou non. À la place, pour moi, cette question cible différents aspects, comme le suivant - par ordre d'importance:

Conditions

De telles questions sont délibérément sous-spécifiées. Dans votre exemple, il n'y a pas de détails supplémentaires donnés sur la séquence. Si vous avez une personne interrogée qui vous demande si ces chiffres sont en fait triés, alors c'est un bon signe. Il a l'état d'esprit correct de demander aux clients de plus amples détails, ce qui aidera à venir à une meilleure solution dans une période plus courte. Le candidat peut également jouoir avec l'idée d'utiliser O(n) espace pour stocker un tableau de n chiffres, mais il ne devrait pas faire cela sans demander plus de détails sur X et Y. Soyons que X et Y sont compris entre 1 et 1000, puis bien sûr, allez-y et enflammez une solution à base de tableau. Mais si je vous dis que l'intervalle est 1 et 1 milliard, le problème devient totalement différent. Permettez-moi de me souligner , que je me fiche de la solution. Je veux voir si le candidat peut trouver la distinction entre ces problèmes, qui sont immensément différents.

Techniques standard

Je ne veux pas embaucher un programmeur qui ne sait même pas ce que O(n) signifie. C'est un must absolu si vous aviez une éducation décente dans ce domaine. Mais Il est également important de ne pas savoir ce que cela signifie, mais d'appliquer réellement cette connaissance. Dans votre exemple, je veux que un candidat se rendit compte qu'il n'est pas autorisé à trier les données (sans demander d'autres questions ciblant l'option de Un tricateur de seau ou d'autres O(n) approches de tri) en raison du tri requis O (n log n) en général.

De même, d'autres algorithmes interrogent les techniques standard telles que l'arborescence ou la récursivité. Un candidat peut glisser sur l'une de ces techniques, ce qui ne fait pas une bonne impression. Dans de tels cas, cependant, j'aime creuser plus profondément pour déterminer si le candidat a du tout de plan CS. Bien sûr, cela dépend de ce que la position cible est, mais généralement un développeur qui ne connaît pas les complexités d'exécution, ni des structures de données typiques et leurs traverser, ne sera pas d'aide.

Mindset de problème de problème

Après avoir posé la question, vous surveillez de près le candidat. Comment réagit-il? Vous obtenez les meilleurs résultats ici des candidats qui n'ont absolument aucun indice sur la manière de résoudre le problème au début. À cet égard, la question vérifie ce qui pourrait arriver si une situation similaire survient sur le lieu de travail plus tard. Vous pouvez arriver à travers un tel problème pendant votre développement et il est bon de savoir comment votre candidat traite ces problèmes, même s'il n'est pas capable de le résoudre tout seul.

Exemple: vous ne voulez pas que votre candidat passe en mode silencieux pendant la demi-heure suivante! Vérifiez s'il peut proposer des questions intelligentes (voir les exigences), vérifiez s'il commence à penser à la boîte une fois qu'il réalise qu'il ne peut pas le faire. Même une "lutte amusante" contre-question comme un "puis-je utiliser l'option Phone-A-CO-travailleur?" est un bon signe.

Comment répondre

En général, les meilleures réponses que vous pouvez donner pour ce type de questions sont des contre-questions! Dire à une réponse à droite échoue dans l'ensemble, et n'est en fait pas une bonne réponse, car toutes ces questions indiquent à des compromis, que votre réponse implique, sans que vous disposiez de l'information requise pour que les informations requises ne soient pas encore intelligemment. troquer. Bien sûr, la qualité des contre-questions varie entre les candidats.

En tant que note générale sur les questions d'entrevue: les contre-questions sont rarement une mauvaise chose. Dans l'une de mes propres entretiens, j'étais par exemple posé quelque chose comme ce qui suit: "Si vous devriez mettre en œuvre X, choisiriez-vous C++ ou Java pour cela, et pourquoi?" - Je suis simplement contré de "suis-je limité à ces deux?". Devinez pour vous-même, quel genre de réaction vous obtenez d'un intervieweur pour une telle contre-question - et à quel point il est facile de montrer à l'intervieweur ce que vous êtes capable de.

6
Frank

Sauf si vous posez des questions sur les algorithmes/formules, le candidat doit savoir pour le travail (dynamique des fluides, par exemple, si la position exige cela), je ne vois pas leur valeur. Le candidat est probablement probablement inquiétant de la façon dont ils sont habillés, comment ils se parlent, etc. Ils peuvent répondre à une question de mathématiques sur place ne prouvent rien d'autre que peut-être comment ils pourraient sur une émission de jeu de télévision.

Quand j'invieille, je ne demande même pas aux questions de "programmation" en soi. J'ai le candidat décrire leurs projets passés, comment leur code a obtenu des objectifs, quelles sont leurs approches, etc., je peux dire assez rapidement si le candidat sait ce qu'il fait ou s'il est une position.

5
GrandmasterB

Je conviens que les programmeurs doivent connaître très bien des algorithmes, même avec de nouveaux cadres fantaisistes, mais je ne suis pas totalement convaincu d'un tae de cerveau dans une interview. Ma plus grande préoccupation serait que dans un environnement réel, vous écrivez des algorithmes dans des conditions très différentes; AKA, pas sous pression avec quelqu'un qui vous regarde tous les stylos, avec au moins plusieurs minutes pour le penser en silence. Pour ceux qui préconisent cette méthode d'évaluation, combien de temps donnez-vous généralement à la personne la résoudre? Je crois que le code n'est pas tellement de lancer une solution dans une terreur fébrile de 3 minutes, alors convaincue que cela est vraiment un bon moyen de voir comment quelqu'un gérera une tâche quotidienne.

4
Morgan Herlocker

Le problème de cette question spécifique est que c'est presque une question truc. Avec une perspicacité particulière, vous trouverez facilement O (n), sinon vous aurez du mal à aller mieux que O (n log n). Cela réduit presque "Avez-vous vu celui-ci avant?"

Je ne suis pas sûr qu'il y ait de bonnes questions algorithmiques. Si vous avez posé une question basée sur la théorie du graphique, dites-vous, cela dépendrait de la familiarisation de la personne interrogée avec la théorie des graphes - et si vous l'embauchez, il pourrait être au courant de la théorie des graphiques assez rapidement. Encore une fois, nous sommes de retour à "Avez-vous été exposé à cela avant?"

Il n'y a pas de temps dans une interview régulière pour faire de graves résolution de problèmes, et je m'approche différemment lorsque je peux m'asseoir, utiliser Wikipedia et prendre généralement du temps pour comprendre les choses. Il n'ya probablement pas le temps que l'intervieweur discute de ce que la personne interrogée sait en détail et choisit une question algorithmique convenable.

2
David Thornley

Vous voulez une question qui vous donnera un aperçu du candidat. Une question d'algorithme peut donner une bonne réponse ou non. Et je ne parle pas d'eux de pouvoir y répondre ou non. S'ils travaillent à travers cela, et que vous comprenez et suivez leur raisonnement, c'est un bon indicateur. S'ils sont assis là, pas de réponse réelle, ne semblez même pas savoir où commencer, c'est un mauvais indicateur (peut-être). Le problème serait que certaines personnes gèlent et différencie le gel de ne pas avoir de problèmes de résolution de problèmes peut être difficile.

Les gens se plaindront de demander à peu près tout ce qui concerne les entretiens, pour diverses raisons. Le demandeur peut geler, le demandeur aurait pu vienner à regarder cette question, le demandeur peut ne pas savoir que le morceau de trivia/technologie/peu importe. Tout cela est vrai, mais une interview a toujours besoin de se produire et beaucoup d'entre nous dans ce métier détestent cela. Nous détestons l'idée de quelqu'un assise en jugement de nous. Nous évoquons immédiatement des raisons pour lesquelles nous pourrions être jugés injustement ou comment le test pourrait être faux ou gamed. En bout de ligne est, peu importe.

Ce que vous voulez vraiment, c'est un intervieweur ayant la capacité de déterminer des compétences pouvant être présentées ou non au cours de l'entretien. Les questions sont juste des outils. Pour moi, tous les marteaux ressemblent à la même chose. Mais à quelqu'un assez qualifié avec eux, je suis sûr qu'il y a une différence.

1
Jeremiah Nunn

J'ai plusieurs questions d'algorithme que j'utilise régulièrement, dont certaines sont très difficiles. Je les utilise pour voir comment ils attaquent mentalement un problème et pour voir s'ils grokent certains concepts. (J'ai vu beaucoup trop de candidats au développeur qui ne comprennent tout simplement pas les pointeurs.)

1
John Franklin

J'aime les questions d'algorithme, parce que c'est ce que nous faisons. J'aime les contraintes, parce que c'est ce que nous utilisons. Big-O est particulièrement pertinent dans mon secteur.

Je n'aime pas obliger les réponses à ces types de questions "Écrivez le code sur le tableau blanc". La personne interrogée devrait être en mesure de parler intelligemment de l'approche de la solution et de participer à une discussion en cours car les intervieweurs modifient les exigences alors que la discussion est en cours.

La question initiale est posée, l'interviewé dit: "Commencez au début et en mars vers la fin à la recherche du" trou "". L'intervieweur dit que c'est trop lent, car n est Gargantuan. L'interviewé commence à discuter de la recherche binaire. L'intervieweur dit que toutes les données soudaines ne sont plus triées. L'interviewé dit "Trier alors la recherche". "Maintenant c'est trop lent". Etc.

0
dash-tom-bang