È efficace rivedere il codice in una lingua che non conosco?

108

Sono uno sviluppatore esperto, ma non ho fatto molte revisioni del codice. Mi viene chiesto di recensire il codice scritto in Python ma non conosco Python.

Ha senso leggere il codice in una lingua che non conosco?

    
posta Heather Smith 13.01.2016 - 16:14
fonte

11 risposte

120

Qualche senso? Sì. Anche se non sai nulla della semantica di un linguaggio di programmazione, puoi ancora leggere caratteri e notare formattazione incoerente, commenti mancanti, identificatori mal scelti, duplicazione evidente ecc.

Molto senso o abbastanza senso per ripagare il costo del tuo tempo ? Non ne sono sicuro. Ciò dipende dalla tua posizione, dall'importanza delle revisioni del codice nel flusso di lavoro del tuo team e da diversi altri fattori che non possiamo quantificare abbastanza bene.

    
risposta data 13.01.2016 - 16:16
fonte
59

Come contributore regolare a Scambio di stack di revisione del codice , ho incontrato molte domande che soffrono di problemi indipendenti dalla lingua, ad esempio:

  • Formattazione, indentazione
  • Ambito di applicazione
  • Loop
  • Esegui operazioni

e la lista continua. Tuttavia, anche se non ho bisogno di conoscere la lingua, posso comunque rivedere quei problemi / punti.

Alcuni dei nostri migliori utenti hanno le migliori risposte in lingue che non usano attivamente o non sanno. Anche due dei miei primi dieci sono in lingue che non conosco né posso compilare / eseguire sulla mia macchina.

Direi anche che sarebbe come rivedere lo pseudo codice di qualcuno. Finché puoi osservare e commentare cose rilevanti per le cose che capisci, starai bene e sarà rilevante.

    
risposta data 13.01.2016 - 18:13
fonte
44

Consigli generali

Ecco la linea di fondo, a mio parere:

  • Se non conosci abbastanza bene la lingua per conoscerne le caratteristiche e gli idiomi comuni , probabilmente non contribuirai molto alla revisione.
  • Se vuoi imparare le caratteristiche e gli idiomi della lingua, potresti partecipare alla revisione. Il tuo obiettivo dovrebbe essere quello di osservare gli idiomi e fare domande su modelli e organizzazione che non hanno senso per te. Questo può aiutare a identificare le aree problematiche, ma solo nel senso che potresti costringere lo sviluppatore a difendere ciò che hanno fatto. Fai le tue domande in un modo che lasci spazio alla tua mancanza di conoscenza. Nota che questo potrebbe essere un costo netto nella recensione stessa, ma che il costo è un investimento a tua conoscenza.
  • La tua capacità di contribuire fino a quando non avrai familiarizzato con le caratteristiche, gli idiomi e gli standard della lingua sarà limitata. Non mi aspetto che questo cambierà finché non hai scritto una quantità significativa di codice nella lingua.

Considerazioni ed esempi specifici di Python

Per la situazione specifica di non conoscere Python, sarei particolarmente cauto su questo. Python ha un sacco di idiomi e pratiche standard che finiscono per fare un buon aspetto di Python molto diverso da quello che ci si potrebbe aspettare in altre lingue. (In effetti, penso che le cose che Python enfatizza abbiano reso il mio codice migliore nelle altre lingue, e non il contrario.) Beyond PEP8 ha un buon esempio di come potresti perdere completamente l'approccio mentale che Python incoraggia.

Diamo un'occhiata a un semplice esempio. Prendi questo codice:

f = open('/home/me/something.txt')
try:
    content = f.read()
finally:
    f.close()

Vedi il problema con questo codice? Se non hai lavorato con Python, probabilmente no. Il problema è che in Python c'è uno stile preferito molto che esattamente ha la stessa cosa:

with open('/home/me/something.txt') as f:
    content = f.read()

Questo è un gestore di contesto. Sai a cosa servono? Sai quando sarebbe opportuno usarne uno? Sai quando sarebbe opportuno crearne di tuoi? No? Quindi probabilmente non sei pronto per rivedere Python.

Diamo un'occhiata a un altro esempio.

def add_fifty(other_list):
   result = list()
   for i in other_list:
       result.append(i + 50)
   return result

