Come ingegnere del software, quanto è importante leggere il codice degli altri?


25

Sono un ingegnere informatico in erba (ora al secondo anno, specialista in CS) e faccio davvero fatica a capire i programmi degli altri. Voglio sapere se questa abilità (o mancanza) può essere un handicap per me, e se sì, come posso svilupparla?


1
Pensi di capire il codice quando ti viene spiegato anche o stai imparando solo per tentativi ed errori?
JeffO,

1
Perché questo "stile di codifica" è taggato? È il motivo per cui hai problemi a leggere il codice perché è formattato male? La capacità di leggere il codice non significa che hai bisogno della capacità di comprendere codice molto formattato o offuscato. Esegui prima il codice tramite uno strumento di formattazione, se aiuta.
Brandin

Ho appena letto un articolo questa mattina che mi ha ricordato questa domanda. Perché lavorare su Chrome mi ha fatto sviluppare uno strumento per leggere il codice sorgente
Eric King,

Questa è un'ottima domanda! Ho avuto una domanda di follow-up: se lavori principalmente da solo sul tuo codice (ad es. Come programmatore scientifico su un piccolo progetto), come trovi un buon codice da leggere? Questo è stato chiesto prima: softwareengineering.stackexchange.com/questions/69892/…
Gaurav

Risposte:


49

È essenziale.

Il modo in cui lo sviluppi è scrivendo il tuo codice (molto) e sì, cercando di leggere il codice di altre persone.

Il problema, ovviamente, è che non tutti pensano come fai tu. Sono stato in una classe Java del primo anno molto tempo fa e ci è stato assegnato un incarico. Contrariamente a ciò che credevo (che era che le risposte sarebbero convergute su tre o quattro soluzioni comuni), tutti in classe avevano una soluzione unica per il compito.

Ne consegue che dovresti leggere un buon codice.

Questo è uno dei motivi per cui i motivi di design sono diventati così popolari e perché dovresti studiarli. I pattern di progettazione forniscono un vocabolario comune per i programmatori con cui comunicare e sintonizzano la tua mente per modi "migliori" per risolvere i problemi di elaborazione.

Dovresti anche studiare algoritmi e strutture dati.

Corollario: dovresti sempre sforzarti di scrivere codice che altri sviluppatori possano facilmente comprendere.


7
Corollario: inizia semplicemente sforzandoti di scrivere codice che puoi capire facilmente :-)
gnasher729

4
Generalmente una buona risposta, a parte la parte relativa agli schemi. La maggior parte dei modelli GoF (che è ciò che la gente pensa quando si usa il termine) sono troppo ingegnerizzati, fin troppo granulosi, troppo focalizzati sull'OO o semplicemente anti-schemi. E poi la gente si presenta qui chiedendo quale di questi schemi dovrebbero usare per la loro soluzione. Per favore, non consigliare mai agli sviluppatori di perdere tempo con gli schemi.
David Arno,

Per piccoli problemi (ad esempio, invertire i numeri in un elenco), le possibili risposte dovrebbero convergere in un piccolo numero di possibili soluzioni. Buoni incarichi dovrebbero richiedere la risoluzione di molti di questi problemi e l'organizzazione in qualche modo delle soluzioni a tali problemi, quindi il numero totale di possibili soluzioni all'incarico crescerà molto rapidamente.
Brandin,

15

È molto importante

Una volta laureato e uscito nel mondo, la maggior parte dei progetti su cui lavorerai avrà già il codice fornito da altri. Lucky è il programmatore che riesce a passare tutto il suo tempo in progetti greenfield!

È un'abilità che si acquisisce attraverso la pratica e pazienza, e in molti casi, si tratta di una capacità che molte persone in realtà non ottengono molto opportunità di lavorare su fino a quando , dopo la laurea e ottenere quel primo lavoro. Rilassare!

(anche se la tua scuola ha un programma cooperativo, questo ti darebbe esperienza pre-laurea lavorando a grandi progetti scritti principalmente da altre persone E ti farà ottenere crediti accademici! Qualcosa da esaminare, se disponibile)


7

È un'abilità importante , a seconda delle specifiche di dove lavori, potrebbe persino essere più importante della scrittura del codice stesso.

Come altre abilità, la pratica rende perfetti! Prova a leggere il codice di un altro programmatore, esegui il debug e ciò che mi aiuta personalmente, è il refactoring o il miglioramento di piccoli frammenti di codice e l'espansione da lì.


Inoltre, conoscere un progetto open source che usi e provare a capire come funziona il codice interno può essere utile
RMalke

4

Esistono competenze distinte sia nel codice di lettura che in quello di scrittura.

  • Uno è la sintassi. Conoscere l'aspetto di una dichiarazione di metodo.
  • L'altro è intento. Sapere perché il metodo esiste e quale scopo serve.

