Dovrei essere preoccupato per i compiti di programmazione eccessivamente ingegneristici dati durante il processo di intervista? [chiuso]


27

Di recente ho avuto un'intervista telefonica con una società. Dopo quell'intervista telefonica, mi è stato detto di completare un breve incarico di programmazione (un piccolo programma; non dovrebbe richiedere più di tre ore). Sono stato incaricato direttamente di completare l'incarico e di inserire il codice. Mi è stata data la completa libertà di utilizzare qualsiasi lingua desiderassi e non mi è stato detto esattamente come inserire il codice.

Ho pianificato immediatamente di lanciarlo su Github, scrivendo una suite di test per esso, usando Travis-CI (integrazione continua gratuita per i repository Github pubblici) per eseguire le suite di test e usando CMake per creare i makefile Linux per Travis-CI. In questo modo, non solo posso dimostrare di comprendere come usare Git, CMake, Travis-CI e come scrivere i test, ma posso anche semplicemente collegarmi alla pagina Travis-CI in modo che possano vedere l'output dei test. Ho pensato che l'avrebbe reso un po 'più conveniente per l'intervistatore.

Dato che conosco bene queste tecnologie, non aggiungerebbe sostanzialmente tempo al compito.

Tuttavia, sono un po 'preoccupato che fare tutto questo per un compito relativamente semplice sembrerebbe negativo. Anche se non aggiungerebbe molto più tempo per me, non voglio che pensino di passare troppo tempo a cose che dovrebbero essere semplici.


5
Starei attento a dare le risposte ai problemi di intervista su github, poiché ad alcune aziende piace mantenere riservati i loro problemi.
Scroog1,

7
Le domande sono disponibili pubblicamente sul loro blog (mi hanno inviato un link al post del blog), quindi non credo che siano interessate a questo.
DormoTheNord,

3
@DormoTheNord Direi che non sei un ingegnere eccessivo: avere un buon processo di sviluppo è qualcosa di completamente diverso dall'ingegnerizzazione ed è (IMO) un buon segno.
K.Steff,

3
Trascorrerei un po 'di quel tempo extra a documentare eventuali aree grigie nella specifica del problema, ipotesi, limitazioni, .... Mostra che non ti immergi solo nel codice, ma contempli il problema e il suo contesto.
HABO,

4
@DormoTheNord Le domande possono essere pubbliche, ma lo saranno anche le tue risposte. Sarà disponibile per altri intervistati, se riescono a trovarlo. Quello , probabilmente non gli piacerà.
Izkata,

Risposte:


29

Come intervistatore sarei felice di vedere la conoscenza del processo di sviluppo del software dimostrato da questo approccio; al contrario della semplice scrittura del codice.

In particolare, avere una suite di test per problemi anche molto semplici sarebbe un buon segno (anche a livello di FizzBuzz). Ho visto candidati presentare soluzioni che non hanno nemmeno risolto il problema e una semplice serie di test li avrebbe mostrati. Inoltre, avere la cronologia del commit mi permette di avere un'idea del processo di pensiero che il candidato ha usato per arrivare alla soluzione.

D'altra parte, ho conosciuto persone che sono state respinte da alcune aziende in una fase iniziale del processo di over-engineering. Tuttavia, nella maggior parte dei casi, ciò è dovuto all'ingegnerizzazione eccessiva della soluzione, non necessariamente ai processi utilizzati.


2
Andresti così lontano a dire che se una società mi rifiutasse di fare ciò che ho intenzione di fare, sarebbe un segno che la società non rispetta le metodologie di sviluppo del software e che preferirei non lavorare per quella società?
DormoTheNord,

7
Non andrei necessariamente così lontano, dato che c'è una certa fortuna (purtroppo). Potresti ottenere un intervistatore a cui non è piaciuto questo approccio; o potrebbero essere di cattivo umore quel giorno e non voler esaminare i dati extra forniti da questo approccio. Detto questo, di solito non c'è nulla di male nel chiarire il livello di dettaglio che vogliono. Inoltre, porre una o due domande chiarificatrici può essere un buon segno anche per l'intervistatore (anche se ovviamente non le bombarda continuamente con domande non informate).
Scroog1,

