Come leggi il codice degli altri? [chiuso]


23

Quasi ogni programmatore avanzato afferma che è molto utile leggere il codice di altri professionisti. Di solito consigliano open source.

Lo leggi o no? In tal caso, con quale frequenza e qual è la procedura di lettura del codice? Inoltre, per i neofiti è un po 'difficile gestire SVN - un mucchio di file. Qual è la soluzione?

Risposte:


25

Lo leggi o no?

Sì.

Se lo fai, quanto spesso

Quotidiano. Costantemente. Lavoro con numerosi progetti open source (principalmente relativi a Python) e devo leggere la fonte perché è la documentazione più accurata.

e qual è la procedura per leggere il codice?

Um. Apri e leggi.

Inoltre, per i neofiti è un po 'difficile gestire SVN - un mucchio di file. Qual è la soluzione?

Apri e leggi. Quindi leggi di più.

Non è facile. Niente lo rende facile. Non c'è Royal Road da capire. Ci vuole lavoro.


Grazie per la risposta. Qual è il modo di definire se il codice è buono o no? Perché non tutti i progetti open source sono realizzati da veri professionisti?
Sergey,

1
@Sergey: "Qual è il modo di definire se il codice è buono o no?" Leggi il codice "Buono" è soggettivo. Se è utile e puoi capirlo, va bene. Se è confuso o in realtà non funziona, non va bene. Ci sono molti, molti attributi di qualità: mantenibili, sicuri, adattabili, ad alte prestazioni, ecc., Ecc., Ecc., Il codice può essere buono in uno e meno buono in un altro.
S.Lott


@Sergey - anche se è il miglior codice mai scritto, se non riesci a leggerlo (a causa del tuo livello di esperienza), non ti farà nulla di buono. Sebbene tu possa vederlo come non il miglior uso del tuo tempo, ti esporrai a un codice scritto male, quindi potresti anche imparare la differenza. Come diceva S.Lott, ci vuole lavoro e tempo.
JeffO,

Mentre ammiro coloro che possono sedersi e leggere il codice come se leggessero un romanzo, a volte lo trovo un po 'noioso. Mi sono reso conto che per me "leggere il codice" non descrive realmente le attività che intraprendo - una frase migliore per quello che faccio è "comprensione del codice" e implica la lettura della documentazione, il superamento in un debugger e persino la lettura dei test. Ho scritto un lungo post sulla lettura del codice - technikhil.wordpress.com/2010/07/06/how-to-read-code-a-primer
Nikhil

9

Ci sono diversi livelli nell'enigma che hai. Innanzitutto, inizia da un livello elevato, una visione a volo d'uccello per così dire. Dopo aver verificato un progetto, ci sarà un mucchio di file in una struttura di directory. È lo stesso se stai guardando open source o closed source (dopotutto il codice sorgente è il codice sorgente). Quindi inizia con questo:

  • Come sono organizzati i file di origine? Puoi dire con il nome del file o il nome della directory che contiene cosa potresti trovare all'interno? A noi programmatori tendiamo ad apprezzare nomi prevedibili e struttura logica. Dovresti essere in grado di avere un'idea approssimativa di dove cercare un problema specifico.
  • Qual è la natura dell'applicazione, è basata sul web, riga di comando, GUI? Il motivo per cui è importante è che vuoi sapere da dove iniziare a tracciare l'esecuzione. Se è basato sul Web, vuoi iniziare da dove l'app inizia l'elaborazione della richiesta. Se è costruito su un framework, tanto meglio. Una volta che conosci il framework, di solito puoi dare un senso al codice che c'è. Altrimenti inizierai con il rispettivo punto di ingresso per la riga di comando / l'app GUI.
  • Prendi un foglio di carta e una matita, o se sei fortunato una lavagna e pennarelli a secco. Assegna i nomi dei componenti (o usa quelli forniti nel codice) e traccia le linee tra le caselle con le frecce in modo da poter vedere come vengono elaborate le cose. In alternativa, se stai guardando un algoritmo, disegna le strutture di dati in modo da poter capire e delineare come viene manipolato.

Ci vuole pratica, ma è sicuramente fattibile. Più conosci le librerie e i framework utilizzati dall'applicazione, più sai come organizzare il codice e dove cercare le risposte a domande specifiche. Alcuni codici sono un po 'più difficili da seguire, in particolare se sono abbastanza indiretti. Ecco perché hai bisogno di carta e matita. Alla fine una lampadina si spegne nella tua testa e la ottieni. Questo è quando leggere il resto del codice ha molto più senso.


