Leggere il codice sorgente per imparare [chiuso]

5

Man mano che sviluppi come programmatore, sviluppatore di software o programmatore, IMHO, inizi a vedere diverse (migliori o peggiori) pratiche, diversi algoritmi e "più di un modo per farlo". Vedere questo codice può essere una grande esperienza di apprendimento per te, anche se non hai scritto il codice. Ma questo sta solo per confondervi?

Ad esempio, supponiamo che tu abbia una biblioteca in qualsiasi lingua creata da un collega e che la stai usando da un po '. Decidi di guardare il vero codice sorgente, indipendentemente da quanto è esteso, e vedere meglio come è scritta questa libreria. Per fare un esempio, la funzione che usi più spesso da questa libreria è la funzione max , che trova il più grande dei due numeri. Ma questa funzione è molto più complicata di quanto dovrebbe essere. Il modo in cui è scritto ti confonde e non sai come funziona.

Questo ti renderà un programmatore migliore, perché ti rendi conto di quanto sia complicato per una funzione così semplice, o ti farà diventare un programmatore peggiore perché ti senti meno confidente?

Quindi la mia domanda, in generale, è la lettura del codice sorgente ti rende un programmatore migliore e se sì, come? Se no, perché la gente continua a farlo? .

    
posta Dynamic 24.11.2011 - 16:42
fonte

9 risposte

8

Leggi il codice di una funzione ed è sorprendentemente complesso: potresti scoraggiarti perché è complicato e spaventoso e ti fa stare male. O potresti provare a capirlo. Potresti fallire, ma penso che in generale starai ancora meglio, dato che probabilmente imparerai qualcosa da esso, e anche se impari qualcosa di molto piccolo, è ancora meglio che imparare niente affatto.

Non conosco molte persone che si siedono e iniziano a leggere il codice sorgente in modo ricreativo. Io non lo faccio, non lo trovo divertente. Di solito se sto "leggendo il codice" è come un esempio in qualche documentazione, o fa parte di un sistema esistente su cui sto lavorando (magari aggiungendo alcune funzionalità, correggendo bug, qualunque cosa). Entrambe queste possono essere ottime fonti di apprendimento.

    
risposta data 24.11.2011 - 16:51
fonte
11

does reading source code make you a better programmer and if so how? If not why do people still do it?

La lettura non ti rende migliore, capirlo fa e lo fai perché lavori in un team e non sempre hai la possibilità di lavorare solo sul tuo codice. Viene fornito con il territorio.

Gran parte del tuo tempo di programmazione viene speso non scrivendo il codice, ma leggendolo . Quindi potresti iniziare subito: D

    
risposta data 24.11.2011 - 16:51
fonte
3

Leggere il codice sorgente è difficile per molte persone. Ci vuole un grande sforzo per imparare a farlo correttamente in modo da ignorare i dettagli irrilevanti e concentrarsi sulle cose importanti. Il periodo di tempo per imparare questa roba è come 10-20 anni. Non puoi aspettarti che le persone che hanno scritto codice per un breve periodo di tempo sappiano come leggere il codice correttamente.

D'altra parte, è un'abilità che può essere appresa. Richiede uno sforzo concentrato durante diversi anni per imparare a farlo. Aiuta moltissimo una volta che l'hai imparato. È come trovare dei problemi nel codice che erano completamente impossibili da trovare prima - a volte trova anche problemi in moduli che non hai mai visto nemmeno nel codice.

    
risposta data 24.11.2011 - 21:26
fonte
2

Oltre alla risposta fornita da FrustratedWithFormsDesign,

Lì non penso che ci sia un gran numero di persone là fuori che gira la ruota e inizia a leggere il codice sorgente di programmi casuali.

Ma nell'interesse della formazione continua, in genere quello che faccio è scegliere uno dei giochi che mi piacciono (uso Ubuntu sul mio desktop, quindi la maggior parte dei giochi che gioco sono disponibili come fonte), e provo a scorrere nella mia testa come funziona Come lo farei se dovessi scrivere da zero senza prima vedere il codice? Non solo generalizzato, ma pensa alle interazioni tra i personaggi e il mondo, o tra i personaggi e tra loro, o forse come la mappa viene generata o visualizzata dinamicamente allo schermo, o come funziona l'IA.
Poi, con quello nella tua testa, guarda quanto sei vicino. Confrontando il modo in cui lo avresti fatto con il modo in cui è attualmente scritto, vedrai altri modi di programmarlo, e sarà più coinvolgente che scegliere un programma e immergerti come se fosse un romanzo di fantascienza o il simile.

    
risposta data 25.11.2011 - 19:50
fonte
1