x = range(10)
y = add_fifty(x)

Vedi il problema? Il problema è che questo metodo è completamente non necessario . Probabilmente dovresti semplicemente usare una comprensione sul posto, quando l'operazione è così semplice:

x = range(10)
y = [i + 50 for i in x]

Se non l'hai visto, non hai familiarità con le caratteristiche e gli idiomi di Python.

    
risposta data 13.01.2016 - 18:53
fonte
21

Potrebbero averti chiesto di revisionare il codice di Python proprio perché non conosci Python . C'è una teoria di gestione che è utile avere un "pazzo" in una squadra. Non ti sto definendo un brutto nome :) L'idea è che una squadra possa soffrire per il pensiero del gruppo e sviluppare la visione del tunnel. Un modo per uscire da questo è includere qualcuno nel team che gli altri membri del team considererebbero un "pazzo", cioè qualcuno che non conosce l'argomento. Farai domande per informarti e le domande verranno da un punto di vista che probabilmente gli altri membri del team non hanno mai considerato.

Non conosci Python, quindi quello che potrebbe sembrare normale ai programmatori Python può sembrare strano a te. Potresti suggerire un miglioramento che il team non ha mai considerato.

    
risposta data 13.01.2016 - 21:41
fonte
21

La revisione del codice non riguarda la ricerca di variabili con spelling non valido e formattazione errata. Se usi la revisione del codice per trovare queste cose, smetti di sprecare il tuo tempo e usa uno strumento.

La revisione del codice riguarda il miglioramento della progettazione e la rilevazione di errori comuni da parte di un programmatore principiante.

Poiché programma in C ++ , e non conosco abbastanza bene Python, non lo farei t osare rivedere il codice Python. Tuttavia, potrei aiutare con una revisione del codice Java.

Non hai detto in quale lingua programma, ma non vedo cosa potresti contribuire a una revisione del codice, se non conosci la lingua in cui è stato programmato.

    
risposta data 13.01.2016 - 16:24
fonte
11

Le revisioni del codice (oltre a cercare effettivamente i difetti) sono una buona introduzione da un membro del team ad altri per l'aggiunta o la modifica del codice. Se sei uno sviluppatore esperto , dovresti essere in grado di leggere abbastanza per capire principalmente cosa sta succedendo.

Guarda una recensione del codice dal punto di vista di un team leader: c'è qualcuno che capisce cosa dovrebbe fare l'applicazione (business logic), c'è qualcuno che capisce che il codice sta facendo (logica di implementazione), e forse molte altre persone che hanno bisogno di avere un'idea di come tutto ciò si combini.

    
risposta data 13.01.2016 - 16:51
fonte
7

Non dovresti assolutamente essere il revisore solo , ma ci sono molti buoni motivi per essere uno dei revisori. Non conoscere la lingua non è un ostacolo per molte domande che richiedono una risposta in una revisione del codice. Ad esempio, sono uno dei top 20 risponditori nel C# tag su questo sito e non ho nemmeno compilato Hello World in C #.

Alcune competenze che puoi condividere senza conoscere la lingua:

  • Conoscenza del dominio.
  • Progettazione generale orientata agli oggetti.
  • Pratiche di programmazione generale: denominazione, chiarezza e così via.

È anche un buon modo per arrivare alla velocità su un nuovo prodotto. Sono appena entrato in una nuova squadra, dove conosco abbastanza bene le lingue, ma non conosco il dominio. La partecipazione alle revisioni del codice mi ha aiutato a imparare meglio il dominio, anche se non sono ancora riuscito a contribuire molto su queste linee.

Nel tuo caso, sarà un buon modo per imparare gli idiomi di una nuova lingua, come si vedono i commenti lasciati dagli altri revisori. Questi sono i tipi di cose che sono molto difficili da imparare in un altro modo, perché il tuo interprete non si cura se il tuo codice è pitonico o no.

    
risposta data 13.01.2016 - 20:37
fonte
5

Questa potrebbe essere una situazione vantaggiosa per tutti. Direi che potresti essere un recensore particolarmente prezioso perché sei una vergine di Python che non è stata contaminata dal Maledizione della conoscenza .

