Bons projets de programmation d'entrevues [clôturé]

26

Je suis à la recherche de petits projets de programmation que je peux donner à des employés potentiels pour évaluer leurs capacités de programmation. Ce seront des programmeurs tout droit sortis de l'université. Je suis à la recherche de projets qui prendraient quelques heures à quelqu'un et ils renverraient leurs réponses après l'entrevue.

Un exemple serait de prendre ce paragraphe de texte et de renvoyer une liste de mots uniques alphabétisés. Après chaque mot, dites-moi combien de fois le mot est apparu et dans quelle (s) phrase (s) le mot a apparu.

Quelqu'un a-t-il de bonnes suggestions?

bigtang
la source
Questions sur le concours de programmation ACM. Vous pouvez trouver une archive de ces questions ici .
whatsisname
1
Ces sites de puzzle de programmation vous intéresseraient-ils? programmers.stackexchange.com/questions/756/programming-puzzles/…
grokus

Réponses:

43

Je conclus depuis longtemps que rien de ce que quelqu'un peut faire en peu de temps ne peut me dire quelque chose d'utile sur cette personne. Mais chaque bon candidat a déjà écrit des projets personnels qui peuvent vous en dire beaucoup. J'ai donc remplacé les défis spécifiques par "donnez-moi un morceau de code dont vous êtes fier et heureux d'apposer votre nom".

Leur choix de projet vous en dit plus que n'importe quelle tâche d'une heure. Et puis vous pouvez passer une heure à en discuter pour en savoir encore plus.

pdr
la source
4
Je me souviens avoir interviewé dans une entreprise et avoir reçu une fonction assez simple (15-20 lignes) et avoir demandé "Qu'est-ce que cela fait?" Je leur ai dit, puis j'ai demandé "Est-ce que quelqu'un se trompe?". On m'a dit que la majorité des personnes interrogées ne pouvaient pas répondre. C'est peut-être une alternative rapide (je ne connais personne qui peut lire du code qui ne peut pas l'écrire, mais peut-être que je n'ai tout simplement pas rencontré les mauvaises personnes).
TMN
4
@TMN - Oh, nous le faisons aussi un peu. Mais je l' ai rencontré des gens qui peuvent lire le code et non l' écrire bien .
pdr
@TMN Étant autodidacte, j'ai passé beaucoup de temps à lire le code au début au point d'être bien meilleur pour le lire que pour l'écrire. Cela peut arriver et arrive, cela prend juste du temps et de la pratique pour élever la compétence d'écriture.
Jimmy Hoffa
28

Je suis tellement fatigué de cette merde jeu-esprit. J'ai visité des endroits qui m'ont demandé des exemples de code, les ont déchirés, puis m'ont demandé d'expliquer un exemple de code de leurs systèmes qui semblait avoir été écrit par des enfants de 2 ans. On m'a demandé d'implémenter des algorithmes de tri obscurs, des services réseau, des guis, des structures de données (toujours soit une arborescence soit une liste liée). Chaque saveur de tripoter une question ennuyeuse sur tout ce que l'enquêteur pense est la partie la plus importante de la programmation.

En fin de compte, tout cela est à peu près inutile. La meilleure façon d'évaluer un employé est de l'embaucher pour 30 jours et de voir dans quelle mesure il fait le travail. Passez tout le temps que vous voulez à développer des tests, et cela ne vous dira rien sur la façon dont quelqu'un travaille au quotidien.