Non avrai sempre il piatto quando si tratta di codice sorgente. Alcune persone scrivono codice elegante in modo che tutti possano consumarle, ma alcune scrivono in un modo che nemmeno loro possono capire in seguito.

In ogni caso, avrai qualcosa da cui imparare. Se il codice è scritto bene, puoi metterlo in pratica o se il codice è molto complicato, ti verrà in mente la possibilità di imparare come ottenerlo in modo migliore e più pulito.

Conclusione : - Non esitare mai dal codice che stai trattando

    
risposta data 24.11.2011 - 18:07
fonte
1

Anche se contribuirà, non credo che solo la lettura del codice sia la ragione principale per diventare un programmatore migliore. Se fosse allora sarei un super programmatore ormai con tutto il codice che ho letto nel corso degli anni (o posso solo sognare).

Penso che sia una combinazione di cercare di capire il codice che stai leggendo e quindi nel processo di determinare se quel codice è una soluzione buona / cattiva.

Nel processo di venire a questa decisione tendi a fare cose come:

  1. Interroga lo sviluppatore originale sul loro scopo durante la scrittura del suddetto codice
  2. Leggi gli articoli di altri sviluppatori sul fatto che parti del codice siano buone prassi di programmazione
  3. Decidi se hai compreso il codice da una scansione. Spesso se è così, questo è un buon punto di partenza per sapere che stai leggendo un buon codice.
  4. Cerca di capire un modo migliore di fare un pezzo di codice nella lingua in cui ti stai sviluppando.

Mettere insieme questi elementi ti aiuterà a diventare un programmatore migliore.

Quindi in sintesi. La lettura del codice è il mezzo. La metodologia con cui si procede all'elaborazione / analisi di quel codice è ciò che ti aiuterà a migliorare la programmazione.

Perché le persone lo fanno? Perché devi imparare da qualche parte e leggere il codice del tuo pari ti dà una via per raggiungere ciò che la maggior parte dei programmatori desidera. Essendo una soluzione elegante / pulita / estensibile, possono rilassarsi alla fine della giornata con una bella birra fredda e dire che lavoro fatto!

    
risposta data 25.11.2011 - 03:59
fonte
0

È molto utile leggere alcuni codici di discussione dei miei colleghi. Ma non i programmi nel loro complesso, perché la maggior parte di tutti i programmi è solo un codice boilerplate. Il meglio che puoi fare è leggere blog di buoni programmatori, perché ti mostreranno la parte più interessante e ti diranno anche, perché hanno usato una tale costruzione - imparerai a fare a modo loro. E questa è la cosa più importante - non il codice stesso, ma i pensieri dietro di esso.

Penso di non aver bisogno di aggiungere che è ancora meglio discutere con i tuoi colleghi e amici programmatori su come risolvere qualche problema - troverai molti nuovi pensieri e insieme potresti apprendere un approccio event, che è nuovo per entrambi (tutti) di te.

    
risposta data 24.11.2011 - 18:31
fonte
0

Sicuramente penso che lo faccia; il trucco sta nel trovare un buon codice da leggere. Penso di aver imparato quasi tanto dalla lettura della sorgente al vecchio compilatore Pascal CDC6000 come ho fatto dal mio corso di compilatore. Ho anche imparato molto sugli interni dei sistemi operativi dalla lettura dei sorgenti del kernel di BSD 4.2. Al giorno d'oggi, probabilmente dare un'occhiata al L4 microkernel o al OpenJDK fonti.

    
risposta data 28.11.2011 - 22:02
fonte
0

occasionalmente uso codice sorgente del software. Fornisce frammenti di informazioni tattiche. Più informazioni strategiche non possono essere raccolte senza spendere tempo effettivo a lavorarci su e studiare il sistema nel suo complesso, credo.

  • nginx ha un codice C piuttosto carino. È stato descritto come geometrico.
  • Anche il codice SBCL è molto carino ed è piuttosto vecchio; puoi leggere il flusso storico del codice quando lo leggi.
risposta data 28.11.2011 - 23:18
fonte

Leggi altre domande sui tag