Per quanto riguarda la lettura contro la scrittura. Sì, la lettura è essenziale.
Alcune massime che aiutano molti di noi a farlo sono:

  • Il codice viene letto 10 volte (almeno) per ogni volta che viene scritto.
  • Qualcun altro sta leggendo il codice spesso sono ... io in futuro leggo il codice.
  • Non difenderei il mio stile di codice da più di 1 anno fa, da allora è migliorato.

OK. Quindi è tutto fantastico. Ora giù a quello che probabilmente stai vivendo.

Oh mio Dio, questa enorme base di codice con decine di migliaia di righe di codice sorgente e classi lunghe centinaia di righe con dipendenze folli e ogni volta che provo a seguire qualcosa devo mantenere 10 livelli nella mia testa, ecc. ecc.
Familiarità ? Si. Respiro profondo. Rilassare. È normale. È ciò di cui sono fatti i sistemi di produzione. Le persone sopravvivono (e fioriscono) in queste situazioni apparentemente incomprensibili perché:

  • esistono test (si spera) e aiutano anche a documentare il sistema.
  • i programmatori si accoppiano e spesso porta più del doppio del risultato.
  • un buon programmatore diventa bravo a dire che non capiscono fino a quando non lo fanno.
  • le modifiche sono spesso solo una o poche righe di codice che aiutano a isolare cosa testare
  • le basi di codice impiegano mesi e persino anni per acquisire familiarità

Infine, i bravi programmatori scrivono messaggi di commit significativi quando si effettuano modifiche ai sistemi di controllo della versione di origine. (Sentiti libero di aggiungere per rispondere)
rwong

1

La maggior parte di queste risposte si concentra sull'importanza della lettura del codice per l'auto-miglioramento. Sono pienamente d'accordo e lo approvo.

C'è un altro aspetto da tenere a mente: anche se tu fossi un prodigio che non poteva trarre beneficio dalla lettura di altri approcci (impossibile, ma per ragioni di argomento ....), avresti comunque bisogno di sapere come leggere il codice a causa di un concetto che fondamentalmente non esiste in ambito universitario: la stragrande maggioranza dei progetti del settore sono progetti a campo bruno (ovvero all'interno o integrazione con una base di codice preesistente).

La necessità di leggere il codice solo per comprendere la base di codice e i processi esistenti è reale. È sempre possibile porre domande ad un altro sviluppatore sul codice, ma ciò può richiedere solo così tanto tempo. Le persone se ne vanno, cambiano progetto o il tempo passa semplicemente. I dettagli di basso livello svaniscono dalla memoria e i programmatori di manutenzione applicano patch. Ad un certo punto, non esiste un'unica fonte di verità tranne il codice stesso.

Una buona igiene del codice, guide di stile, revisioni del codice e documentazione aiutano, ma a un certo punto il codice è la fonte della verità per ciò che accade e l'unico modo per trovare la risposta sarà andare a prenderlo da soli. A parte i suoi usi nello sviluppo personale, la capacità di leggere il codice è un'abilità distintamente separata dalla sua scrittura.


0

Comprendere il codice degli altri è qualcosa a cui non puoi sfuggire, poiché molto probabilmente lavorerai in gruppo anche se non in gruppo dovrai cercare cose diverse su Google e dovrai capire il codice di esempio. Quindi sì, è un must.

Quello che sento è che tutti hanno questa sensazione che potrebbe essere un po 'meno di altri appositamente all'inizio, capisci il tuo codice meglio di altri codice mentre passi molto più tempo con il tuo codice di quello di qualcun altro mentre leggi non solo leggi ma scrivi e struttura nella tua mente. Se inizi a passare più tempo con il codice degli altri e provi prima a vedere quale tipo di struttura / flusso viene utilizzato, questo ti farà sicuramente capire meglio il codice.

Per rendere il mio punto ancora più convincente se hai del codice che hai scritto un anno fa, prova a capirlo di nuovo e posso dire con certezza che ci vorrà più tempo ma meno del codice di altri poiché hai idea di come strutturi il tuo codice.

Spero che questo aiuto, non rimanere deluso sia perfettamente normale. Trascorri più tempo con il codice e alla fine lo otterrai.


0

Bene, mi è appena stato dato un progetto con circa 100.000 righe di codice scritto da un team in un altro paese e devo apportare alcune modifiche molto significative a una copia del loro codice nei prossimi mesi, lasciando così tanto codice in comune il più possibile.

Mi dici come posso fare il mio lavoro senza la capacità di leggere velocemente il codice di altre persone. Se non riesci a leggere il codice di altre persone, sei completamente, completamente bloccato.

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.