Come valutare la qualità del codice quando non si ha familiarità con la lingua? [chiuso]


10

Come ipotetico, se dovessi intervistare qualcuno per una nuova posizione di sviluppatore PHP quando la mia esperienza è in .NET, come posso determinare se l'esempio di codice che mi hanno fornito è efficiente e di buona qualità?

In altre parole, qual è il modo migliore per valutare il codice di un programmatore se non hai familiarità con la lingua?


1
Odio dirtelo, ma tu non :-) Includi qualcuno nell'intervista che conosca la lingua o la impari da te.
Joppe l'

2
Ecco perché il colloquio è uno sforzo di squadra. Valutate ciò che siete in grado di valutare, e rimandate questo tipo di cose ad alcuni lead di team tecnici che hanno familiarità con esso.
Kaz

Per me la metrica migliore è la dimensione delle funzioni (inclusa qui la profondità di nidificazione) seguita dalla dimensione delle classi / file.
m3th0dman,

Risposte:


20

come posso determinare se l'esempio di codice che mi hanno fornito è efficiente e di buona qualità?

Le cose che non sarai in grado di valutare sono l'uso corretto dei linguaggi linguistici e l'uso della biblioteca. Quindi, queste non sono cose che dovresti provare a guardare.

Quello che puoi valutare è:

  • Com'è strutturato il codice
  • Variabili ben definite (puoi dare un senso alle cose)
  • Funzioni / unità di codice ben composte
  • Coerenza nella base di codici

I punti precedenti (sebbene non esaustivi) indicheranno se il codice ha un odore o meno e dovrebbe essere qualcosa che un programmatore esperto può identificare come buono o cattivo.

In breve, cerca cose che dovrebbero indicare un buon codice indipendentemente dalla lingua.


5
Un altro importante: "I commenti sono chiari, significativi e di facile comprensione?" Potresti imparare un po 'di cosa fa un pezzo di codice dai commenti, anche se hai poca esposizione alla lingua?
FrustratedWithFormsDesigner

2
@FrustratedWithFormsDesigner - Commenti? Cosa sono quelli? Scherzi a parte, il codice dovrebbe essere un commento personale. I commenti dovrebbero essere lì solo per spiegare il perché o motivare il cattivo codice.
Oded,

6
Chiedo estrema cautela: è molto facile finire per scegliere sulla base di chi scrive il codice più come a cui sei abituato, il che potrebbe essere un uso relativamente scarso di quella lingua.
Jerry Coffin,

@FrustratedWithFormsDesigner Oded probabilmente pensa che dovresti leggere questo elegantcode.com/2010/04/18/…
Joel

4

Invitali a tracciare un diagramma di flusso o a guidarti durante l'intervista. Hai la scusa perfetta per chiedere e dice un bel po 'di come pensano di vedere come spiegano.

Se stanno per saltare nella tua lingua preferita, sai che hai un sacco di tutoraggio in arrivo, quindi dovresti cercare buone capacità logiche / di ragionamento soprattutto prima di tutto.

Se continueranno a lavorare nella loro lingua preferita, dovrai accettare che mi auto-gestiranno in qualche modo sui dettagli specifici della lingua più fine fino a quando qualcun altro non si accelera comunque, quindi tutto ciò che dovrai interagire con c'è anche il lato del design.


1
Se il candidato può spiegare il proprio codice in modo che l'intento e lo scopo dietro di esso siano chiari e visivamente, l'organizzazione e la struttura generale sembrano ragionevoli, probabilmente hanno una comprensione ragionevole di ciò che il codice rappresenta. E probabilmente potrebbe ripetere una riproduzione pulita simile. Anche se particolari parti sono spiegate con un minimo di "perché è quello che un particolare materiale di riferimento ha mostrato come farlo", mentre si nomina il materiale di riferimento, almeno si ha una modesta rappresentazione della capacità non solo di "codificare" ma di trovare e applicare soluzioni ai problemi che non affrontano abitualmente.
Giustino l'

1

A parte il codice ossuto / ovviamente sbagliato, l'efficienza dipenderà in gran parte dal compilatore / interprete della lingua in questione e non sarà davvero in grado di osservarlo da un esempio di codice. Un esempio di codice potrebbe essere magnificamente scritto ed elegante come una bella porcellana sui centrini, ma potrebbe essere lento se compilato / interpretato male.