+1 - fintanto che non toglierai nulla alla soluzione, vorrei vedere i test unitari e qualsiasi altra cosa tu faccia senza chiedere conferma.
Telastyn,

1
Il troppo da esaminare attraverso il rischio potrebbe essere mitigato inviando sia un link github di base, sia un link direttamente al solo codice sorgente per il test per il pigro / occupato.
Dan Neely,

15

Avere come intervistato qualcuno che capisse cose come il controllo di versione, CI, test unitari e simili sarebbe un passo avanti rispetto a ciò che di solito vedo.

Anche se, per me, la cosa più importante è che il problema è risolto e risolto bene, sapendo che il candidato ha capito i modi per migliorare la qualità del loro risultato avrebbe sicuramente attirato la mia attenzione.

Quello che vedo generalmente sono persone che non solo non capivano il problema, ma che non capivano anche come risolvere il problema, e venivano ignorate indipendentemente da quanti strumenti extra usavano nel processo.


6

Tieni presente che esiste un limite di tempo. L'intervistatore lo sa, quindi questo significa che (se fossi l'intervistatore) vedrà che non solo hai risolto il problema entro il tempo prestabilito, ma lo hai fatto così rapidamente che ti è rimasto del tempo per la doratura, che è un buon segno del tuo capacità di problem solving e apprezzamento del rigore e della diligenza.

L'ingegnerizzazione eccessiva è una parolaccia quando si creano AbstractFactoryManagerAdaptors che vengono collegati per distribuire BuzzManager e FizzManager solo per risolvere FizzBuzz.

Quello che stai facendo è un'eccessiva diligenza, che non è nemmeno una cosa (anche se sicuramente la sotto diligenza lo è).

Detto questo, se finisci col passare del tempo o con una soluzione parzialmente compromessa perché hai usato il tuo tempo sugli extra che affermi "non aggiungere affatto tempo", sembrerà che tu abbia una comprensione molto scarsa di quanto apparentemente piccolo sia grande i compiti possono essere. Questo può essere un attributo pericoloso in un ingegnere e fin troppo comune tra i giovani. Dai la priorità in modo appropriato ed esegui il credito extra solo dopo aver completato la soluzione richiesta .


Non ci sono limiti di tempo, ma solo una nota in cui si dice che il compito non dovrebbe richiedere a un programmatore decente più di tre ore. Verificherebbero davvero il mio registro git per assicurarsi che ci abbia impiegato solo tre ore dal commit n. 1 al commit finale?
DormoTheNord,

2
@DormoTheNord se non ci sono limiti di tempo, il tempo non impiegato per la soluzione richiesta può essere considerato come una priorità errata. Sfortunatamente gli ingegneri sono tutti pensatori indipendenti e quindi hanno le loro opinioni su queste cose da una all'altra, in casi come questi può essere una buona fortuna se la persona che rivede ciò che hai fatto è il tipo di vederlo in quel modo, o il sorta di vederlo come un grande vantaggio. Ho conosciuto grandi ingegneri di entrambe le curve. In questi casi si riduce a ciò che apprezzi, a mostrarlo e a qualcuno che apprezza lo stesso come lo apprezzerai, ecco con chi vuoi lavorare.
Jimmy Hoffa,

Questo è ciò che odio delle interviste di lavoro ... la fortuna di soddisfare le preferenze personali dell'intervistatore. Forse dovrebbe essere standardizzato :)
DormoTheNord

Non preoccuparti, la fortuna si estenderà anche alla tua carriera. Devi solo essere fortunato quando hai la fortuna e quando hai la
colpa

1
Starei attento nel descriverlo come "placcatura in oro" perché quel termine è generalmente considerato una cosa negativa: en.wikipedia.org/wiki/Gold_plating_%28analogy%29
whatsisname

6

Un altro punto di vista da considerare è che il tuo approccio non è né buono né cattivo. Posso immaginare intervistatori che lo considererebbero troppo e posso immaginare intervistatori che adorerebbero ancora più ingegneria.

