Se il tuo algoritmo è corretto, importa quanto tempo ci hai messo a scriverlo? [chiuso]

11

Recentemente ho scoperto che Facebook aveva una sfida di programmazione che, se completata correttamente, ottiene automaticamente un'intervista telefonica.

Esiste una prova 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; Il tuo algoritmo deve determinare il minor numero di passi possibili per arrivare alla configurazione finale e mostrare i passi.

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

Non sapevo di nessuna soluzione matematica carina che potesse risolverlo, e non volevo cercarne una perché pensavo che sarebbe stato un imbroglio. Così ho cercato di risolvere la sfida il meglio che potevo da solo.

Sono riuscito a creare un algoritmo che ha funzionato e superato. Tuttavia, mi ci sono volute più di 4 ore per fare, molto più a lungo dei 45 minuti richiesti. Dal momento che mi ci è voluto molto più tempo del tempo assegnato, non ho provato la vera sfida.

Questo mi ha fatto pensare, in realtà è davvero importante 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 ho bisogno di abbassare le mie aspirazioni, o il fatto che io in realtà sia passato al mio primo tentativo, anche se ci è voluto troppo tempo per essere considerato buono?

    
posta JD Isaacks 10.12.2011 - 04:09
fonte

7 risposte

42

In pratica importa quanto ci vuole. Uno che può risolvere il problema in 45 minuti è - tutto il resto 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 meglio (ben nutrito, non stanco, completamente concentrato)?
  • Il problema è stato ben specificato oppure hai dovuto effettuare ulteriori ricerche da solo?
  • Hai dovuto imparare nuove cose per farlo?
  • Gli strumenti erano familiari o no?
  • ecc.

Qualsiasi e tutte queste cose potrebbero influenzare il tempo che ci vuole, ed è in realtà più importante essere in grado di risolvere un problema quando si è sotto pressione, senza che gli venga detto tutto, e con gli strumenti a portata di mano, poiché ciò accadrà durante la tua carriera e di solito è in un punto in cui è molto importante per qualcuno se ci riesci o meno.

    
risposta data 10.12.2011 - 10:39
fonte
13

È importante, per un'azienda che sta cercando sviluppatori generici con un buon flusso di cassa , perché più velocemente significa più lavoro può essere fatto. Tuttavia, in molti altri casi (direi che nella maggior parte dei casi, in realtà), non importa tanto quanto la tua capacità di risolvere i problemi e il tuo capacità di risolverli bene .

Posso pensare a cinque diversi tipi di risolutori di problemi:

Quelli che ...

  1. ... può risolvere i problemi rapidamente , con una soluzione pulita ed efficiente.
  2. ... può risolvere i problemi rapidamente , ma con una dirty e una soluzione inefficiente.
  3. ... può risolvere i problemi lentamente , ma finire con una soluzione pulita ed efficiente.
  4. ... può risolvere i problemi lentamente , ma finire con una dirty e una soluzione inefficiente.
  5. ... impossibile risolvere i problemi, in modo rapido o lento.

