J'ai récemment découvert que Facebook avait un défi de programmation qui, s'il est terminé correctement, vous obtenez automatiquement un entretien téléphonique.
Il y a un exemple de défi qui vous demande d'écrire un algorithme qui peut résoudre un problème de type Tour de Hanoi . Étant donné un certain nombre de chevilles et de disques, une configuration initiale et finale; Votre algorithme doit déterminer le moins d'étapes possible pour arriver à la configuration finale et produire les étapes.
Cet exemple de défi vous donne un délai de 45 minutes mais vous permet de tester votre code pour voir s'il passe une fois votre délai expiré.
Je ne connaissais aucune solution mathématique mignonne qui pourrait le résoudre, et je ne voulais pas en chercher une car je pense que ce serait de la triche. J'ai donc essayé de résoudre le défi de mon mieux.
J'ai pu créer un algorithme qui a fonctionné et réussi. Cependant, cela m'a pris plus de 4 heures à faire, beaucoup plus longtemps que l'exigence de 45 minutes. Puisqu'il m'a fallu beaucoup plus de temps que le temps alloué, je n'ai pas tenté de relever le défi.
Cela m'a fait me demander, en réalité, est-ce vraiment important que cela m'ait pris aussi longtemps? Je veux dire, est-ce un signe que je ne serai pas en mesure d'obtenir un emploi dans un endroit comme celui-ci (pas seulement Facebook, mais Google, Fog Creek, etc.) et que je dois baisser mes aspirations, ou le fait que je sois effectivement passé sur ma première tentative, même si cela a pris trop de temps être considéré comme bon?
la source
Réponses:
Dans la pratique , il ne importe combien de temps il vous faut. Celui qui peut résoudre le problème en 45 minutes est - toutes choses égales par ailleurs - cinq fois plus productif que celui qui prend 4 heures, et donc plus attrayant pour un employeur.
Cela dit, vous ne dites pas pourquoi vous avez pris quatre heures pour résoudre ce problème.
Toutes ces choses peuvent influencer le temps qu'il vous faut, et il est en fait plus important de pouvoir résoudre un problème sous pression, sans tout dire, et avec les outils à portée de main, car cela se produira au cours de votre carrière et c'est généralement à un point où il est très important pour quelqu'un que vous réussissiez ou non.
la source
Cela importe, pour une entreprise qui recherche des développeurs généraux avec un bon flux de trésorerie , car plus rapide signifie que plus de travail peut être fait. Cependant, dans de nombreux autres cas (je dirais dans la plupart des cas, en fait), cela n'a pas autant d'importance que votre capacité à résoudre des problèmes et votre capacité à bien les résoudre .
Je peux penser à cinq types différents de solutionneurs de problèmes:
Ceux qui...
Un test de type Facebook élimine explicitement les candidats n ° 3, n ° 4 et n ° 5 car il a une contrainte de temps, nous savons donc que ce test est destiné aux employeurs qui ont déterminé qu'ils ne devraient embaucher que des candidats n ° 1 ou éventuellement n ° 2 ( en fonction de la sélection ultérieure).
Quelques exemples:
la source
La tour de Hanoi? Ce fut l'une des premières affectations de programmation que j'ai eues lors de mon cours de première année à l'université (juste après Fibonacci - oui, j'ai eu des cours avec l'un de ces monstres de programmation fonctionnelle :). Et je ne suis même pas en informatique, je suis en génie informatique.
Et pourtant, la plupart des soi-disant «programmeurs» ne peuvent pas écrire correctement ce type d'algorithme, car la plupart des programmeurs sont horribles. (recherchez fizzbuzz pour plus de plaisir)
Quoi qu'il en soit, une fois que vous avez dépassé un certain seuil, je pense que vos compétences en programmation importent moins que votre capacité à terminer des projets, votre résilience contre les difficultés, etc. Et il semble que vous l'ayez dépassé à coup sûr.
Facebook veut embaucher les meilleurs développeurs, bien sûr, mais je ne sais pas combien d'entre eux ils espèrent obtenir avec ce genre de jeux. Je pense qu'ils ne veulent tout simplement pas perdre de temps avec des programmeurs terriblement mauvais.
Un conseil que j'entends toujours est que si vous voulez être embauché par une entreprise de technologie cool, essayez de vous impliquer dans des projets open source. Essayez également d'obtenir un stage.
la source
Lorsqu'il y a beaucoup d'offre (beaucoup de programmeurs potentiels) et une petite demande (peu d'emplois de programmation), les employeurs peuvent être aussi exigeants qu'ils le souhaitent. En fait, ils doivent être exigeants, sinon ils passeraient des quantités excessives de temps à interviewer des gens au lieu de faire du travail. Ainsi, ils donnent aux candidats des tests extrêmement difficiles afin d'obtenir une liste courte aussi rapidement que possible, et afin de s'assurer qu'ils vont interviewer des gens qui ne sont pas seulement bons, pas même très bons, mais réellement charismatiques .
Ainsi, le fait que vous n'ayez pas terminé le test dans le délai imparti ne signifie pas que vous êtes un mauvais programmeur; vous n'arrivez tout simplement pas à correspondre à la définition de ce que Facebook considère comme charismatique. À mon avis, ça va.
la source
Le temps compte, mais ne vous rendez pas compte que vous êtes stupide si cela vous prend plus de temps. Beaucoup de gens ont des choses "mémorisées". Ils pratiquent tellement l'application de techniques comme la récursivité que cela devient une nature 2cd. Ce n'est pas que leur plus intelligent, ils ont juste pratiqué au point de la nature 2cd et vous pouvez aussi!
Considérez le problème mathématique suivant: 2 + 2 =?
Si vous avez immédiatement su que la réponse était 4, ce n'est pas parce que vous êtes intelligent, mais parce que c'est la nature 2cd. Un enfant qui apprend à ajouter peut être contraint d'effectuer les opérations de comptage les plus élémentaires pour obtenir la réponse. Mais cet enfant peut avoir le potentiel de dépasser l'adulte.
la source
Les gens ne se soucient pas vraiment du temps que vous passez à faire quelque chose; il suffit de respecter vos délais et tout va bien.
la source
C'est assez tendu, il me faudrait lire ce qu'est la tour de Hanoi -15min, démarrer l'IDE, créer une solution vierge -5min, donc ce n'est que 25 minutes pour résoudre le problème. Écrire simplement du code avec toute la plomberie comme des classes sûres avec une bonne conception d'interface nécessiterait également un peu de temps -10 minutes, il reste donc 15 minutes pour l'idée réelle. En fonction de ce qu'est la tour de Hanoi, cela pourrait être suffisant, mais peut-être pas. Et parfois, je dois juste laisser le problème se résoudre lui-même pendant que je travaille sur d'autres problèmes, car je ne vois pas la solution sur le champ. Il est donc résolu gratuitement dans un thread parallèle, mais cela ne se produit pas en un instant.
Quoi qu'il en soit, c'est l'une des plus grandes entreprises, afin qu'elles puissent faire ce qu'elles veulent. Mais le délai est l'un des pires facteurs dans les entretiens à mon humble avis, je me sens toujours pressé, pressé, je ne peux pas tout nettoyer et je ne peux pas me concentrer sur tous les détails qui sont très importants lorsque je travaille réellement. :) Bien sûr, vous pouvez résoudre des solutions rapidement, comme définir l'accès à l'administrateur pour que tout fonctionne +
'SELECT * FROM pass WHERE usr == ' + user_input
, mais pour toute tâche sécurisée et bien écrite dont je serais fier, il me faudrait du temps et 45 minutes est vraiment assez intense.la source