La capacità di uno sviluppatore di analizzare il codice direttamente proporzionale a quanto bene può scrivere codice? [chiuso]

4

Nel mio lavoro professionale ho iniziato a notare che lo sviluppatore più avanzato è il commento più significativo che lasci su una revisione del codice.

Recentemente, quando mi è stato chiesto di intervistare diversi candidati, mi sono inventato un frammento di codice abbastanza semplice (questi erano candidati inesperti) in diverse lingue (in modo che possano scegliere) e "nascondere" i ben noti problemi nel codice. Ad esempio, in uno snippet Java userei == invece di .equals() , duplicare del codice, usare nomi di variabili prive di significato, per OOP, creare una strana gerarchia di classi, ecc ... Ho trovato una gamma di problemi con diverse difficoltà. Poi discutemmo cosa c'è di sbagliato in un codice e come migliorarlo.

Ho scoperto che questa domanda mi ha dato un'idea di molte cose. In primo luogo, era una bandiera rossa se uno sviluppatore non poteva evidenziare problemi evidenti con il codice. In secondo luogo, anche se uno sviluppatore non riuscisse a trovare tutti i problemi, potrei indicarlo e dire "ah sì" e parlarne in modo significativo. Mi ha anche permesso di sentirli scavare nel profondo quanto volevano su certe cose.

Personalmente trovo intimidatorio scrivere codice durante un'intervista. Trovo anche strano quando potenziali impiegati ti danno un "compito" da completare a casa e consegnarlo prima dell'intervista. Ma allora in che altro modo dovresti valutare il loro potenziale di programmazione? Quindi, nella mia limitata esperienza, mostrare lo snippet di codice funzionava molto bene.

C'è qualche problema con questo approccio o è accettabile? È possibile che qualcuno faccia bene con questo compito, ma non sarebbe in grado di scrivere un codice di qualità?

    
posta c_maker 12.08.2015 - 03:40
fonte

2 risposte

3

Avendo attraversato il processo di ricerca di lavoro per diversi mesi, posso darti la mia prospettiva sul processo di ricerca di lavoro in relazione a me. In primo luogo, alcuni non fare; queste sono tutte cose che molti datori di lavoro stanno facendo in questo momento e non dovrebbero farle:

Non chiedere alle persone di elaborare domande su cose che non useranno mai sul lavoro.

Non sto parlando di FizzBuzz. FizzBuzz esiste per eliminare le persone che non possono programmare affatto. Sto parlando di chiedere alle persone di progettare e implementare un albero binario, quando quel problema è già stato risolto decenni fa. Invece, chiedi informazioni sulla complessità (Big O) e forse su come usare la ricorsione per camminare su un albero binario.

Non chiedere alle persone di scrivere codice perfetto.

Non lo otterrai in un'intervista di codifica, soprattutto se è tramite skype o per telefono. La maggior parte delle persone usa gli IDE al giorno d'oggi e li ha derubati di quello strumento. Se parte del tuo set di competenze lavorative richiede che le persone eseguano il codice nel Blocco note, quindi con tutti i mezzi. Dubito che sia vero, però.

Non chiedere alle persone di viaggiare in tutto il paese per un impegno di sei mesi.

Questa è solo una variazione su "l'intervista che non finisce mai". Scopri come trovare persone di talento da intervistare nel primo o secondo contatto da intervistare, quindi rendi l'intervista pertinente al tuo lavoro.

Smetti di seguire la mandria!
Alcune delle cose che stai facendo nelle tue interviste si stanno facendo perché Google le fa, o Facebook le fa. Il tuo miglior processo di assunzione non è necessariamente la codifica di concorsi tra scatti di whisky (se la tradizione è vera). Il tuo miglior processo di assunzione è quello che meglio si adatta alla tua società, non all'ultima moda di Google o Facebook.

Infine, non chiedere alle persone cose che non conosci già da solo.

Se chiedi a qualcuno di migliorare le prestazioni di un algoritmo di inversione delle stringhe quando lo hanno già scritto nel modo ottimale, stai solo perdendo il tempo di tutti.

Ora che è fuori mano ...

For example, in a Java snippet I would use == instead of .equals(), duplicate some code...

Questo sembra un approccio ragionevole.

Mi aspetto che ogni sviluppatore esperto conosca già alcune cose sulla loro lingua di scelta. Mi aspetterei un programmatore C # ragionevolmente competente per sapere come == differisce da equals() , perché le stringhe sono un'eccezione, cos'è IDisposable e come si riferisce a using , ecc. Preferirei personalmente le abilità di crack nelle loro lingua preferita sul tuo preferito lavello della cucina dei gusti tecnologici desiderati della settimana, dal momento che qualcuno con eccellenti capacità di codifica può facilmente raccoglierli.

I found that this question gave me insight into several things. First, it was a red flag if a developer could not point out obvious issues with the code. Second, even if a developer could not find all the issues, I could point it out and they can say 'ah yeah' and talk about it in a meaningful way. It also allowed me hear them dig as deep as they wanted on certain things.

Tutto vero.

I personally find it intimidating to write code during an interview. I also find it strange when potential employees give you a 'homework' to complete at home and hand in before the actual interview. But then how else are you supposed to evaluate their programming potential?

Nel momento in cui concedi a qualcuno un'intervista, dovresti già avere una buona idea se li assumerai o meno. Quando ho intervistato per il lavoro che ho ora, non mi hanno nemmeno fatto domande tecniche. La persona che mi ha intervistato ha passato la maggior parte del suo tempo a vendermi sulla sua compagnia. Ha detto "So già che puoi fare il lavoro, fatte salve le tue referenze confermando che hai fatto le cose che dici di aver fatto nel tuo curriculum."

    
risposta data 12.08.2015 - 05:35
fonte
0

Penso che in una certa misura, questa dovrebbe essere una valida valutazione delle loro capacità di programmazione. Se qualcuno non sottolinea l'uso di == invece di .equals nella loro revisione di Java, oppure non può spiegare la differenza / perché vorrebbe. Equals, probabilmente non hanno il livello di comprensione del Linguaggio Java per scrivere un buon codice.

Inoltre, in un certo senso questo compito è molto simile a quello che solitamente uno sviluppatore fa quando lavora con il codice legacy. Il codice duplicato e le strane strutture di ereditarietà sono opportunità di refactoring, e un buon sviluppatore li noterà e troverà un buon refactoring o un design migliore. Se uno sviluppatore può farlo, non c'è motivo per cui non dovrebbe essere in grado di scrivere un buon codice.

    
risposta data 12.08.2015 - 05:32
fonte

Leggi altre domande sui tag