Se il tuo algoritmo è corretto, importa quanto tempo hai impiegato per scriverlo? [chiuso]


11

Di recente ho scoperto che Facebook aveva una sfida di programmazione che, se completata correttamente, riceve automaticamente un'intervista telefonica.

C'è una sfida di esempio che ti chiede di scrivere un algoritmo in grado di risolvere un problema di tipo Torre di Hanoi . Dato un numero di pioli e dischi, una configurazione iniziale e finale; L'algoritmo deve determinare il minor numero possibile di passaggi per arrivare alla configurazione finale e generare i passaggi.

Questa sfida di esempio ti dà un limite di tempo di 45 minuti ma ti consente di testare ancora il tuo codice per vedere se passa una volta scaduto il limite di tempo.

Non sapevo di alcuna soluzione matematica carina che potesse risolverlo, e non volevo cercarne una poiché penso che sarebbe barare. Quindi ho cercato di risolvere la sfida il meglio che potevo da solo.

Sono stato in grado di creare un algoritmo che ha funzionato e superato. Tuttavia, mi ci sono volute più di 4 ore per fare, molto più lungo del requisito di 45 minuti. Dal momento che mi ci è voluto molto più tempo del tempo assegnato, non ho tentato la vera sfida.

Questo mi ha fatto pensare, in realtà importa davvero che mi ci sia voluto così tanto tempo? Voglio dire, è un segno che non sarò in grado di trovare un lavoro in un posto come questo (non solo Facebook, ma Google, Fog Creek, ecc.) E che ho bisogno di abbassare le mie aspirazioni, o fa il fatto che in realtà sono passato al mio primo tentativo anche se ci è voluto troppo tempo per essere considerato buono?


12
Qui importava: è abbastanza reale per te?

2
Perché credi che non lavorare per un grande nome .com implica che abbassi le tue aspirazioni?
mouviciel,

@mouviciel Non intendevo esattamente abbassare le mie aspirazioni di lavorare con un grande nome .com, ma piuttosto come lavorare per un'azienda in cui la programmazione è il ruolo principale rispetto a lavorare in un'azienda che fa qualcos'altro come il commercio al dettaglio dove nessuno capisce quello che fai.
JD Isaacks,

5
LOL al software Fog Creek incluso in Facebook e Google.
georgiecasey,

Risposte:


42

In pratica non importa quanto tempo impieghi. Uno che può risolvere il problema in 45 minuti è - tutto sommato uguale - cinque volte più produttivo di uno che richiede 4 ore, e quindi più attraente per un datore di lavoro.

Detto questo, non dici perché hai impiegato quattro ore per risolvere questo problema.

  • Eri al tuo meglio (ben nutrito, non stanco, completamente concentrato)?
  • Il problema è stato ben specificato o hai dovuto fare ulteriori ricerche da solo?
  • Hai dovuto imparare cose nuove per farlo?
  • Gli strumenti erano familiari o no?
  • eccetera.

Tutte queste cose potrebbero influenzare il tempo impiegato ed è effettivamente più importante essere in grado di risolvere un problema sotto pressione, senza che sia detto tutto e con gli strumenti a portata di mano, dal momento che ciò accadrà durante la tua carriera ed è di solito in un punto in cui è molto importante per qualcuno che tu ci riesca o no.


Grazie per la tua risposta. Per rispondere al motivo per cui mi ci è voluto molto, una parte è perché ho avuto un po 'di problemi a capire cosa fosse effettivamente necessario fare, una volta capito quella parte, ho dovuto ancora pensare un po' a elaborare un piano. Ad esempio, se un disco sta bloccando il disco, voglio spostarlo e devo prima spostarlo, dove dovrei spostarlo. La parte effettivamente programmata è stata la più breve, ma tutto si è aggiunto al tempo.
JD Isaacks,

@JohnIsaacks Quindi il problema era che non avevi familiarità con Towers of Hanoi. La maggior parte dei programmatori che conosco sono stati introdotti ad esso quando gli viene insegnato la ricorsione (ogni movimento del disco è essenzialmente "sposta il disco sopra di me su un piolo vuoto" che si adatta perfettamente alla ricorsione). Hai ricevuto un'istruzione formale e, in tal caso, a quale livello?

@ ThorbjørnRavnAndersen, non ho imparato nessuna programmazione a scuola. Sono autodidatta, ho imparato sul lavoro, dai libri, sperimentando, ecc. Non avevo familiarità con il gioco (tranne che per ricordare un gioco simile che si stava giocando nel pianeta delle scimmie), dovevo anche sapere a Google che era chiamato "Torri di Hanoi". Capisco la ricorsione (almeno penso di farlo) e l'ho usata qui. Ma semplicemente risolvere il puzzle sarebbe stato molto più facile per me, la parte più difficile era "Quale schema produrrà il minor numero di mosse possibili ogni volta".
JD Isaacks,

