Dalla mia esperienza nella mia azienda in cui ho fatto molte interviste, ci sono buone probabilità che l'intervistato non abbia idea di come farlo correttamente. Quindi hanno preparato una serie di domande tecniche, ne hanno calcolato un punteggio e hanno reso il tuo curriculum. Ciò ha tuttavia molti inconvenienti e non dovrebbe essere fatto per i seguenti motivi:
Chiedete conoscenza puntuale. Se il programmatore non ha mai fatto qualcosa in quella zona, potrebbe comunque essere un eccellente collaboratore, ma proprio non conosce quella particolare risposta. Al contrario: se qualcuno si fosse preparato per l'intervista e avesse trovato la risposta a quella particolare domanda in rete, si ottiene la risposta giusta, ma quella persona potrebbe non avere la minima idea dell'argomento reale.
Le persone sono nervose durante le interviste di lavoro. Il cervello ha questa grande funzionalità per chiudere molte aree di livello superiore (come la logica) se in preda al panico, il che significa: se sei nervoso, potresti non fornire la qualità delle risposte che avresti in una situazione quotidiana. Alcune persone possono affrontare una situazione stressante come un'intervista, molti no.
Con un'unica risposta corretta, metti alla prova l'abilità delle persone a trovare quella risposta particolare. Questa è una delle molte competenze di cui ha bisogno un collega, ma non quella e solo richiesta. Pertanto una o due di queste domande dovrebbero essere sufficienti per testare quell'area di conoscenza e quindi dovrebbero essere interrogate altre abilità. Un'intervista che contiene solo domande per la risoluzione dei problemi mette alla prova la stessa abilità ancora e ancora.
Quali sono le buone domande sulle attività di programmazione?
Quelle famose domande "Can you write a short program" hanno l'enorme problema che la maggior parte dei programmatori non può scrivere una singola riga di codice senza che il loro IDE li aiuti. Ma questo non è affatto un problema nelle situazioni lavorative quotidiane, perché il programmatore ha sempre il suo IDE che lo aiuta. Quindi, chiedendo cose come "Trova l'errore", "Scrivi 50 righe di codice che fanno ..." o anche semplici domande devono tenere conto del fatto che il richiedente non ha i suoi strumenti (IDE, Google) disponibili.
Ad esempio, posso rispondere praticamente a qualsiasi domanda entro 1 minuto se Google mi aiuta, ma senza connessione Internet mi sembra impotente. Io chiamo quella memoria esternalizzata e, invece di ostacolarmi, mi aiuta molto a concentrarmi su ciò che è veramente importante - comprendere la meccanica di base - perché tutto il resto può essere cercato. Ma non chiedermi i dettagli di qualsiasi API casuale, perché non li conosco, ho Google per questo.
Detto questo, una buona domanda relativa alle attività di programmazione non dovrebbe concentrarsi sulla conoscenza delle API o su speciali capacità di codifica, a meno che questo non sia un requisito assoluto per il lavoro. È possibile acquisire conoscenze, quindi è meglio scoprire quanto è brava quella persona ad acquisire conoscenza piuttosto che chiedersi ciò che già sa.
Una buona domanda per un'attività di programmazione dovrebbe essere breve, semplice, in grado di essere codificata in ogni lingua con solo poche righe di codice e, soprattutto, dovrebbe dirti il più possibile su come la persona lavora e trova le risposte. Esempio:
"Scrivi una funzione nella lingua che preferisci che prende una matrice di numeri interi e li riordina in modo che il primo numero intero sia dopo l'ultimo, e tutti gli altri si spostino di conseguenza."
Il primo che un candidato dovrebbe chiedere a questo punto è: "Mi dispiace ... puoi per favore spiegare il compito?". Perché a nessun programmatore è stata data una descrizione chiara di cosa fare mai. Questo è seguito dalla spiegazione, che il codice nelle domande dovrebbe fare uno spostamento a sinistra del contenuto dell'array con l'overflow aggiunto a destra.
Questo compito è così semplice che chiunque abbia conseguito una laurea in qualsiasi livello di programmazione dovrebbe essere in grado di rispondere correttamente. Ciò tiene conto del fatto che il programmatore deve lavorare senza i suoi strumenti e che essere nervoso riduce la capacità di pensare logicamente. Tuttavia, ti dice ancora come le persone risolvono i problemi solo dal modo in cui la domanda è formulata e dal modo in cui le persone si avvicinano, semplicemente perché uno spostamento a sinistra è contrario al comune istinto "da sinistra a destra" e costringe le persone a pensare un secondo.
Ci sono molte possibili risposte a questa domanda, quindi dare un'occhiata da vicino al modo in cui il codice è sviluppato è la parte importante, non se la soluzione funzionasse davvero. Il richiedente verifica null? Come viene archiviato l'overflow? Viene utilizzato un loop o un mem-set? In che modo il richiedente verifica la correttezza del codice? Questa semplice domanda ti dice un'intera biografia su come funziona quella persona.
Quali sono le domande di buona conoscenza generale?
Le domande valide sono facili da rispondere, consentono una grande quantità di risposte (le cosiddette "domande aperte") e consentono di apprendere il più possibile sul candidato nel minor tempo possibile.
Esempi:
(Chiedere a un programmatore C ++): "Quali altre lingue oltre a C ++ conosci?"
Questa è una domanda di livello base, che offre al richiedente la giusta possibilità di salvare in questo momento se non fosse a conoscenza dell'argomento richiesto. Un 'no' a questo punto è meglio che tormentarlo con molte altre domande a cui tutti devono rispondere: "Mi dispiace, non ne so nulla."
Inoltre, ti dice innanzitutto quali altre lingue conosciute da quella persona, inoltre impari quanto è interessata quella persona ad avere una visione più ampia del mondo della programmazione, o se hai qualcuno con un solo linguaggio singolare (e quindi funzionalità / tecniche ) Visualizza.
(Successivamente, diciamo che conosce Java): Quali sono le tre principali differenze tra C ++ e Java secondo te? "
Questa è una domanda aperta che consente molte risposte, quindi il richiedente ha buone possibilità di trovarne almeno tre. Chiedere i primi tre (opinione personale) non solo limita le possibili risposte, ma costringe anche il richiedente a ordinare in base alla priorità. Tuttavia è (o dovrebbe essere) facile rispondere.
Questa è una semplice domanda che mette alla prova molte conoscenze approfondite sui diversi linguaggi di programmazione. Quanto è profonda la conoscenza di questi argomenti? Da queste risposte puoi dire molto sulla conoscenza e sull'effettiva comprensione della meccanica di base dei linguaggi di programmazione. Quanto ha speso quella persona con i dettagli sporchi, o se è solo qualcuno che collega tra loro varie funzioni API senza avere la minima idea di cosa accada al di sotto di esse.
Questo concetto di domande entry-level seguito da semplici domande di approfondimento può essere utilizzato anche per la maggior parte degli altri argomenti. Sempre in questo schema: domanda di salvataggio, domanda di verifica, domanda approfondita. Un altro esempio (da un'intervista a Java):
- "Come valuteresti la tua esperienza con lo sviluppo multi-thread?"
- "Per favore, nomina quelle che ritieni siano le tre cose più importanti da considerare nello sviluppo di un'applicazione multi-thread."
- "Indica tre classi dell'API Java che possono aiutarti nello sviluppo di tali applicazioni e fornire una breve descrizione del loro utilizzo."
Queste tre domande ti diranno più di qualsiasi domanda tecnica cosa il richiedente sappia veramente di quegli argomenti, pur essendo equo a rispondere considerando la conoscenza del punto e il livello di stress.
Quindi la prossima volta che qualcuno ti pone 20 domande di programmazione di seguito, sai che non ha praticamente idea di come intervistare qualcuno in modo corretto. ;)