Come intervistare uno scienziato naturale per una posizione di sviluppo? [chiuso]


30

Domanda originale

Ho già fatto alcune interviste per la mia azienda, principalmente informatici per posizioni di sviluppo, ma anche alcuni tester e project manager. Ora devo riempire un posto vacante nel nostro gruppo di ricerca all'interno del dipartimento di ricerca e sviluppo (nota a margine: "ricerca" significa che cerchiamo di risolvere i problemi nel nostro settore professionale / nicchia di mercato utilizzando software in progetti di ricerca insieme a università, altre società, centri di ricerca e le organizzazioni degli utenti finali. Non si tratta di ricerca informatica, non risolveremo il problema P = NP).

Ora abbiamo invitato un ragazzo in possesso di un Master in chimica (con molta fisica anche nel suo CV), che non ha mai avuto alcuna lezione di informatica. Ho già parlato con lui circa mezz'ora nei giorni della carriera di un'università locale e non c'è dubbio che il ragazzo sia intelligente. Anche i suoi voti sono eccellenti e si è laureato con distinzione. Per la sua laurea ha dovuto insegnarsi a programmare in Mathematica e mi ha detto credibilmente che gli piaceva molto programmare. Inoltre ha risolto alcuni problemi di chimica fisica che probabilmente non capisco usando il suo software, implementato in Mathematica, per la sua tesi di laurea specialistica. Include una GUI e una dimensione notevole di 8.000 LoC. Sembra essere molto attratto da ciò che stiamo facendo nel nostro gruppo di ricerca e, ad essere sinceri, è abbastanza difficile per una PMI come noi ottenere brave persone. Sono anche molto interessato ad assumerlo poiché potrebbe aiutarmi a scrivere proposte di progetti, relazioni, fare presentazioni e così via. Probabilmente si sarebbe adattato anche al nostro team.

L'unica domanda rimasta è: come posso verificare se acquisirà le capacità di programmazione necessarie per implementare il software nei nostri progetti, dal momento che questa sarà una parte significativa del lavoro?

Certo, gli chiederò di cosa si tratta, questo lo affascina della programmazione. Chiederò anche come ha proceduto alla stesura del suo software di scienze naturali e come lo ha strutturato. Chiederò come è riuscito a ottenere le competenze e le informazioni sullo sviluppo del software di cui aveva bisogno. Ma c'è qualcos'altro che potrei chiedere? Qualcosa di più concreto forse? Devo chiedergli di spiegare la sua soluzione Mathematica?

Per essere chiari: non sto cercando conoscenza in un particolare linguaggio o stack tecnologico. Siamo un negozio .NET nello sviluppo di prodotti ma voglio avere una scelta libera per i nostri progetti di ricerca. Quindi sono interessato alla meta-competenza di poter apprendere tutto ciò che è effettivamente necessario.

Spero che questa domanda sia rispondente e non aperta poiché mi piace davvero sapere se esiste un modo predefinito per verificare la capacità di acquisire ulteriori competenze di programmazione sul posto di lavoro. Se qualcosa non ti è chiaro, ti prego di darmi alcuni commenti e di farmi migliorare la mia domanda.

Aggiornamento per riflettere le risposte fornite fino al 01-12-2011

Quale risposta ho accettato e perché

Grazie a tutti per le risposte, la maggior parte di esse è molto utile, quindi ho votato molto! Sebbene la risposta di Tom Squires abbia ottenuto il maggior numero di voti, accetterò la risposta data dal Principe Goulash . Naturalmente Tom è oggettivamente corretto, ma la risposta di Prince è solo più utile per me e ho ricontrollato le FAQ che questo è il criterio per accettare una risposta.