Un aspetto della lettura del codice è l'astrazione. Cose come scoprire come sono organizzate le fonti astraggeranno sicuramente il processo di lettura del codice.
David Gao,

5

Non è come leggere un romanzo, ma più come leggere un libro di consultazione. Un buon modo è quello di scegliere un bug risolto di recente da un messaggio di check in, fare una diff di ciò che è cambiato e leggere le parti rilevanti fino a quando non si capisce sia il problema che la soluzione. Le vulnerabilità di sicurezza ben pubblicizzate sono bug divertenti da individuare perché nei forum si discute molto su di loro. Quindi scegli uno dei bug "frutta bassa" dal tracker dei bug e leggi fino a quando non capisci come risolverlo da solo. La maggior parte dei professionisti della lettura del codice è incidentale nel corso della correzione di bug o dell'aggiunta di funzionalità.

Di solito i migliori esempi di codice sono appena percettibili. Li capirai all'istante senza leggerli più di una volta. Lo fanno sembrare estremamente facile da scrivere, anche se il codice buono di solito passa attraverso molte bozze. Produce la sensazione paradossale che ovviamente il codice dato sia il modo ovvio per farlo, anche se non è il primo modo in cui hai pensato.

Quando ti imbatti in un codice del genere, cerca di capire l'intuizione che è stata introdotta per scriverlo e i principi di progettazione coinvolti, quindi quando ti trovi in ​​una situazione simile in futuro, puoi sperare di applicare gli stessi principi.


4

Un trucco che uso abbastanza spesso quando leggo alcune funzioni complicate, il segmento di codice è iniziare a refactoring in qualcosa di più leggibile senza cambiare la logica.


1
+1: anche a me. // Una volta ho avuto un capo che ha notato il refactoring e mi ha accusato di aver perso tempo. Non riusciva a capire. Che scemo.
Jim G.

2

Come è difficile affrontare "un mucchio di file"? Non è diverso da quando scrivi il tuo codice, tranne che non hai una conoscenza preliminare della sua organizzazione a meno che non sia documentato.

Se tu, come programmatore affermato, non riesci a capire la struttura del progetto da "un mucchio di file" o è un progetto estremamente mal organizzato, o sei un programmatore inetto (o, in casi estremi, entrambi).

Inizia a leggere, prova a trovare alcuni punti di accesso o classi / metodi pivot essenziali e costruisci una comprensione di come tutto procede da lì. Non sarà istantaneo, ci vorrà del tempo, ma può essere fatto anche se non c'è alcuna documentazione.


3
"Ci vorrà del tempo" per "costruire una comprensione" è praticamente la definizione di "difficile". Solo perché è una difficoltà che dovremmo affrontare ogni giorno non lo rende meno difficile. "Dove posso apportare questa modifica?" è una domanda comune anche tra i professionisti. Inoltre, il controllo del codice sorgente e la gestione di basi di codice di grandi dimensioni è una delle enormi lacune nell'istruzione universitaria. Penso di aver fatto uno o due progetti al college che richiedevano più di un file sorgente e che hanno ottenuto solo circa 10 file.
Karl Bielefeldt,

0

La cosa migliore che puoi sperare quando leggi il codice di un altro progetto, sia esso un'API o un software, è che le variabili, le funzioni e i nomi delle macro non sono abbreviati in modo ambiguo o nominati in modo da poter capire il loro intento.

Ma a parte questo, ci vuole una discreta quantità di conoscenza diffusa attraverso il linguaggio, le tecniche di programmazione e anche lo scopo del codice stesso per essere in grado di immergersi in un codice complesso.

Attualmente sto cercando di vedere come Lua fa un po 'della sua magia, ma sto arrivando al punto sopra dove molti identificatori sono nominati vagamente e piuttosto abbreviati al punto in cui non riesco a capire quale linea sta provando per fare ciò che so deve essere fatto ad un certo punto nel codice della funzione ... Le frequenti variabili a lettera singola e i nomi di macro / funzioni piuttosto abbreviati mi stanno facendo impazzire.


0

Dopo aver esaminato il "Primo, inizia dall'alto, una visione a volo d'uccello" come suggerito da @Berin Loritsch puoi cercare unittest e / o test di integrazione se ce ne sono.

gli unittest sono interessanti per vedere come funzionano i (api-) dettagli.

il test di integrazione di solito offre una buona panoramica dei processi aziendali.

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.