La programmazione di @JohnIsaacks è molto simile al modo di suonare il piano: puoi farti da solo, ma per diventare davvero bravo devi insegnare come fare le cose nel modo giusto da un insegnante esperto. Potresti approfondire come risolvere il puzzle ma trovare difficile la parte "è ottimale"?

Potrei fare una funzione ricorsiva che sposta un pezzo in posizione, allontana qualsiasi pezzo bloccante, quindi ricomincia dal pezzo successivo. A partire dal pezzo più grande e lavorando fino all'ultimo pezzo più piccolo. La parte "è ottimale" viene quando si sposta un pezzo di blocco. A seconda di dove lo sposti, può creare ulteriori passaggi non necessari. Ad esempio, spostare un 1 su un 3 bloccherà quindi il 3 e sarà necessario spostarlo di nuovo quando sarà il momento di spostare il 3. ma, a seconda della configurazione corrente, questo potrebbe non essere evitabile.
JD Isaacks,

13

È importante per un'azienda che è alla ricerca di sviluppatori generici con un buon flusso di cassa , perché più veloce significa che si può fare più lavoro. Tuttavia, in molti altri casi (direi nella maggior parte dei casi, in realtà), non importa tanto quanto la tua capacità di risolvere i problemi e la tua capacità di risolverli bene .

Posso pensare a cinque diversi tipi di risolutori di problemi:

Quelli che...

  1. ... può risolvere rapidamente i problemi , con una soluzione pulita ed efficiente.
  2. ... può risolvere rapidamente i problemi , ma con una soluzione sporca e inefficiente.
  3. ... può risolvere i problemi lentamente , ma alla fine con una soluzione pulita ed efficiente.
  4. ... può risolvere i problemi lentamente , ma finisce con una soluzione sporca e inefficiente.
  5. ... non è in grado di risolvere i problemi, né rapidamente né lentamente.

Un test in stile Facebook elimina esplicitamente i candidati n. 3, n. 4 e n. 5 poiché ha un limite di tempo, quindi sappiamo che questo test è per i datori di lavoro che hanno deciso di assumere solo candidati n. 1 o eventualmente n. 2 ( a seconda di ulteriori screening).

Qualche esempio:

  • Un datore di lavoro come Facebook potrebbe cercare solo i programmatori n. 1 , poiché possono permettersi enormi stipendi per i programmatori super star.
  • Un datore di lavoro che ha un volume elevato di vendite una tantum (come alcuni negozi di web design) potrebbe desiderare solo uno sviluppatore numero 2 , che sia più economico degli sviluppatori numero uno altrettanto efficaci.
  • Un datore di lavoro che ha un dominio problematico specializzato (come la scrittura di software di originazione di prestiti), potrebbe accettare uno sviluppatore n. 3 rispetto a uno sviluppatore n. 1 , poiché uno sviluppatore geniale a doppio grado potrebbe essere super costoso o potrebbe essere difficile da trovare.
  • Un datore di lavoro a cui non importa o che ha un budget limitato per vari motivi potrebbe essere a posto con uno sviluppatore numero 4 .
  • Gli sviluppatori # 5 vengono assunti da aziende che non sanno cosa stanno cercando e non riescono a escludere quei candidati.

5

Torre di Hanoi? Questo è stato uno dei primi incarichi di programmazione che ho avuto nel mio corso di matricola all'università (subito dopo Fibonacci - sì, ho avuto lezioni con uno di quei fanatici della programmazione funzionale :). E non sono nemmeno in informatica, sono in ingegneria informatica.

Eppure, la maggior parte dei cosiddetti "programmatori" non è in grado di scrivere correttamente questo tipo di algoritmo, perché la maggior parte dei programmatori è terribile. (cerca il fizzbuzz per un maggiore divertimento)

Comunque, una volta superata una certa soglia, penso che le tue capacità di programmazione non contano tanto quanto la tua capacità di portare a termine i progetti, la tua capacità di resistenza alle difficoltà, ecc. E sembra che tu lo abbia superato di sicuro.

Facebook vuole assumere i migliori sviluppatori, certo, ma non so quanti di loro sperano di ottenere con questo tipo di giochi. Penso che non vogliano perdere tempo con programmatori terribilmente cattivi.

Un consiglio che ho sempre sentito è che se vuoi essere assunto da una fantastica azienda tecnologica, cerca di essere coinvolto in progetti open source. Inoltre, prova a ottenere uno stage.