Cosa gli chiederò durante l'intervista

  • Gli permetterò di spiegare alcuni semplici compiti come nell'esempio in The Camel Has Two Humps menzionato da Chris Burt-Brown

  • Gli chiederò di spiegare alcuni flussi di controllo più avanzati, magari in una notazione grafica.

  • Verificherò la sua comprensione della ricorsione usando un esempio di matematica.

  • Gli lascerò spiegare un algoritmo di sua scelta in linguaggio naturale.

  • Gli farò spiegare la sua soluzione Mathematica, in particolare chiederò il suo modello di procedura, l'uso di strumenti, la strutturazione di codice e software in generale, nonché diversi livelli di astrazione.

  • Per verificare la sua motivazione chiederò il suo fascino nello sviluppo di software.

  • Gli chiederò se è a conoscenza di cosa dovrà imparare sullo sviluppo del software aziendale. Soprattutto voglio trasformare la discussione nella direzione di lavorare in gruppo, accoppiare la programmazione, TDD poiché mi aspetto che non ne sappia molto dopo aver lavorato solo sul suo Master.

Sembra che sarà una lunga intervista;)

Aggiornamento dopo l'intervista 2011-12-09

Ancora grazie a tutti per le buone risposte. Ha superato l'intervista a pieni voti. Non sono mai stato più soddisfatto di un candidato. La sua soluzione Mathematica sembra essere strutturata abbastanza bene. È stato in grado di spiegare dove ha usato le funzioni di ordine superiore, anche se non sapeva che queste venivano definite in questo modo. Ha risposto alle mie domande di ricorsione basate sulla matematica, nonché a semplici incarichi e al flusso di controllo da The Camel Has Two Humps. Durante la spiegazione di alcuni algoritmi ho imparato molto sull'adattamento non lineare;) Inoltre ha onestamente affermato che, naturalmente, non può garantire che sarà in grado di apprendere cose sullo sviluppo di software professionale che non conosceva finora. Ma crede fermamente di essere sempre stato bravo a imparare nuovi concetti - anche da solo - ed è veramente interessato allo sviluppo del software. Ha anche chiesto lo stack tecnologico del progetto, a cui sarebbe stato applicato per primo, per dare un'occhiata a casa. Era curioso anche della programmazione delle coppie e del lavoro di gruppo. Ora spero che il contratto di lavoro sarà concluso.


9
Trovo meraviglioso che le aziende siano disposte ad assumere persone senza conoscenza della tecnologia che usano. Vorrei aver trovato la tua compagnia prima di fare quello che ho fatto per la mia carriera!
NoChance,

Emmad: Questo è quello che ho cercato di spiegare e intendevo con "meta-competenza". Qual è il vantaggio della mia azienda quando assumo un eccellente programmatore C # che non è in grado (o disposto) di imparare Scala / Lift quando necessario? E a dire il vero: in realtà è abbastanza difficile trovare brave persone in Germania. Soprattutto quando sei una PMI che non si trova in una metropoli alla moda come noi.
Silas,

2
Chiedigli di fare una piccola ricerca sul flusso di controllo semplice e altre tecniche di base in una lingua specifica. Quindi quando arriva, chiedigli di risolvere un problema usando quelli.
Darren Young,

2
Ho lavorato con alcuni scienziati trasformati in sviluppatori nella mia attuale posizione. IMHO tendono ad essere molto bravi nell'aspetto del problem solving nello sviluppo e non così bravi a scrivere codice gestibile con buoni principi OO. Se vuoi che faccia qualcosa di più che scrivere strumenti "veloci e sporchi", potresti aver bisogno di uno sviluppatore tradizionale che lavora con lui.
Jordan Bentley,

2
Sono praticamente AM questo ragazzo. Ho un background di fisica / chimica computazionale e ho sviluppato molti modelli / codici computazionali, insieme a una serie di progetti collaterali (a volte complessi e di successo). Le principali modifiche che ho dovuto apportare in un ambiente di sviluppo professionale riguardavano la metodologia di sviluppo e il lavoro in gruppo. Assicurati che capisca cosa ci vuole per lavorare insieme sul software. Assicurati che capisca i metodi che usi (integrazione TTD / contubua quel tipo di cose) e cosa significa lavorare con loro per il suo risultato.
drxzcl,

Risposte:


21