Satanicpuppy
la source
8
Le codage d'un algorithme simple comme celui décrit dans le bigtang n'est pas du tout "mentalement". Être capable de faire quelque chose comme ça devrait être une condition préalable pour même obtenir un entretien (et c'est le cas dans mon entreprise). Il est très utile pour éliminer les candidats qui, autrement, auraient fière allure sur papier. La dernière chose que je veux faire est de passer des heures à interviewer quelqu'un qui ne peut pas écrire une fonction pour savoir si une chaîne est un palindrome. Vous seriez étonné du nombre de doctorants CS des meilleures écoles qui ne peuvent pas faire le test de bigtang. Bref, pouvoir effectuer un test comme celui-ci est nécessaire mais pas suffisant.
Jer
+1 @Jer. La dernière fois que j'ai interviewé un programmeur, six candidats sur huit n'ont pas pu accomplir les tâches les plus élémentaires (même avec Google et SO). Il n'y a aucun moyen de les laisser s'approcher de ma véritable base de code pendant cinq minutes, encore moins 30 jours.
Julia Hayward
2
@JuliaHayward: Je m'attendrais à ce que n'importe qui puisse réaliser un projet avec un accès donné au web / à la documentation. Le problème surgit lorsque quelqu'un commence à vous lancer des mots à la mode et des algorithmes de tri obscurs sans accès à Internet, sous la fausse supposition qu'avoir mémorisé diverses techniques de tri ou tout ce qui est essentiel à la performance quotidienne du travail.
Satanicpuppy
12

Permettre à quelqu'un de réaliser un projet pratique à son rythme ne signifie pas nécessairement que ce soit lui qui le fait.

Tout le monde arrive tôt pour un entretien (enfin, au moins). Nous avons une feuille «pendant que vous attendez» pour qu'ils travaillent jusqu'à ce que nous soyons prêts à les voir. Il contient huit (8) questions qui testent les connaissances des candidats dans la langue que nous utilisons principalement.

Nous ne recherchons pas les bonnes réponses, car tout le monde peut les trouver avec un ordinateur devant eux. Nous recherchons un processus, tentent-ils même la question, comment parviennent-ils à leurs réponses.

Lorsque nous entrons dans l'entrevue, nous passons en revue avec eux et répondons à toutes les questions qu'ils peuvent avoir, ce qui peut également les amener à obtenir la bonne réponse. Cela nous permet également de demander comment ils ont obtenu les réponses qu'ils ont trouvées.

Ceci, combiné avec les travaux précédents, nous trouvons, sont les meilleurs moyens de filtrer les candidats.

MISE À JOUR 2016/06/15

Nous avons considérablement modifié notre processus de recrutement de développeurs.

Phase 1: Un entretien téléphonique de 15 minutes où nous posons 7 questions. Les 2 premiers sont "Quelle est la chose la plus amusante sur laquelle vous avez travaillé?" (ne doit pas être lié à la programmation) et "Que codez-vous pour vous amuser pendant votre temps libre?".

Phase 2: Un mini projet qu'ils réalisent à leur rythme. Nous faisons ensuite un partage d'écran avec eux et ils nous montrent ce qu'ils ont construit. Pendant le partage d'écran, nous leur demandons également d'apporter deux modifications à leur projet, puis de les regarder travailler et le faire fonctionner.

Phase 3: Entretien en personne.

Ce processus nous permet de comprendre la culture adaptée immédiatement (phase 1). S'ils peuvent faire le travail et suivre leur discours (phase 2). Enfin, assurez-vous que leurs valeurs correspondent à ce que nous recherchons (phase 3).

RDL
la source
1
C'est en quelque sorte génial. Je l'aime!
davidhaskins
3
même si j'ai été dans de nombreuses interviews qui se transforment en anecdotes. Soyez prudent de ne pas vous enliser dans ce bit particulier de sysntax et d'entrer dans leur compréhension à grande échelle. Surtout s'ils sont censés avoir un peu de talent ou d'intérêt. le résultat était que je ne voulais pas travailler pour eux, et je suis sûr que c'était réciproque.
John Nicholas
"Permettre à quelqu'un de faire un projet pratique à son rythme ne signifie pas nécessairement que ce soit lui qui le fait" - Vrai, mais je n'ai pas encore rencontré quelqu'un assez courageux pour venir en entrevue et être interrogé sur le code qu'il n'a pas pas écrit. Si cela se produit, ils ne passeront pas l'entretien et leur probation, mais je vais peut-être reconsidérer mon approche.
pdr
@John. D'accord, ça ne peut pas être "oh, vous avez oublié une virgule". Comme je l'ai mentionné, c'est pour comprendre comment les choses se déroulent et s'ils comprennent la langue. S'ils savent que leurs affaires passent définitivement aux choses plus importantes.
RDL
2
@RDL, La plupart de notre processus d'entrevue est conçu pour être un peu amusant pour le type de développeur que nous recherchons et l'enfer pour le reste. Vous savez à quel point les bons développeurs ne peuvent pas résister à un défi.
pdr
4

Vous voudrez peut-être découvrir le fantastique Cyber-Dojo de Jon Jagger .

Il est un environnement intégré basé sur le Web conçu pour faire la pratique délibérée de Test Driven Development et l' apprentissage de la dynamique de l' équipe. Il a beaucoup de petites tâches de programmation (kata) et prend en charge une gamme de langages, de Python et Ruby à Java et C ++.

Contrairement aux IDE conçus pour la productivité, il n'y a pas de complétion de code, de mise en évidence de la syntaxe ou de refactorisation automatique, vous pouvez donc voir ce que votre interlocuteur peut faire sans ces derniers.

La meilleure chose est qu'après avoir fait un kata, vous pouvez ensuite revenir en arrière et regarder la progression rouge / verte (ou peut-être pas s'ils ne font pas TDD * 8 ') de chacun des kata. Chaque compilation / test valide les modifications dans un référentiel git avec les résultats du test.

Je pense que l'utiliser pour les tests de codage des entretiens pourrait vous en dire beaucoup non seulement sur la capacité des candidats à résoudre un problème, mais également sur leur approche de la résolution de problèmes et le processus qu'ils utilisent lorsqu'ils ne sont pas limités par des facteurs externes, il suffit de sélectionner un kata approprié au le temps que vous voulez que le candidat y consacre.

Si vous voulez votre propre serveur CyberDojo, tout le projet peut être trouvé sur github et il y a même une machine virtuelle d'appliance Linux clé en main liée à partir de là, ce qui signifie qu'en supposant que vous avez déjà installé VMware player ou VirtualBox , vous pouvez être opérationnel dans quelques minutes de téléchargement de l'appliance!

Mark Booth
la source
3

Je n'ai interviewé qu'une seule fois une entreprise qui l'a fait. Ils ont donné une feuille de questions de 6 ou 7 problèmes. Les instructions étaient de faire une méthode pour résoudre chaque problème.

Une partie de la tâche consistait à réaliser que vous pouviez réutiliser du code. Les problèmes peuvent utiliser du code provenant d'autres solutions. Ce n'était pas non plus séquentiel. Par exemple, la question 3 pourrait être écrite en utilisant la méthode utilisée pour la question 5.

Je suggère d'essayer quelque chose comme ça.

Quant aux questions? Certaines des premières questions sur le site du Projet Euler sont bonnes.

Vous pouvez également essayer un jeu simple si vous voulez voir comment ils peuvent monter un projet.

Ou, si vous ne voulez pas trouver quelque chose, demandez-leur de vous envoyer du code d'un projet final.

Tyanna
la source
3

Afin de demander aux gens de terminer un projet, vous devez avoir un ensemble spécifique de compétences que vous souhaitez évaluer à l'esprit et concevoir le projet pour tester ces compétences.

Un exemple serait de prendre ce paragraphe de texte et de renvoyer une liste de mots uniques alphabétisés. Après chaque mot, dites-moi combien de fois le mot est apparu et dans quelle (s) phrase (s) le mot a apparu.

Que recherchez-vous avec cette question? Combien y a-t-il de façons de le résoudre et que vous apprend chaque approche sur la personne qui a écrit la réponse? Les compétences démontrées par une réponse efficace à cette question sont-elles les mêmes compétences qui sont les plus importantes pour votre entreprise?

Je ne veux pas les réponses à ces questions; Je veux juste que vous ayez réfléchi aux réponses avant de soumettre un groupe de candidats à votre processus. Si vous savez quelles compétences vous recherchez, créer une question pour rechercher ces compétences n'est pas difficile. Si vous utilisez la question de quelqu'un d'autre sans une compréhension approfondie de ce qu'il a été conçu pour évaluer (le cas échéant), vous vous trompez vraiment et perdez le temps de tout le monde.

Caleb
la source
Désolé de vous avoir fait perdre votre temps.
bigtang
1
@bigtang, ce n'est pas ça du tout. Désolé si ce qui précède se présente comme une diatribe - je peux voir comment cela pourrait - mais mon objectif était de construire un dossier pour créer votre propre projet en fonction des compétences que vous recherchez dans les nouvelles embauches. Vous pouvez créer un petit projet à partir de presque n'importe quoi, mais pour que cela en vaille la peine pour vous et les personnes interrogées, les exigences doivent être motivées par les compétences que vous appréciez le plus.
Caleb
Suppression de la première phrase (respectueusement, si vous n'êtes pas assez intelligent pour proposer un projet décent par vous-même, qu'est-ce qui vous fait penser que vous êtes assez intelligent pour évaluer les soumissions des candidats? "). N'ajoutait pas vraiment de valeur et semblait un peu délirant.
Michael Durrant
0

Un exemple serait de prendre ce paragraphe de texte et de renvoyer une liste de mots uniques alphabétisés. Après chaque mot, dites-moi combien de fois le mot est apparu et dans quelle (s) phrase (s) le mot a apparu.

Dans quelle langue écriraient-ils cela? S'ils sortent d'une école qui se concentre fortement sur C, ce ne serait pas aussi rapide à écrire qu'une école qui enseigne Python / Perl / Ruby etc ... Ou même Java ou C #. Néanmoins, c'est un bon petit test.

J'en suggère quelques plus faciles en fait pendant l'entretien. Pas de questions pièges. Je suis avec TMN sur celui-ci. Donnez-leur quelques fonctions qui effectuent des tâches de base et demandez-leur ce qu'elles font (lire le code des autres). Donnez-leur ensuite quelques tâches de base (<20 lignes) pour écrire dans la langue de leur choix. Cela devrait être suffisant pour qu'un niveau d'entrée sache s'il peut coder ou non (à une position de niveau d'entrée). Cela, avec l'interview et GPA, devrait vous donner une bonne idée de ce que vous devez savoir.

Éveiller
la source
1
Je ne trouve pas le langage critique, cela peut même se faire avec du pseudo-code. L'idée principale est de voir si l'employé présomptif «y arrive» et montre de bons signes de résolution de problèmes.
Jonas Byström
Franchement, n'importe quel langage avec split () et tableaux / listes (avec push / append) rendrait cela trivial. Laissez un programmeur C «assumer» split () et lister, et cela devient tout aussi trivial :-)
ChuckCottrill
-1

Demandez-leur d'implémenter le jeu de la vie de Conway pour la langue que vous regardez, en utilisant les paradigmes de conception de cette langue.

Un jeu de vie Java ou C # Conway devrait être orienté objet, LISP ou F # serait fonctionnel, etc.

George Stocker
la source
2
Combien de temps leur donneriez-vous pour terminer cela?
Job
Cela me prend environ 4 heures pour passer à travers une implémentation complète de OO, mais je l'ai fait une douzaine de fois maintenant. Si vous voulez voir comment ils pensent et jusqu'où ils vont (et s'ils écrivent ou non du code testable), donnez-leur moins de temps que cela. Si vous le faites en personne, donnez-leur 45 minutes et voyez jusqu'où ils vont et pourquoi ils ont choisi le chemin qu'ils ont choisi. C'est l'un de ces problèmes que vous souhaitez qu'ils connaissent à l'avance afin qu'ils ne soient pas totalement perdus, même les encourager à l'essayer par eux-mêmes. Cela en dit long sur un programmeur.
George Stocker
8
Demander à un candidat de passer les tests Game of Life de Conway depuis combien de temps il était au collège, ou avoir écrit et étudié ce problème. Vous embaucheriez @George Stocker parce qu'il l'a écrit une douzaine de fois. Dans quelle mesure le jeu de la vie est-il fortement corrélé à un travail de développement réel?
ChuckCottrill