Un test in stile Facebook espelle esplicitamente i candidati n. 3, n. 4 e n. 5 perché ha un limite di tempo, quindi sappiamo che questo test è per i datori di lavoro che hanno determinato che dovrebbero assumere solo il n. 2 candidati (a seconda dell'ulteriore screening).

Alcuni esempi:

  • Un datore di lavoro come Facebook potrebbe solo cercare solo i # 1 programmatori, dal momento che 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 solo volere uno sviluppatore # 2 , che è più economico del sviluppatori N ° 1 altrettanto efficaci.
  • Un datore di lavoro con un dominio problematico specializzato (come scrivere un software di origine del prestito) potrebbe accettare uno sviluppatore # 3 su un # 1 sviluppatore, dal momento che uno sviluppatore geniale dual-degree potrebbe essere super-costoso, o potrebbero essere difficili da trovare.
  • Un datore di lavoro a cui non interessa o ha un budget limitato per vari motivi potrebbe andare bene con uno sviluppatore # 4 .
  • Gli sviluppatori # 5 vengono assunti da aziende che non sanno cosa stanno cercando e non riescono a escludere quei candidati.
risposta data 10.08.2012 - 20:59
fonte
5

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

E tuttavia, la maggior parte dei cosiddetti "programmatori" non può scrivere correttamente questo tipo di algoritmo, perché la maggior parte dei programmatori è orribile. (cerca fizzbuzz per un maggiore divertimento)

Ad ogni modo, una volta superata una certa soglia, penso che le tue capacità di programmazione non contano tanto quanto la tua capacità di finire i progetti, la tua resilienza contro le difficoltà, ecc. E sembra che tu sia passato di sicuro.

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

Un suggerimento che sento sempre è che se vuoi essere ingaggiato da una società tecnologica, cerca di essere coinvolto in progetti open source. Inoltre, prova ad ottenere uno stage.

    
risposta data 10.12.2011 - 04:32
fonte
3

Quando c'è molta offerta (molti aspiranti programmatori) e una piccola richiesta (pochi lavori di programmazione) i datori di lavoro possono essere tanto esigenti quanto desiderano. In realtà, devono essere esigenti, altrimenti passerebbero moltissimo tempo a intervistare le persone invece di lavorare. Quindi, stanno offrendo ai candidati test estremamente duri per ottenere una lista breve il più rapidamente possibile, e in modo da assicurare che intervistano persone che non sono solo buone, nemmeno molto buone, ma in realtà carismatiche .

Quindi, il fatto che non hai completato il test entro il lasso di tempo assegnato non significa che tu sia un cattivo programmatore; semplicemente non si adatta alla definizione di ciò che Facebook considera carismatico. A mio parere, va bene.

    
risposta data 10.12.2011 - 09:58
fonte
0

I tempi sono maturi ma non ti viene l'idea che sei stupido se ti prende più tempo. Molte persone hanno cose "memorizzate". Praticano applicando tecniche come la ricorsione tanto da diventare natura 2cd. Non è che siano più intelligenti, si sono appena esercitati sul punto di 2cd natura e puoi farlo anche tu!

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

Se sapessi immediatamente che la risposta era 4 non è perché sei intelligente, ma perché è 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.

    
risposta data 10.12.2011 - 18:35
fonte
-1

Le persone non si preoccupano veramente di quanto tempo si spende facendo qualcosa; rispetta le scadenze e va tutto bene.

    
risposta data 10.12.2011 - 04:22
fonte
-1

È piuttosto teso, mi richiederebbe di leggere su Tower Tower di Hanoi -15min, avviare l'IDE, creare una soluzione vuota -5min, quindi sono solo 25 minuti per risolvere il problema. Basta scrivere un codice con tutti gli impianti idraulici come classi sicure con una buona progettazione dell'interfaccia richiederebbe anche un po 'di tempo -10min, quindi mancano ancora 15 minuti all'idea reale. A seconda di quale sia la torre su Hanoi, potrebbe essere sufficiente, potrebbe non esserlo. E a volte, ho solo bisogno di lasciare che il problema si risolva da solo mentre sto lavorando ad altri problemi, perché non vedo la soluzione immediatamente lì sul posto. Quindi viene risolto gratuitamente in un thread parallelo, ma non accade in un istante.

In ogni caso, è una delle più grandi aziende, quindi possono fare tutto ciò che vogliono. Ma il limite di tempo è uno dei peggiori fattori nelle interviste IMHO, mi sento sempre premuto, affrettato, non posso fare tutto pulito, e non posso concentrarmi su tutti i dettagli che sono molto importanti quando funzionano davvero. :) Certo, puoi risolvere velocemente le soluzioni, ad esempio, impostare l'accesso all'amministratore in modo che tutto funzioni + 'SELECT * FROM pass WHERE usr == ' + user_input , ma per qualsiasi compito sicuro e ben scritto di cui essere orgoglioso, avrei bisogno di un po 'di tempo e 45 minuti è davvero piuttosto intenso .

    
risposta data 10.12.2011 - 10:52
fonte

Leggi altre domande sui tag