web-dev-qa-db-fra.com

Si votre algorithme est correct, cela importe-t-il combien de temps il vous a fallu pour l'écrire?

J'ai récemment découvert que Facebook avait un défi de programmation que, si cela 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 Tower of Hanoi Type Problème. Donné un certain nombre de piquets et de disques, une configuration initiale et finale; Votre algorithme doit déterminer les dernières étapes possibles pour accéder à la configuration finale et sortir les étapes.

Cet exemple de défi vous donne une limite de temps de 45 minutes, mais vous permet de tester toujours votre code pour voir s'il passe une fois que votre limite de temps expire.

Je ne connaissais aucune solution mathématique mathiquée qui pourrait le résoudre et je ne voulais pas en chercher un depuis que je pense que cela tricherait. J'ai donc essayé de résoudre le défi le meilleur que je puisse moi-même seul.

J'ai pu faire un algorithme qui a fonctionné et passé. Cependant, cela m'a pris plus de 4 heures pour faire, beaucoup plus de 45 minutes. Comme il m'a fallu tellement plus longtemps que le temps imparti, je n'ai pas tenté le défi réel.

Cela me demandait cependant, en réalité, cela compte vraiment que cela m'a fallu aussi longtemps? Je veux dire, c'est que c'est un signe que je ne pourrai pas trouver un emploi dans un endroit comme celui-ci (pas seulement sur Facebook, mais Google, Fog Creek, etc.) Et besoin de réduire mes aspirations ou du fait que j'ai réellement passé Lors de ma première tentative même si elle a pris trop longtemps être prise aussi bien?

11
JD Isaacks

Dans la pratique, il Do Peu importe combien de temps cela vous prend. Celui qui peut résoudre le problème en 45 minutes est - tout le reste égal - -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 mieux (bien nourri, pas fatigué, entièrement concentré)?
  • Le problème a-t-il été bien spécifié ou avez-vous besoin de faire des recherches supplémentaires sur votre propre?
  • Avez-vous eu à apprendre de nouvelles choses pour faire cela?
  • Les outils étaient-ils familiers ou non?
  • etc.

Toute personne et toutes ces choses pourraient influencer le temps qu'il vous faut, et il est en fait plus important de pouvoir résoudre un problème sous pression, sans être tout dit, et avec les outils à portée de main, car cela se produira pendant votre carrière. Et c'est généralement à un moment où il est très important pour quelqu'un que vous réussissiez ou non.

42
user1249

Il importe, à une entreprise qui recherche des développeurs généraux avec de bonnes 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, cela n'a pas d'importance autant comme votre capacité à résoudre des problèmes, et votre capacité à les résoudre bien.

Je peux penser à cinq types différents de solveurs de problèmes:

Ceux qui...

  1. ... Peut résoudre des problèmes rapidement, avec un Nettoyer et solution efficace.
  2. ... Peut résoudre des problèmes rapidement, mais avec un sale et solution inefficace.
  3. ... Peut résoudre des problèmes lentement, mais finissez avec un nettoyer et solution efficace.
  4. ... Peut résoudre des problèmes lentement, mais finissez avec un sale et solution inefficace.
  5. ... ne peut pas Résoudre les problèmes, soit rapidement, soit lentement.

Un test de style Facebook explicitement des mauvaises herbes 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 n ° 1 ou éventuellement # 2 candidats ( en fonction de la future dépistage).

Quelques exemples:

  • Un employeur comme Facebook Pourriez seulement rechercher # 1 programmeurs uniquement, car ils peuvent offrir des salaires énormes pour les programmeurs super-stages.
  • Un employeur qui a un volume élevé de ventes ponctuelles (comme certains magasins de conception Web) ne peut que souhaiter un # 2 Développeur, qui sont moins chers que les développeurs n ° 1 tout aussi efficaces.
  • Un employeur qui a un domaine problématique spécialisé (tel que le logiciel d'origine de l'écriture de prêt), pourrait accepter un # 3 Développeur sur un # 1 Développeur, puisqu'un développeur de génie à double degré pourrait être super coûteux, sinon ils pourraient être difficiles à trouver.
  • Un employeur qui ne se fiche pas ou a un budget limité Pour diverses raisons pourraient être ok avec un # 4 Développeur.
  • # 5 Les développeurs sont embauchés par des entreprises qui ne savent pas ce qu'ils recherchent et ne parviennent pas à dépasser ces candidats.
13
Kevin McCormick

La tour de Hanoi? C'était l'une des premières missions de programmation que j'ai eues sur mon parcours de première année à l'université (juste après Fibonacci - Oui, j'avais des cours avec l'un de ces freaks de programmation fonctionnelle :). Et je ne suis même pas sur la science informatique, je suis sur l'ingénierie informatique.

Et toujours, la plupart des "programmeurs" ne peuvent pas écrire correctement ce type d'algorithme, car la plupart des programmeurs sont affreux. (Recherche de Fizzbuzz pour plus de plaisir)

Quoi qu'il en soit, une fois que vous avez passé un certain seuil, je pense que vos compétences de programmation n'ont pas d'importance autant que votre capacité à terminer des projets, votre résilience contre des difficultés, etc. et il semble que vous ayez passé à coup sûr.

Facebook veut embaucher le Top Devs, 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 du temps avec des programmeurs terriblement mauvais.

Un conseil que j'entends toujours est que si vous voulez être embauché par une société Cool Tech, essayez de vous impliquer dans des projets open source. En outre, essayez d'obtenir un stage.

5
elias

Quand il y a beaucoup d'approvisionnement (de nombreux programmeurs potentiels) et une petite demande (peu d'emplois de programmation), les employeurs peuvent être aussi exigeants qu'elles souhaitent être. En fait, ils doivent être exigeants, sinon ils dépenseraient des difficultés excessifs d'interroger des personnes au lieu de faire du travail. Donc, ils donnent aux candidats des tests extrêmement durs afin d'obtenir une liste courte aussi rapidement que possible, afin de s'assurer qu'ils interviewaient des personnes qui ne sont pas simplement bonnes, pas même très bonnes, mais en réalité charismatique.

Donc, le fait que vous n'aviez pas terminé le test dans le délai imparti ne signifie pas que vous êtes un mauvais programmeur; Vous n'arrivez pas simplement à la définition de ce que Facebook considère que le charismatique. À mon avis, ça va.

3
Mike Nakis

Time Maters mais ne pas avoir l'idée que vous êtes stupide si cela vous prend plus longtemps. Beaucoup de gens ont des choses "mémorisées". Ils pratiquent d'appliquer des techniques telles que la récursivité qu'elle devient une nature de 2 cd. Ce n'est pas que leurs plus intelligents, ils ont juste pratiqué jusqu'au point de la nature 2CD et vous pouvez aussi!

Considérez le problème mathématique suivant: 2 + 2 =?

Si vous saviez immédiatement que la réponse était 4, ce n'est pas parce que vous êtes intelligent, mais parce que c'est la nature de la 2CD. Un enfant apprenant à ajouter peut être obligé de passer par les opérations les plus élémentaires de compter pour obtenir la réponse. Mais cet enfant peut avoir le potentiel de dépasser l'adulte.

0
Lord Tydus