Sono molto entusiasta qui perché ho iniziato come sviluppatore di software alcuni anni fa con un dottorato in fisica, ma un'esperienza di programmazione molto ridotta (che equivale a un corso di laurea su Fortran). Chiaramente dipende dal tipo di software che stai sviluppando, ma il mio punto di vista è che le capacità di programmazione sono molto facili da acquisire da parte di chiunque abbia abilità decenti in campo scientifico / di risoluzione dei problemi. Non intendo questo come un insulto ai programmatori che hanno studiato per tutta la vita e che hanno studiato informatica: ovviamente ci sono aspetti tecnici che richiedono una formazione seria per padroneggiare (ad esempio multi-threading e architettura di livello molto basso) ma suppongo che sia non la posizione che stai cercando di riempire.

Per il mio colloquio tecnico per la mia posizione attuale, ho dovuto affrontare un problema matematico abbastanza complesso e ho chiesto di progettare un programma per risolverlo. L'enfasi era sulla scrittura di un algoritmo che, una volta implementato, avrebbe risolto il problema. Potrei scrivere una risposta usando solo parole per descrivere la mia soluzione, ma mi è stato permesso di scrivere del codice in una lingua di mia scelta, se lo desiderassi. Il test riguardava più l'abilità di problem solving e se ero in grado di "pensare come un programmatore". Ovviamente se ci fossero candidati con pari capacità e uno avesse avuto un'esperienza di codifica più diretta, sarebbe uscito in vetta, ma questo mi sembra abbastanza giusto.

La linea di fondo è: esamina il candidato per le abilità per le quali lo stai assumendo, non per gli ideali che speri che raggiungerà.


2
Avendo lavorato con programmatori che erano ex scienziati, non sono solo i dettagli di basso livello di cui sono ignoranti, ma anche le cose di alto livello. YMMV ovviamente, ma il problema è una generale mancanza di profondità. Non che tutti i lavori abbiano bisogno di questo ...
Donal Fellows,

1
@DonalFellows: Non dubito che gli sviluppatori con una formazione specifica possano mancare di ampiezza e profondità di conoscenza. Dipende dal ruolo e dalla quantità di formazione interna offerta.
Prince Goulash,

1
@DonalFellows: dato che l'OP è interessato a determinare la capacità di apprendimento del richiedente, non le sue conoscenze attuali ...

2
@DonalFellows: come ho detto prima, dato che l'OP è interessato a determinare la capacità di apprendimento del richiedente , non le sue conoscenze attuali ...

2
@Mark Bannister: un bravo scienziato può imparare, non è una domanda utile qui. Una domanda più utile sarebbe se lo scienziato imparerà ciò che deve sapere. Questo è più un problema di personalità. Lo scienziato sa cosa non sa dell'ingegneria del software?
David Thornley,

37

Come posso verificare se otterrà le capacità di programmazione di cui ha bisogno

Non puoi . È impossibile testare accuratamente un'abilità che non ha ancora. Devi fare una chiamata di giudizio basata sulla sua intelligenza e attitudine. Alla fine sarà sempre un rischio.

Per esperienza personale posso dire che è molto possibile passare dalla scienza alla programmazione. Fondamentalmente si riducono all'utilizzo del cervello per risolvere enigmi complessi.


8
+1 per "Fondamentalmente entrambi si riducono all'uso del cervello per risolvere enigmi complessi."
joshin4colours,

1
Qual è il tuo problema? Assumi il ragazzo, per l'amor del cielo! Ricorda che i programmatori sono semplicemente operatori di tornio ad alta tecnologia. È entusiasta, intelligente e conosce molta chimica. Se non lo assumi allora, la prossima volta che assumi qualcuno tra un anno, ti prenderai a calci nel culo che non l'hai fatto.
Pete Wilson,

1
Non è raro che un laureato in CS abbia programmato da quando aveva 13 anni circa. Quando entrano al college, sono già programmatori intermedi per la maggior parte delle scale. Ciò non significa che non abbiano imparato nulla dai loro gradi. La programmazione è facile ... Informatica / Soft Engineering no. Questo non sarà in grado di contribuire ed essere un membro prezioso ... Ma significa che probabilmente non avranno mai la stessa base CS.
user606723,

6

Non ho fonti secondarie che verificano questo documento, quindi non posso garantirlo ma:

The Camel Has Two Humps
http://www.eis.mdx.ac.uk/research/PhDArea/saeed/paper1.pdf

Abbiamo trovato un test per attitudine alla programmazione, di cui diamo dettagli. Possiamo prevedere il successo o il fallimento anche prima che gli studenti abbiano avuto contatti con qualsiasi linguaggio di programmazione con una precisione molto elevata e testando con lo stesso strumento dopo alcune settimane di esposizione, con estrema precisione.


3
Dopo aver letto il documento, credo di ricordare di aver letto di più su questo studio qualche tempo fa. Non riesco a trovarlo di nuovo :( Modifica: è stato menzionato in Coding Horror , grazie per il promemoria
Silas,

Mi hai battuto, stavo per rispondere con il collegamento Coding Horror @Silas aggiunto
Izkata,

5

Come posso verificare se acquisirà le capacità di programmazione di cui ha bisogno?

È molto semplice. Dagli le abilità.

Ora, questa non è una risposta molto soddisfacente, ma lasciami elaborare.

Ho iniziato a programmare dopo aver lavorato per 3 anni in ingegneria civile. Questo è un background piuttosto solido in fisica applicata e matematica. Non è la matematica teorica che darebbe una laurea in CS, ma vale qualcosa. Ciò che ho attinto dall'esperienza ingegneristica è stato un solido background nella risoluzione dei problemi . Chiunque abbia un background matematico apprezza già il concetto di eleganza quando parla di una soluzione a un problema. Hanno già una formazione nel refactoring da quando hanno trascorso il tempo a prendere sei pagine di graffio di pollo e a convertirlo in un'elegante prova di mezza pagina per l'invio.

Chiunque abbia studiato fisica ha sviluppato un approccio intuitivo per mettere insieme una soluzione da strutture di base.

E cosa sta programmando al di fuori di queste competenze? - Lingua, linguaggio, modelli e cornici. Sono facili da insegnare. È un problem solving che non puoi. Se sei in grado di fornire istruzioni in queste aree, finirai con un buon sviluppatore.

La domanda diventa quindi "Quanto tempo puoi aspettare che si alzi al passo?"

tl; dr; Puoi insegnare a scrivere. Non puoi insegnare in modo intelligente.


+1, risposta molto bella. Vorrei che le persone avessero una visione più aperta delle professioni: avere una laurea in matematica non significa che non si può fare la programmazione per vivere, né viceversa. Imparare a imparare è l'abilità importante dell'IMO.
K.Steff,

2

Ho una laurea in scienze dei materiali ma ho lavorato tutta la mia carriera nello sviluppo di software.

Suggerirei che il tuo candidato probabilmente non avrà problemi con la programmazione e gli algoritmi di base, ma quando si tratta di requisiti di tipo più "ingegneristico" potrebbe aver bisogno di una guida. Con questo intendo strutturare bene il suo codice, non avere 500 funzioni di linea, testare efficacemente, progettare per l'efficienza ...

La maggior parte di questo può essere insegnata, ma potresti voler progettare alcune domande per risolverlo.


2

Inoltre ha risolto alcuni problemi di chimica fisica che probabilmente non capisco usando il suo software, implementato in Mathematica, per la sua tesi di laurea specialistica. Include una GUI e una dimensione notevole di 8.000 LoC.

Mi sembra che il candidato sappia già come programmare, ammesso che potrebbe non avere la stessa esperienza nel farlo come sviluppatore dedicato, ma hanno un progetto dimostrabile che hanno completato e che ha richiesto un lavoro non banale per essere completato. Pertanto, potresti essere in grado di intervistare il candidato nello stesso modo in cui faresti uno sviluppatore che utilizza una lingua diversa rispetto a quella utilizzata dal tuo negozio, vale a dire:

  • Competenze chiave - Il candidato comprende la logica programmatica di base, il controllo del flusso, le strutture di dati di base.
  • Competenze avanzate - Il candidato comprende la programmazione e la progettazione orientate agli oggetti, strutture dati avanzate, interfacce, classi astratte, ecc.
  • Competenze nella risoluzione dei problemi - Dato un problema, il candidato dimostra solide capacità di problem solving.

Il linguaggio che Mathematica utilizza è abbastanza avanzato e qualcuno che è bravo a scrivere software per Mathematica dovrebbe essere abbastanza competente in altri ambiti, quindi concentrarsi su quell'esperienza e usarla come base per l'esperienza di codifica potrebbe essere un buon modo per affrontare l'intervista.


2

Parlando come laureato in Ingegneria Aerospaziale diventato programmatore, è certamente possibile fare il salto dalle scienze naturali alla programmazione. Tuttavia, attenzione, la capacità di risolvere i problemi non è sempre correlata alla capacità di scrivere codice. Sembra che te ne renda conto e questa è una buona cosa.

Per me, i concetti più importanti per assicurarsi che afferri sono il flusso di controllo e la ricorsione (e il looping in generale come sottoinsieme di questo). Prima di assumere un candidato, anche qualcuno che sia chiaramente molto intelligente si assicuri di poter scrivere un algoritmo di parole semplici per risolvere i problemi. Assicurati che possa prendere quell'algoritmo di parole semplici e trasformarlo almeno in pseudo-codice. Potresti anche sondare per vedere se almeno riesce a capire il concetto di polimorfismo, anche se non sono sicuro che si tratti di una conoscenza necessaria in questa circostanza.

Attenzione anche alla capacità di risolvere problemi scientifici in Mathematica / MatLab / Qualunque cosa non significhi che può scrivere un buon codice. Significa semplicemente che è in grado di applicare i principi di programmazione di base (a volte estremamente di base), di solito istruzioni if ​​/ else. Imparare a essere un buon programmatore richiederà generalmente un impegno sia personale che del datore di lavoro nei confronti di qualcuno in questa fase. Avvertenza: ho incontrato persone molto intelligenti che erano / sono dei bravi ingegneri che non potevano programmare l'uscita da un sacco di carta e onestamente non riuscivano a cogliere i fondamenti del linguaggio di base.

Esperienza personale

Mi sono laureato a scuola con una laurea in ingegneria e un po 'di esperienza di programmazione al mio attivo. Avevo lavorato con una quantità molto piccola di C, un bel po 'di MatLab e un po' di VB + Access. Mi ci sono voluti circa 3 mesi di studio per diventare veramente utile come programmatore in un negozio VB.NET. Mi ci sono voluti altri 9 mesi per diventare pienamente competente. Tuttavia, posso, con un certo grado di fiducia, dire che le mie capacità di problem solving sono superiori al 99% degli altri programmatori che ho incontrato nel mio lavoro. I miei datori di lavoro mi hanno costantemente considerato uno dei loro beni più preziosi.

Conclusione

È una proposta di rischio / ricompensa, ma spesso l'assunzione di qualcuno che ha le capacità di risoluzione dei problemi puri può ripagare a lungo termine fintanto che sono in grado di apprendere i concetti di programmazione e siete entrambi disposti a investire il tempo nell'ampliare la sua programmazione conoscenza. Tuttavia, sono fermamente convinto che deve possedere almeno una conoscenza di base dei fondamenti della programmazione prima che tu gli offra un lavoro. Nella mia esperienza, una volta che sei a questo punto, puoi andare molto oltre.


Grazie per la tua risposta. Conferma la maggior parte dei miei pensieri. Voglio solo aggiungere che ho incontrato molti scienziati informatici, che lavorano da anni come sviluppatori e architetti, che IMO non è in grado di scrivere anche un buon codice. Anche alcuni di quelli che scrivono articoli tecnici sulla programmazione. Concludendo: fare un buon programmatore richiede sempre di leggere molti libri, imparare lingue diverse e così via ... non importa quale tipo di laurea possiedi.
Silas,

1

Vorrei iniziare con alcune domande e nozioni di base sugli algoritmi per vedere se è nella logica degli algoritmi e della programmazione. Se è in grado di capire cos'è un algoritmo, può eventualmente sviluppare le abilità necessarie per fare cose concrete in seguito.


1

Come posso verificare se acquisirà le capacità di programmazione di cui ha bisogno per realizzare l'implementazione del software nei nostri progetti poiché questa sarà una parte significativa del lavoro

Onestamente, sono abbastanza sicuro che non otterrai queste informazioni da un'intervista di una o due ore. Dagli un incarico di programmazione in C # (qualcosa di non troppo tecnico) e una o due settimane da risolvere. Dovrebbe essere abbastanza tempo per imparare le basi della lingua per qualcuno che ha già imparato a programmare con Mathematica. Quindi fai una revisione del codice con lui e decidi su quella base.


1

Potresti guardare le pratiche per la programmazione in un ambiente scientifico? (su Stack Overflow) per avere un'idea di come sia la cultura della programmazione delle scienze naturali. In questo modo sei in grado di confrontare la sua preparazione con quella dei suoi coetanei.

Del resto, potresti chiedergli di descrivere le pratiche di programmazione a cui è abituato per sapere se è consapevole che ci sono altri modi per farlo .

Ci sono molti "buoni programmatori" nella mia attività la cui qualifica è quella di essere in grado di mantenere abbastanza stato nella loro testa per mettere insieme un po 'di codice funzionante, ma il cui lavoro tende ad essere non strutturato e difficile da mantenere. Generalmente possono essere insegnati, ma ... devono essere insegnati.


0

Un altro dipartimento in cui lavoro utilizza una variazione del nostro test standard. Il primo compito è di invertire le parole in una stringa in atto. Quindi, utilizzare quel codice per invertire l'ordine delle parole nella stringa, ancora in atto. Invece di usare un linguaggio di programmazione, hanno il candidato a progettare gli algoritmi su carta ed eseguirli usando una scheda Scrabble.


0

Vorrei chiedere di descrivere (usando il linguaggio naturale) un algoritmo per calcolare qualcosa dalla fisica. Qualcosa di un po 'più complicato di una semplice formula e quindi vorrei chiedere come vedrebbe il suo calcolo incapsulato in oggetti (senza bisogno di conoscenza OOP, potresti spiegare qual è la tua aspettativa di un oggetto). In questo modo puoi vedere il suo pensiero logico. Questo è più importante di qualsiasi abilità di programmazione.


0

In primo luogo, sono probabilmente abbastanza intelligenti, quindi nel peggiore dei casi possono imparare a essere un buon programmatore con una guida. Tuttavia, se ne hai bisogno per saltare ed essere un programmatore decente sin dall'inizio, chiedi loro di inviare un codice di esempio che hanno scritto.

Sono una o due gigantesche funzioni multiuso o hanno incapsulato la funzionalità ai livelli appropriati di astrazione? I numeri magici sono codificati a fondo? Il codice è ASCIUTTO? Hanno dato alle variabili nomi ragionevoli o tutto è un'abbreviazione indecifrabile o una variabile a lettera singola? Puoi principalmente seguire la logica del loro codice? Capiscono le basi di OO?

Chiedi cosa usano per il controllo della versione (git / hg / svn / cvs / bzr, ecc.). Hanno mai profilato codice o utilizzato un debugger e, in caso affermativo, quali o quale è la loro strategia di debug generica?

Se falliscono questo test e hai bisogno di un buon programmatore sin dall'inizio, salta questa persona. Altrimenti, assumili, suggerisci di leggere alcuni libri di ingegneria del software (ad esempio, Codice completo) oltre ai libri di programmazione / CS generici.

(Per la cronaca, sono anche uno scienziato fisico diventato programmatore.)


-3

Dal momento che è ancora in un'università o solo di recente ha finito, è abituato a studiare. Fagli leggere e comprendere il libro di Design Patterns e dopo (o durante) un mese, avere una discussione approfondita con lui sugli argomenti. (Penso che) questo può dirti molto sulle sue capacità (non solo quelle difficili (anche quelle), ma anche su come afferrare la comprensione di nuovi concetti, comprenderne l'uso, vedere pro e contro, ecc.). Ma ti costerà un mese.


8
-1 La domanda era su come intervistarlo, non su come farlo smettere di desiderare la posizione.
Peter Taylor,
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.