Non preoccuparti così tanto. Invece, risolvi il problema nel modo che ritieni migliore e probabilmente riceverai offerte di lavoro da persone che sono d'accordo con te. Questo è un ottimo primo passo verso un ambiente di lavoro produttivo. Ricorda, le interviste vanno in due modi. La risposta dell'intervistatore alla tua soluzione ti parlerà molto anche di loro. Vuoi davvero lavorare con persone che credono che il tuo istinto di sviluppo e la tua filosofia siano sbagliati?


3

In realtà, a nessuno importa se il candidato può creare un repository git o creare in fretta i makefile, perché è solo un richiamo a ciò che lui o lei hanno imparato a memoria. Queste sono competenze secondarie rispetto all'aspetto reale del problem solving e alla progettazione della domanda dell'intervista.

Quindi sì, la tua intuizione è chiara sul fatto che potenzialmente sembra male, perché potrebbe sembrare che il candidato creda che qualcuno che può rigurgitare alcuni comandi e schemi memorizzati per creare uno scheletro di progetto abbia abilità software impressionanti.

L'aspetto della suite di test della soluzione è comunque buono. Fornire una risposta con una suite di test di regressione probabilmente farà guadagnare i tuoi punti. Tanto più se la tua suite di test esercita i casi salienti nel codice. La suite di test non deve avere molti trappole formali e fare affidamento su strumenti; solo il fatto che tu ne abbia in qualche modo uno dentro è abbastanza buono per un'intervista. È più o meno ovvio che se riesci a mettere insieme alcuni test unitari ad hoc in un quiz di intervista, puoi farlo con strumenti su un progetto reale.


1

Di recente ho avuto un'intervista telefonica con una società. Dopo quell'intervista telefonica, mi è stato detto di completare un breve incarico di programmazione (un piccolo programma; non dovrebbe richiedere più di tre ore).

Procederei con cautela. Valuta la pertinenza della sfida per il lavoro e assicurati che i futuri rimborsi da parte del datore di lavoro rendano utili 3 ore del tuo tempo.

Metto in dubbio il valore di questi tipi di test e preferirei giudicare qualcuno in base ai risultati ottenuti in passato. Un'attività breve predefinita non può dire al datore di lavoro nulla di ciò che puoi fare. Solo ciò che non puoi fare e che può essere rapidamente determinato con alcune domande al telefono.

Il test ha il suo posto. Ponetevi le seguenti domande sul test e rispondete di conseguenza.

  1. Il test è corretto considerando il tuo attuale livello di carriera?
  2. Il test ha una risposta corretta chiaramente definita?
  3. L'intervistatore ha interesse per il tuo potenziale come persona o sta mostrando più interesse per i risultati del test (le agenzie di collocamento sono terribili per questo)?
  4. Il test rappresenta il tipo di lavoro che ti piacerebbe fare o è una verifica ambigua delle competenze (ovvero test se conosci la sintassi Java).

Sono stato incaricato direttamente di completare l'incarico e di inserire il codice.

Hai appena risposto alla tua domanda.

Ho pianificato immediatamente di lanciarlo su Github, scrivendo una suite di test per esso, usando Travis-CI (integrazione continua gratuita per i repository Github pubblici) per eseguire le suite di test e usando CMake per creare i makefile Linux per Travis-CI.

No, non è quello che ti hanno chiesto di fare.

In questo modo, non solo posso dimostrare di comprendere come usare Git, CMake, Travis-CI e come scrivere i test, ma posso anche semplicemente collegarmi alla pagina Travis-CI in modo che possano vedere l'output dei test. Ho pensato che l'avrebbe reso un po 'più conveniente per l'intervistatore.

Starei attento a dimostrare le abilità troppo presto o troppo tardi nel processo di intervista. Se ritieni di non aver fatto bene nell'intervista e ora stai cercando di compensare, allora non funzionerà. D'altra parte, fare troppo quando non viene chiesto troppo dimostra entusiasmo. Ciò potrebbe comportare una contrazione da parte del datore di lavoro con un'offerta salariale inferiore a quella che ti aspettavi.