Non sarai in grado di valutare l'uso idiomatico delle caratteristiche linguistiche / zucchero sintetico / convenzioni senza una certa familiarità.

Dovresti essere in grado di dire se è ben scritto in generale sulla base di considerazioni universali come l'ordine, il flusso di controllo, la denominazione variabile, l'ordine delle operazioni e così via.

Tuttavia, più praticamente, se sai quale lingua sta per entrare nel processo, potresti provare a trovare una o più guide di stile per quella lingua, andare al negozio di libri e sfogliare un paio di libri per quella lingua e sfoglia gli esempi di codice alla ricerca di analoghi a qualcosa che conosci con la / e tua / e lingua / e scelta / e, controlla uno o più progetti open source che usano quella lingua e così via.

Se hai tempo e se non c'è una barriera dei costi, potresti persino arrivare a impostare un ambiente di sviluppo per quella lingua e ad avviare un'app Hello World, fare un codice kata o scrivere una semplice piccola app dentro. Svilupperai un quadro di riferimento rudimentale abbastanza rapidamente e non solo questo ti darà un vantaggio allo scopo specifico di rivedere il codice in questione, potresti essere costretto dal linguaggio e ramificarti un po '.


1

Indipendentemente dalla lingua:

  • Esistono chiare separazioni di preoccupazioni, un uso appropriato delle classi (per le lingue OO) o indicazioni di tentativi deliberati di scomporre il codice in "blocchi" riutilizzabili e modulari?
  • Allo stesso modo, qualsiasi prova di test - test unitari o altro?
  • Se è un codice di produzione, è disseminato di stringhe di debug che potrebbero suggerire una piccola separazione tra sviluppo e distribuzione?
  • Il codice segue qualche tipo di convenzione di denominazione (che ti piaccia o meno che sia irrilevante!)?
  • Se hai il file, piuttosto che una stampa, ogni funzione / classe nel file si riferisce al (quindi se si tratta di un file chiamato data_access_layer , l'evidenza delle funzioni che elaborano le immagini sarebbe probabilmente fuori posto).
  • Anche le indicazioni di una mancanza di fiducia per l'input dell'utente sono buone, specialmente per linguaggi basati sul web come PHP. Quindi strutture come input = escape (input) mostrano almeno che sono a conoscenza del problema.
  • Commenti o codice auto-descrittivo sono sempre validi. Esistono diverse scuole di pensiero sulla quantità di commenti che dovrebbero essere presenti, ma una completa assenza di commenti
  • A costo di essere cinico, vorrei anche google parte del codice prima dell'intervista. Purtroppo potrebbe essere un lavoro di copia e incolla.

Non dire che qualsiasi codice che non ha tutti questi è automaticamente scarso, ma considererei questi come indicatori di qualcuno che ha riflettuto e considerato la loro pratica.

Tuttavia, per tutti questi indicatori, dovresti chiedere quale sia la logica del codice. Potrebbe esserci un buon motivo specifico per la lingua per le loro scelte ... e dopo, google è tuo amico quando loro e gli altri candidati se ne vanno, poiché puoi verificare se ciò che hanno detto sembra plausibile ...!

Buona fortuna, poiché assumere brave persone è uno dei ruoli più importanti nella tua organizzazione;)


Col senno di poi, questo duplica gran parte di ciò che ha detto @Oded (e i commenti).
Frackham,

0

Dovresti chiedere a qualcuno che conosce la lingua in questione di venire al colloquio o dare un'occhiata al campione. Una persona del genere troverà molto più probabilmente eventuali punti negativi.

Il candidato lavorerà in gruppo? Lascia che i membri del team lo incontrino e faccia domande sulle sue capacità.


-2

Chiedi loro quali sono i limiti riscontrati durante l'utilizzo della lingua. Chiedi loro di mostrarti una semplice query SQL. Qualsiasi sviluppatore di Php che meriti uno spasso dovrebbe essere in grado di battere una query di selezione / aggiornamento / eliminazione di base senza troppi sforzi.

Doug

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.