Ovviamente non puoi chiedere enigmi solo e le "trame" che ruotano attorno alle banalità linguistiche non sono molto utili. Ma una sorta di esercizio di programmazione è una necessità virtuale se si utilizza un'agenzia di assunzione di personale o reclutatori, o se si continua ad assumere persone che sono brave a simulare il proprio livello di competenza.
Chiedere i giusti tipi di domande può aiutare a valutare quanto i programmatori familiari siano con algoritmi comuni e come applicarli ai problemi. Può anche dirti se cercano approcci multipli e scelgono quello migliore, o ne scelgono uno che sanno funzionare. In quest'ultimo caso possono essere consapevoli che esiste un modo migliore, ma sarebbe necessario cercarlo per farlo correttamente, il che è abbastanza corretto: lavorare, se meno che massimamente efficiente, il codice è meglio del codice che non funziona e sapere che c'è un modo migliore è più della metà della battaglia.
Un esempio di un posto decente da avviare è un problema che ho avuto in una competizione di programmazione nel 1985, quando ero un giovane hacker Applesoft BASIC. Il problema era di stampare tutti i quadrati perfetti tra 1 e 1000. Naturalmente, ci sono due approcci per risolvere questo problema:
- Iterate attraverso tutti gli interi tra 1 e 1000. Prendete la radice quadrata di ciascuno e verificate se questo è uguale al risultato troncato-intero dello stesso calcolo. (Nessun operatore modulo in Applesoft BASIC!) In tal caso, stampare il numero.
- Scorrere tutti gli interi tra 1 e sqrt (1000). Stampa il quadrato di ciascuno.
Ovviamente il secondo è molto più efficiente del primo e, come bonus, stamperà tutte le risposte giuste, mentre il primo, a causa degli errori di arrotondamento nell'implementazione in virgola mobile di Apple, ne ha persi uno o due. Tuttavia, la maggior parte delle soluzioni sono state utilizzate nell'approccio # 1. (Questi erano studenti delle scuole superiori, dopotutto).
Una discussione su un problema moderno di questo tipo potrebbe rivelare se un candidato è consapevole del fatto che ci sono due approcci, può dire quale è meglio e comprende i limiti della matematica in virgola mobile binaria. In effetti, direi che qualcuno che non può dirti perché il secondo approccio è migliore sarebbe un candidato povero - fondamentalmente al livello di uno studente delle superiori del 1985. Questo problema è solo leggermente più complicato di "fizzbuzz" - e molto meno complicato di quello su cui probabilmente lavoreranno!
Il mio punto è sapere cosa ti aspetti di imparare da una domanda del genere, e non impostarli come domande pass / fail ma usarli come punti di partenza per sondare i limiti della conoscenza di un candidato. Puoi fare una serie di domande sempre più difficili e vedere dove iniziano ad avere problemi.
Potresti chiedere, come faccio a capire da una serie di esercizi di programmazione se qualcuno è abbastanza intelligente da lavorare nella mia squadra? E la risposta è: non lo fai, li classifichi in ordine di intelligenza e assumi il più intelligente che ti puoi permettere, supponendo che sia abbastanza intelligente .