Tuttavia, sono un po 'preoccupato che fare tutto questo per un compito relativamente semplice sembrerebbe negativo.

Sì, sembra male. Risolvere la loro sfida con una riga di codice sarà molto più impressionante di un progetto completamente svuotato.

Dalla mia esperienza non è così che vinci il colloquio di lavoro, ma è un modo per perdere il lavoro. Il test del codice è un problema di controllo di qualità. Ogni azienda che utilizza test del codice quando assume persone lo fa, perché in precedenza non utilizzavano test del codice. Hanno avuto una brutta esperienza di qualcuno che scivolava attraverso le fessure del processo di intervista che non avrebbero dovuto.

Prenderanno il tuo codice sorgente e lo passeranno in ufficio. La gente lo commenterà e ciò che non vuoi che sia detto è "Ha fatto questo errore? Ma stava trascorrendo del tempo usando Git, CMake e Travis-CI. Che idiota per aver perso questo errore."

Questo è tutto. Hai perso.

Vogliono sapere che puoi programmare, perché non possono insegnartelo. Git, CMake e Travis-CI possono essere facilmente insegnati.


2
@JimmyHoffa non sei d'accordo con la mia intera risposta o solo con i miei commenti sui test? Forse non sono riuscito a esprimere correttamente la mia prospettiva, o forse no? Per me, apprezzo più la componente umana che una prova scritta. Un candidato che fallisce FizzBuzz non dimostra nulla per me. Devo parlare con quella persona per capire il perché. ma voglio assumere lavoratori qualificati (sempre). Non penso proprio di andare a casa a scrivere questo test e tornare. È un modo efficace per farlo. Preferirei porre la domanda FizzBuzz e vederli allenarsi. Capisci?
Reactgular,

1
@JimmyHoffa Penso che ciò dipenda dalle aspettative dei datori di lavoro per un noleggio. Detto questo, sto oscillando di più al tuo fianco più leggo sui test di FizzBuzz. Un programmatore che non può passare a nessun livello di carriera ha problemi. Non sono sicuro che questo tipo di test sia uguale al PO. Vedere questa domanda correlata: stackoverflow.com/questions/117812/...
Reactgular

In poche parole, sono un fan dei faticosi processi di intervista e dei candidati che tentano di andare oltre (senza compromettere le richieste fondamentali; altrimenti stanno dando la priorità al loro tempo in modo scadente). Tutta la tua risposta sembra parlare contro entrambe queste cose.
Jimmy Hoffa,


@JimmyHoffa Penso che il mio atteggiamento provenga da un libero professionista nel campo creativo in cui i clienti spesso chiedono a un fornitore di completare lavori creativi o test come parte del loro processo di offerta pre-lavoro. Non faccio quel tipo di lavoro, perché se passassi ore su ogni prospettiva non avrei fatto alcun lavoro fatturabile. Quando ho detto all'OP di procedere con cautela, speravo di impedirgli di perdere tempo. L'OP voleva investire tempo nel fare molto lavoro extra. È una tentazione ma ne vale la pena? Forse, ma l'OP non ha chiarito questo. Potrebbe essere un contratto a breve termine.
Reactgular,

0

Penso che il tuo approccio non sia né buono né cattivo di per sé . Chiederei all'intervistatore se è giusto usare Github e gli altri strumenti. Come ha sottolineato @Izkata nei commenti, stai rendendo pubblica la tua soluzione.

Come intervistatore, sapevo che di solito non c'era niente di male nel candidato che cercava di chiarire alcune cose. Inoltre, porre una o due domande può essere un buon segno, poiché non ti affretti a fare cose che non hai capito.

Ricorda, tuttavia, che la cosa più importante è che il problema è risolto e risolto bene. A tale proposito, tutti concordano sul fatto che una suite di test aiuta. Ma, per quello, forse devi solo inviare un paio di lezioni di test insieme al tuo progetto / soluzione.

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.