Pensa in questo modo: se il codice è abbastanza chiaro che anche una vergine di Python può capirlo, allora deve essere un buon codice. Le parti che non riesci a capire potrebbero essere candidate a rilavorazioni o commenti migliori.

Ovviamente, sarebbe vantaggioso anche per te, perché dovresti prendere in mano una nuova lingua. (Si spera che il codice che ti viene dato sia un buon esempio da cui imparare.) Questo accordo dovrebbe funzionare particolarmente bene per Python, un linguaggio che ha la reputazione di essere "pseudocodice eseguibile". Se sei uno sviluppatore esperto, non dovresti avere molte difficoltà a comprendere il senso di un programma Python.

L'avvertimento è che non ci si aspetterebbe di individuare i bug derivanti da getchas specifici della lingua . Ma l'individuazione dei bug non è l'unico scopo delle revisioni del codice. Se non altro, parteciperesti al trasferimento di conoscenza semplicemente rendendoti conto del tipo di cose che si verificano nel codice del tuo collega.

    
risposta data 14.01.2016 - 10:52
fonte
2

Una volta mi è stato chiesto di controllare un progetto che era stato intrapreso da un subappaltatore e sembrava avere seri problemi di prestazioni. Ho rapidamente stabilito che il fattore critico era un singolo modulo Perl. Non avevo mai incontrato Perl prima e non avevamo nessuno nell'organizzazione che lo conoscesse, quindi ho deciso di provare a capirlo da solo. Non sono mai riuscito a capire i dettagli, ma era chiaro che l'algoritmo che utilizzava era quadratico nella dimensione dei dati e questa era la causa di tutti i problemi. Quindi sì, leggere il codice in una lingua che non comprendi pienamente può sicuramente essere produttivo. Il bonus è che impari nuovi trucchi mentre lo fai.

    
risposta data 16.01.2016 - 16:20
fonte
1

Alcune osservazioni:

1) Se sei uno sviluppatore esperto, acquisirai Python (o almeno per quanto ne hai bisogno), semplicemente lavorando con esso. Sarà un caso di "imparare facendo". All'inizio sarà difficile, ma diventerà più facile quando ascolterai la lingua. Pensa a questa come un'opportunità per imparare un'altra lingua (le persone spesso imparano le lingue "straniere" attraverso "immersione".)

2) Ci sono un certo numero di persone preziose su siti SE che sono "non tecnici", ma sono esperti in grammatica, comunicazione e logica. Queste persone portano un "occhio nuovo" ai soggetti e fanno una serie di "correzioni senza cervello" che gli altri mancano, perché sono troppo "legati" nel materiale. Vieni consultato presumibilmente per le tue abilità non "tecniche" (cioè non Python) come logica e capacità di programmazione generale.

E se non hai fatto molta revisione del codice, quasi qualsiasi esperienza di revisione del codice ti aiuterà come sviluppatore. Sembra una buona corrispondenza tra le tue capacità e le tue esigenze e quelle della squadra.

    
risposta data 13.01.2016 - 17:38
fonte
0

Dipende da quale sia l'obiettivo della recensione; cioè cosa intendi per efficace .

Sarai comunque in grado di rilevare alcuni problemi. Se sei tutto ciò che hanno da recensire e sperano solo che dargli un'occhiata possa aiutare qualcuno e forse catturare qualcosa, quindi sicuro. Molti concetti di struttura sono simili tra le lingue. Uno in particolare è in grado di rivedere i commenti. Dovrebbe essere commentato abbastanza bene che un programmatore non di quel particolare linguaggio dovrebbe essere in grado di ottenere una buona sensazione di ciò che sta accadendo. Se no ... allora puoi dire loro dove manca il loro commento. Se è così ben commentato ... allora dovresti essere in grado di rivedere un po 'della loro struttura solo attraverso le annotazioni di quello che sta succedendo piuttosto che leggere il codice di quello che sta succedendo.

Ma probabilmente non scoprirai molti altri problemi. Quindi, se intendono che la tua recensione sia una determinazione esauriente sull'opportunità o meno di un programma ben fatto / lavorabile, rimarranno delusi.

Che il risultato sia valido o meno, dipende in gran parte dal progetto.

    
risposta data 14.01.2016 - 18:48
fonte

Leggi altre domande sui tag