Si votre algorithme est correct, quel est le temps qu'il vous a fallu pour l'écrire? [fermé]

11

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?

JD Isaacks
la source
12
Cela importait ici - est-ce assez réel pour vous?
2
Pourquoi pensez-vous que ne pas travailler pour un grand nom .com implique que vous réduisez vos aspirations?
mouviciel
@mouviciel Je ne voulais pas exactement réduire mes aspirations de travailler avec un grand nom .com, mais plutôt travailler pour une entreprise où la programmation est le rôle principal vs travailler dans une entreprise qui fait autre chose que la vente au détail où personne ne comprend ce que vous faites.
JD Isaacks
5
Le logiciel LOL at Fog Creek est inclus avec Facebook et Google.
georgiecasey

Réponses:

42

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.

  • Étiez-vous à votre meilleur niveau (bien nourri, pas fatigué, entièrement concentré)?
  • Le problème était-il bien précisé ou avez-vous dû faire des recherches supplémentaires par vous-même?
  • Avez-vous dû apprendre de nouvelles choses pour ce faire?
  • Les outils étaient-ils familiers ou non?
  • etc.

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
Merci pour votre réponse. Pour répondre à la raison pour laquelle cela m'a pris du temps, une partie est parce que j'ai eu un peu de mal à comprendre ce que je devais réellement faire, une fois que j'ai compris cette partie, je devais encore réfléchir un peu pour élaborer un plan. Par exemple, si un disque bloque le disque que je veux déplacer et que je dois d'abord le déplacer, où dois-je le déplacer? La partie de programmation était en fait la plus courte, mais tout cela a ajouté du temps.
JD Isaacks
@JohnIsaacks Le problème était donc que vous ne connaissiez pas Towers of Hanoi. La plupart des programmeurs que je connais y ont été initiés lorsqu'ils ont appris la récursivité (chaque mouvement de disque consiste essentiellement à "déplacer le disque au-dessus de moi vers une cheville vide" qui correspond bien à la récursivité). Avez-vous reçu une éducation formelle et si oui, à quel niveau?
@ ThorbjørnRavnAndersen, je n'ai appris aucune programmation à l'école. Je suis autodidacte, j'ai appris sur le tas, par des livres, en expérimentant, etc. appelé "Tours de Hanoi." Je comprends la récursivité (au moins je pense que je le sais) et je l'ai utilisé ici. Mais simplement résoudre le casse-tête aurait été beaucoup plus facile pour moi, la partie la plus difficile était "Quel modèle produira le moins de mouvements possible à chaque fois."
JD Isaacks
La programmation @JohnIsaacks est un peu comme jouer du piano - vous pouvez devenir bon par vous-même, mais pour devenir vraiment bon, vous devez apprendre à bien faire les choses par un professeur expérimenté. Pourriez-vous nous expliquer comment résoudre le casse-tête mais trouver difficile la partie "est-ce optimal"?
Je pourrais créer une fonction récursive qui déplace une pièce en place, déplace n'importe quelle pièce bloquante, puis recommence avec la pièce suivante. En commençant par la plus grande pièce et en descendant jusqu'à la dernière plus petite pièce. La partie "est-elle optimale" provient du déplacement d'une pièce de blocage. Selon l'endroit où vous le déplacez, il peut créer des étapes supplémentaires inutiles. Par exemple, déplacer un 1 sur un 3 bloquera alors le 3 et devra être à nouveau écarté lorsqu'il sera temps de déplacer le 3. mais selon la configuration actuelle, cela peut ne pas être évitable.
JD Isaacks
13

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...

  1. ... peut résoudre les problèmes rapidement , avec une solution propre et efficace.
  2. ... peut résoudre les problèmes rapidement , mais avec une solution sale et inefficace.
  3. ... peut résoudre les problèmes lentement , mais aboutit à une solution propre et efficace.
  4. ... peut résoudre les problèmes lentement , mais se retrouve avec une solution sale et inefficace.
  5. ... ne peut pas résoudre les problèmes, rapidement ou lentement.

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:

  • Un employeur comme Facebook ne recherche peut-être que des programmeurs n ° 1 , car ils peuvent se permettre d'énormes salaires pour des programmeurs super-stars.
  • Un employeur qui a un volume élevé de ventes ponctuelles (comme certaines boutiques de conception Web) pourrait ne vouloir qu'un développeur n ° 2 , moins cher que les développeurs n ° 1 tout aussi efficaces.
  • Un employeur qui a un domaine de problème spécialisé (comme l'écriture d'un logiciel de création de prêt) peut accepter un développeur n ° 3 par rapport à un développeur n ° 1 , car un développeur de génie à deux degrés peut être très coûteux ou difficile à trouver.
  • Un employeur qui s'en fiche ou dont le budget est limité pour diverses raisons pourrait être d'accord avec un développeur n ° 4 .
  • Les développeurs n ° 5 sont embauchés par des entreprises qui ne savent pas ce qu'ils recherchent et ne filtrent pas ces candidats.
Kevin McCormick
la source
5

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.

elias
la source
3

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.

Mike Nakis
la source
0

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.

Lord Tydus
la source
-1

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.

user541686
la source
7
Ainsi, lorsque la date limite est "45 minutes à partir de maintenant" et que vous avez terminé quatre heures plus tard, les gens s'en soucient.
1
Ce que Mehrdad signifie, c'est que vous pouvez faire des heures supplémentaires pour respecter les délais: D
quant_dev
1
Si vous devez faire des heures supplémentaires pour faire des choses que les autres développeurs n'auraient pas besoin d'heures supplémentaires - il ne vous reste plus aucun arrêt à retirer lorsque le caca frappe vraiment le ventilateur ...
occulus
-1

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.

Codeur
la source
1
Je pense qu'ils veulent des gens qui se souviennent simplement du problème de la Tour de Hanoi (c'est un classique).
quant_dev
Démarrer votre IDE et créer un projet vierge prend cinq minutes? Si vous ne connaissez pas déjà Towers Of Hanoi, faites-les au moins dans l'ordre inverse pour que l'IDE se charge (à partir d'une machine virtuelle sur Internet, apparemment) pendant que vous effectuez des recherches!
Bryan Boettcher
Dans un test comme celui-ci, ils ne recherchent pas nécessairement une «bonne conception d'interface» et une «plomberie» - je m'attends à ce qu'ils veuillent voir votre compréhension du problème et votre capacité à former un algorithme pour le résoudre. Si le langage n'était pas une contrainte, utiliser quelque chose comme Java et Eclipse est la dernière chose que je ferais. J'utiliserais Python et un éditeur de texte minimal / IDE compact. (Ne pas dire que vous utiliseriez Java vous-même; dites simplement ...)
occulus