3

Quando c'è molta offerta (molti aspiranti programmatori) e una piccola domanda (pochi lavori di programmazione) i datori di lavoro possono essere tanto esigenti quanto desiderano. È un dato di fatto, devono essere esigenti, altrimenti passerebbero quantità eccessive di tempo a intervistare le persone invece di svolgere qualsiasi lavoro. Quindi, stanno sottoponendo i candidati a test estremamente duri in modo da ottenere una breve lista il più rapidamente possibile, e in modo da garantire che intervisteranno persone che non sono solo buone, nemmeno molto buone, ma in realtà carismatiche .

Quindi, il fatto di non aver completato il test entro l'intervallo di tempo assegnato non significa che sei un cattivo programmatore; semplicemente non ti capita di adattare la definizione di ciò che Facebook considera carismatico. Secondo me va bene.


0

Il tempo scade ma non ti viene l'idea che sei stupido se ti impiega più tempo. Molte persone hanno cose "memorizzate". Praticano l'applicazione di tecniche come la ricorsione così tanto che diventa natura 2cd. Non è che il loro più intelligente, hanno solo praticato al punto di natura 2cd e anche tu puoi!

Considera il seguente problema di matematica: 2 + 2 =?

Se sapessi immediatamente che la risposta era 4 non è perché sei intelligente, ma perché è la natura 2cd. Un bambino che impara ad aggiungere può essere costretto a passare attraverso le operazioni di base del conteggio per ottenere la risposta. Ma quel bambino potrebbe avere il potenziale per superare l'adulto.


-1

Alla gente non importa davvero quanto tempo passi a fare qualcosa; rispetta le tue scadenze e va tutto bene.


7
Quindi, quando la scadenza è "45 minuti da adesso" e finisci quattro ore dopo, la gente se ne preoccupa.

1
Ciò che Mehrdad significa è che puoi fare gli straordinari per rispettare le scadenze: D
quant_dev

1
Se devi fare gli straordinari per fare cose per le quali gli altri sviluppatori non avrebbero bisogno degli straordinari - non ti resta più niente da fare quando la cacca colpisce davvero il ventilatore ...
occulus

-1

È piuttosto teso, mi richiederebbe di leggere cos'è la torre di Hanoi -15min, avviare l'IDE, creare una soluzione vuota -5min, quindi sono solo 25 minuti per risolvere il problema. Scrivere semplicemente codice con tutti gli impianti idraulici come classi sicure con un buon design dell'interfaccia richiederebbe anche un po 'di tempo -10 minuti, quindi sono rimasti 15 minuti per l'idea reale. A seconda di quale sia la torre di Hanoi, potrebbe essere abbastanza, un po 'potrebbe non esserlo. E a volte, devo solo lasciare che il problema si risolva da solo mentre sto lavorando su altri problemi, perché non vedo la soluzione proprio lì sul posto. Quindi viene risolto gratuitamente in un thread parallelo, ma non accade in un istante.

Ad ogni modo, è una delle più grandi aziende, quindi possono fare quello che vogliono. Ma il limite di tempo è uno dei peggiori fattori nelle interviste IMHO, mi sento sempre pressato, affrettato, non riesco a fare tutto pulito e non posso concentrarmi su tutti i dettagli che sono molto importanti quando si lavora davvero. :) Certo che puoi risolvere rapidamente soluzioni, ad esempio, impostare l'accesso all'amministratore in modo che tutto 'SELECT * FROM pass WHERE usr == ' + user_inputfunzioni + , ma per qualsiasi attività sicura e ben scritta di cui sarei orgoglioso, avrei bisogno di un po 'di tempo e 45 minuti è davvero piuttosto intenso.


1
Penso che vogliono persone che ricordano semplicemente qual è il problema della Torre di Hanoi (è un classico).
quant_dev,

Avvio del tuo IDE e creazione di un progetto vuoto richiede cinque minuti? Se non conosci già Towers Of Hanoi, almeno fallo nell'ordine opposto in modo che l'IDE si stia caricando (da una VM su Internet apparentemente) mentre stai effettuando una ricerca!
Bryan Boettcher,

In un test come questo, non sono necessariamente alla ricerca di "una buona progettazione dell'interfaccia" e di "impianti idraulici" - mi aspetto che vogliano vedere la tua comprensione del problema e la capacità di formare un algoritmo per risolverlo. Se il linguaggio non fosse un vincolo, usare qualcosa come Java ed Eclipse è l'ultima cosa che farei. Userei Python e un editor di testo minimo / IDE compatto. (Non
sto
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.