Leggendo questo sito e SO ho visto molte storie di domande e risposte di interviste che dicevano che un candidato doveva implementare una lista collegata da zero. Di solito questo è un esercizio "gimme" per programmare candidati di ruolo come scrivere FizzBuzz. L'idea è che se il candidato non può farlo, non può programmare e dovrebbe essere respinto quasi immediatamente.
Tuttavia, non posso fare a meno di pensare che questa potrebbe essere una cattiva pratica per i seguenti motivi:
- I linguaggi di livello superiore moderni come C # e Python utilizzano in modo estensivo elenchi; scrivere il proprio oggetto lista collegata sarebbe richiesto solo in circostanze insolite e anche allora probabilmente sconsiderato.
- I linguaggi di livello inferiore come C ++ hanno librerie standard con iteratori / contenitori di elenchi e oggetti.
- Alla luce dei primi due punti, i programmatori possono passare anni senza nemmeno pensare di implementare una lista (collegati, doppiamente collegati, ecc.). Alcuni potrebbero non vedere davvero cose del genere fin dai tempi del college.
- Anche il potere di calcolo non è il fattore che è stato anni fa, quindi l'efficienza tramite i puntatori non è il problema che era (in generale).
- Una semplice ricerca sul Web di qualcosa come "esempio di elenco collegato" farebbe apparire un sacco di esempi di codice che potrebbero essere semplicemente memorizzati e replicati, senza indicare realmente la vera competenza del richiedente.
Dovrei dire che l'uso di un elenco collegato per condurre a domande e discussioni di tipo aperto sulle capacità di risoluzione dei problemi / pensiero critico dei candidati è molto probabilmente una buona pratica di intervista. In ogni modo un intervistatore può davvero vedere che cosa è un candidato e come pensano che sia enormemente vantaggioso.
Penso che questo approccio binario di "nessun codice di elenco collegato, nessun lavoro" per i programmatori che lavorano su un'applicazione desktop o web sia un po 'obsoleto. Potrebbe anche essere abbastanza dannoso; un candidato che non riesce a ricordare come lavorare correttamente con la testa di una lista potrebbe essere un programmatore e un collega di lavoro altrimenti eccellente e si perderebbe nel mix. Pensieri?
EDIT : ci sono molti (buoni) commenti che suggeriscono che questa è una buona o una cattiva domanda da porsi dipende dal contesto del lavoro. Sono assolutamente d'accordo, quindi lasciatemi riformulare questa domanda: L'implementazione di una lista collegata è una domanda di intervista comune per una vasta gamma di lavori di codifica, simili a domande come FizzBuzz o la scrittura di una funzione ricorsiva per calcolare i fattoriali. Questa domanda ha abbastanza utilità da essere usata comunemente per valutare i candidati alla programmazione in generale? O dovrebbe essere considerata una brutta domanda da porre, ad eccezione delle posizioni di "Senior Developer, Embedded Linked Lists Team"?