Qual è il libro più influente che ogni programmatore dovrebbe leggere? [chiuso]


1439

Se potessi tornare indietro nel tempo e dirti di leggere un libro specifico all'inizio della tua carriera come sviluppatore, quale libro sarebbe?

Mi aspetto che questo elenco sia vario e che copra una vasta gamma di cose.

Per cercare: utilizzare la casella di ricerca nell'angolo in alto a destra. Per cercare le risposte alla domanda corrente, utilizzare inquestion:this. Per esempio:

inquestion:this "Code Complete"

8
Sfogliare questa discussione mi fa capire quanto siano brutti i libri sulla programmazione. Discussione molto buona però!
Carl Bergquist,

23
Questo è interessante, mentre il titolo recita "Qual è il libro più influente che ogni programmatore dovrebbe leggere?", Ci sono alcuni libri suggeriti che trattano argomenti specifici della lingua. Per definizione e per domanda come è stato messo, i libri suggeriti qui dovrebbero trattare argomenti di linguaggio agnostico, il che dimostra che la maggior parte dei programmatori deve ancora imparare a leggere.
Rook,

19
Se potessi tornare indietro nel tempo e dirmi di leggere qualcosa, è meglio che sia un giornale o un libro di fatti sportivi che ho portato con me. Qualsiasi altra cosa è uno spreco di buoni viaggi nel tempo. :-)
jmucchiello

32
Sai, se non fossi preoccupato di scendere votato TUTTO, andrei trollishly a suggerire Twilight. "Dipende ANCHE da persone pallide che evitano il sole!"
Jacob Bellamy,

3
Qualcuno può ripulire le risposte eliminando voci ripetute sui libri? La maggior parte di essi ha già votato in ribasso.
rao,

Risposte:


1746
  • Code Complete (2a edizione) di Steve McConnell
  • Il programmatore pragmatico
  • Struttura e interpretazione dei programmi per computer
  • Il linguaggio di programmazione C di Kernighan e Ritchie
  • Introduzione agli algoritmi di Cormen, Leiserson, Rivest & Stein
  • Design Patterns by the Gang of Four
  • Refactoring: migliorare la progettazione del codice esistente
  • Il mese dell'uomo mitico
  • L'arte della programmazione per computer di Donald Knuth
  • Compilatori: principi, tecniche e strumenti di Alfred V. Aho, Ravi Sethi e Jeffrey D. Ullman
  • Gödel, Escher, Bach di Douglas Hofstadter
  • Clean Code: un manuale di agile software artigianale di Robert C. Martin
  • C ++ efficace
  • C ++ più efficace
  • CODICE di Charles Petzold
  • Programmazione di perle di Jon Bentley
  • Lavorare efficacemente con il codice legacy di Michael C. Feathers
  • Peopleware di Demarco e Lister
  • Coders at Work di Peter Seibel
  • Sicuramente stai scherzando, signor Feynman!
  • Efficace seconda edizione di Java
  • Patterns of Enterprise Application Architecture di Martin Fowler
  • The Little Schemer
  • Lo Schemer Stagionato
  • Why's (Poignant) Guide to Ruby
  • I detenuti gestiscono l'asilo: perché i prodotti ad alta tecnologia ci fanno impazzire e come ripristinare la sanità mentale
  • L'arte della programmazione Unix
  • Sviluppo guidato dai test: dall'esempio di Kent Beck
  • Pratiche di uno sviluppatore agile
  • Non farmi pensare
  • Sviluppo software agile, principi, schemi e pratiche di Robert C. Martin
  • Domain Driven Designs di Eric Evans
  • The Design of Everyday Things di Donald Norman
  • Design moderno in C ++ di Andrei Alexandrescu
  • Miglior software di scrittura I di Joel Spolsky
  • La pratica della programmazione di Kernighan e Pike
  • Pensiero e apprendimento pragmatici: rifatti il ​​tuo Wetware da Andy Hunt
  • Software Stimation: Demystifying the Black Art di Steve McConnel
  • The Passionate Programmer (My Job Went To India) di Chad Fowler
  • Hackers: Heroes of the Computer Revolution
  • Algoritmi + Strutture dati = Programmi
  • Scrivere codice solido
  • JavaScript: le parti buone
  • Realizzare con 37 segnali
  • Fondamenti di programmazione di Karl Seguin
  • Computer Graphics: Principles and Practice in C (2nd Edition)
  • Pensando in Java di Bruce Eckel
  • Gli elementi dei sistemi informatici
  • Refactoring to Patterns di Joshua Kerievsky
  • Moderni sistemi operativi di Andrew S. Tanenbaum
  • The Annotated Turing
  • Cose che ci rendono intelligenti di Donald Norman
  • Il modo senza tempo di costruire di Christopher Alexander
  • The Deadline: A Novel About Project Management di Tom DeMarco
  • Il linguaggio di programmazione C ++ (3a edizione) di Stroustrup
  • Modelli di Enterprise Application Architecture
  • Sistemi informatici: la prospettiva di un programmatore
  • Principi, schemi e pratiche agili in C # di Robert C. Martin
  • Software orientato agli oggetti in crescita, guidato da test
  • Linee guida per la progettazione di quadri di Brad Abrams
  • Object Thinking del Dr. David West
  • Programmazione avanzata in ambiente UNIX di W. Richard Stevens
  • Hacker e pittori: grandi idee dall'era dei computer
  • L'anima di una nuova macchina di Tracy Kidder
  • CLR via C # di Jeffrey Richter
  • Il modo senza tempo di costruire di Christopher Alexander
  • Design Patterns in C # di Steve Metsker
  • Alice nel paese delle meraviglie di Lewis Carol
  • Zen and the Art of Motorcycle Maintenance di Robert M. Pirsig
  • Informazioni su Face - The Essentials of Interaction Design
  • Here Comes Everybody: The Power of Organizing Without Organizations di Clay Shirky
  • Il Tao della programmazione
  • Bellezza computazionale della natura
  • Scrittura di Solid Code di Steve Maguire
  • Philip and Alex's Guide to Web Publishing
  • Analisi e progettazione orientate agli oggetti con applicazioni di Grady Booch
  • Efficace Java di Joshua Bloch
  • Computabilità di NJ Cutland
  • Masterminds of Programming
  • Il Tao Te Ching
  • Il programmatore produttivo
  • L'arte dell'inganno di Kevin Mitnick
  • The Career Programmer: Guerilla Tactics for an Imperfect World di Christopher Duncan
  • Paradigmi di programmazione di intelligenza artificiale: casi di studio in Lisp comune
  • Masters of Doom
  • Pragmatic Unit Testing in C # con NUnit di Andy Hunt e Dave Thomas con Matt Hargett
  • Come risolverlo di George Polya
  • The Alchemist di Paulo Coelho
  • Smalltalk-80: il linguaggio e la sua implementazione
  • Writing Secure Code (2nd Edition) di Michael Howard
  • Introduzione alla programmazione funzionale di Philip Wadler e Richard Bird
  • Nessun bug! di David Thielen
  • Rielaborazione di Jason Freid e DHH
  • JUnit in azione

16
Code Complete è un bel libro se forse sei al college. Se hai almeno 1 anno di esperienza di programmazione, è una noia totale.
Bogdan Gavril MSFT,

19
Code Complete contiene molte informazioni utili, ma è sepolto in iperbole, waffle e ripetizioni, il che lo rende difficile da leggere.
Jeff Yates,

76
Ho letto Code Complete 3 anni nella mia carriera. Non avevo seguito un corso di ingegneria del software né un corso di costruzione di linguaggi di programmazione ma avevo seguito alcuni corsi introduttivi di CS. È di gran lunga il miglior singolo libro che abbia mai letto per diventare un programmatore migliore. Non ti renderà uno specialista ma ti renderà molto più di un armeggiatore.
Shea,

119
Il problema con questo libro è che per un principiante non ha davvero senso in quanto i concetti sono un po 'avanzati. Quando sei pronto per poterlo leggere, dovresti già conoscere e praticare il 99% dei concetti nel libro.
esac,

57
Questo è l'accordo con suggerimenti di buon senso, come quelli che si trovano in questo libro. Ogni tanto è necessario ricordare loro di tornare in linea.
JohnFx,

9

K & R

@Juan: Conosco Juan, lo so - ma ci sono alcune cose che possono essere apprese solo andando effettivamente al compito da svolgere. Parlare in ideali astratti tutto il giorno ti rende semplicemente un accademico. È nell'applicazione dell'astratto che abbiamo veramente scoperto la ragione della loro esistenza. : P

@Keith: grande menzione di "I detenuti gestiscono l'asilo" di Alan Cooper - un colpo d'occhio per certo, qualsiasi sviluppatore che ha lavorato con me da quando ho letto quel libro mi ha ascoltato menzionare le idee che sposa. +1


9

Matematica discreta per informatici http://ecx.images-amazon.com/images/I/51HCJ5R42KL._SL500_BO2,204,203,200_AA219_PIsitb-sticker-dp-arrow,TopRight,-24,-23_SH20_OU02_.jpg

Matematica discreta per informatici di JK Truss.

Anche se questo non ti insegna la programmazione, ti insegna la matematica fondamentale che ogni programmatore dovrebbe conoscere. Potresti ricordare queste cose dall'università, ma davvero, facendo la logica predicata migliorerai le tue capacità di programmazione, devi imparare la teoria dei set se vuoi programmare usando le raccolte.

Ci sono davvero molte informazioni interessanti qui che possono farti pensare ai problemi in diversi modi. È utile averlo, solo per riprendere di tanto in tanto per imparare qualcosa di nuovo.


9

Sistematica: come funzionano i sistemi e soprattutto come falliscono . Usalo a buon mercato. Ma potresti non avere l'umorismo fino a quando non hai lavorato su alcuni progetti falliti.

La bellezza del libro è l'anno del copyright.

Probabilmente la "legge" da asporto più profonda presentata nel libro:

Teorema fondamentale della modalità di fallimento (FFT): i sistemi complessi di solito funzionano in modalità di fallimento.

L'idea è che ci sono parti difettose in un dato pezzo di software che sono mascherate da guasti in altre parti o da convalide in altre parti. Guarda un esempio reale sulla macchina per radiazioni Therac-25 , i cui difetti del software sono stati mascherati da guasti hardware. Quando i guasti hardware sono stati rimossi, la condizione di competizione del software che non era stata rilevata in tutti quegli anni ha provocato la morte di 3 persone.


1
Dai un'occhiata anche a The Systems Bible dello stesso autore (John Gall). È la terza edizione di Systemantics, ha appena cambiato il titolo. Questo è il libro che ruberesti da scuola. È il libro che gli adulti cresciuti leggono sotto una coperta con una torcia.
Chris Wenham,

9

Uno dei miei preferiti personali è Hacker's Delight , perché era tanto divertente da leggere quanto educativo.

Spero che la seconda edizione sarà presto pubblicata!


+1 per "Hacker's Delight" di Henry S. Warren Jr - non si tratta di hacking nel senso popolare, ma di hacking come nel twiddling a basso livello e altri "hack" nel vero e originale senso della parola. Non per tutti, ma se sei interessato all'ottimizzazione del codice, ai compilatori, ecc. O sei solo un secchione che è interessato a cose di basso livello, questo è un ottimo libro.
Paul R,


9

Spiegazione della programmazione estrema: Embrace Change di Kent Beck. Anche se non sostengo uno sviluppo di software XP o autostrada hardcore, mi piacerebbe essere stato introdotto ai principi di questo libro molto prima della mia carriera. Test unitari, refactoring, semplicità, integrazione continua, costo / tempo / qualità / ambito di applicazione - questi hanno cambiato il modo in cui guardavo allo sviluppo. Prima di Agile, tutto riguardava il debugger e la paura delle richieste di modifica. Dopo Agile, quei demoni non apparivano così grandi.





9

La pratica della programmazione. Di Brian W. Kernighan, Rob Pike.

Lo stile mostrato qui è eccellente: il codice parla da solo e l'intero libro segue il principio KISS. Personalmente non le mie lingue preferite, ma comunque influenti per me.





9

Sicuramente artigianato del software

testo alternativo http://ecx.images-amazon.com/images/I/5186JKTDVWL._SL500_AA240_.jpg

Questo libro spiega molte cose sull'ingegneria del software, sullo sviluppo del sistema. È anche estremamente utile comprendere la differenza tra i diversi tipi di sviluppo del prodotto: web VS shrinkwrap VS IBM framework. Cosa avevano in mente le persone quando hanno concepito il modello a cascata? Leggi questo e tutto diventeremo chiari (si spera)


Questo libro deve essere riscritto da zero. L'argomento è molto interessante ma il libro è abbastanza folle.
Chris Mountford,

Chris, ho difficoltà a capire il tuo commento ... Puoi spiegare di più? Perché "pazzo"?
dario minonne,

Innanzitutto è pieno di errori tipografici. La mano editoriale solitamente di prim'ordine di Addison Wesley è stranamente assente in questo volume.
Chris Mountford,

... continua, e non c'è abbastanza spazio qui, ma: 2. Non è mai chiaro nel testo dove l'autore passa tra fatto e opinione, aneddoto e principio fondamentale ecc. 3. L'artigianato del software è una metafora e una strategia per affrontare diversi aspetti difficili dello sviluppo del software. Presenta vantaggi specifici rispetto alle alternative e presumibilmente svantaggi. Credo che sia l'approccio sano. Non ha senso dire che il software è intrinsecamente un mestiere. Lettura molto fastidiosa, ma per essere onesti è stato un po 'di tempo fa e molti dettagli che ho dimenticato. Il mio disgusto rimane, comunque.
Chris Mountford,

8

@Peter Coulton - non leggi Knuth, lo studi.

Per me e il mio lavoro ... Strutture di dati puramente funzionali sono ottime per pensare e sviluppare pensando ai linguaggi funzionali.


8

"Il mondo è piatto" di Thomas Friedman.

L'eccellenza nella programmazione richiede un investimento di energia mentale e una dedizione all'apprendimento continuo paragonabile alle professioni di medicina o legge. Paga una frazione di ciò che queste professioni pagano, tanto meno i salari pagati ai matematicamente esperti che si dirigono nel settore finanziario. E i salari per la costruzione del codice si stanno erodendo perché è una professione relativamente facile per gli intelligenti e autodisciplinati nella maggior parte delle economie.

La programmazione è già erosa al punto da pagare meno di, diciamo, idraulica. L'impianto idraulico non può essere "offshored". Non è necessario pagare $ 2395 per partecipare alla Conferenza dell'idraulico professionista ogni due anni per il privilegio di ricevere una serie completamente nuova di tecnologie idrauliche che ti impiegheranno un anno per imparare.

Se vivi in ​​Nord America o in Europa, sei giovane e intelligente, la programmazione non è una scelta di carriera razionale. Le aziende che coinvolgono la programmazione, assolutamente. Studia affari, conosci abbastanza la programmazione per affinare il tuo rivelatore BS: geniale. Ma dedicare la parte del leone della tua energia mentale alla padronanza di biblioteche, strutture di dati e algoritmi? Ciò ha senso solo se la programmazione è qualcosa di più per te di una scelta economica.

Se ami la programmazione e per questa ragione intendi renderlo la tua carriera, allora ti dovrebbe sviluppare una comprensione con gli occhi freddi delle forze che sono e continueranno a renderla una professione sempre più dura in cui guadagnarsi da vivere . "Il mondo è piatto" non ti insegnerà come nominare le tue variabili, ma ti immergerà per 6 o 8 ore nelle realtà economiche che sono già arrivate. Se si può leggere, e non avere paura, poi uscire e comprare "Code Complete".


Questa è una buona risposta!
Avi

8

testo alternativo

L'anno scorso ho preso un numero di lezioni. Leggo

Il dilemma dell'innovatore (tecnologia dirompente)
The Mythical Man Month (gestione del software)
Crossing the Chasm (avvio)
Sistemi di gestione del database, The COW Book
Programming C #, The OSTRICH Book
Beginning iPhone Developmen, The GRAPEFRUIT Book

Ogni libro è stato fantastico ma l'Innovator's Dilemma di Clayton Christensen (1997 !!!) è davvero un libro fantastico e mi ha fatto pensare davvero al mondo del software moderno. La sfida affrontata è la tecnologia dirompente e il modo in cui le società di unità disco e le società non tecniche sono sempre disturbate dalla nuova tecnologia che cambia il gioco. Dà una nuova prospettiva quando si pensa a Google, probabilmente la più grande azienda "web". Perché hanno le mani in TUTTO? È perché non vogliono che la loro posizione venga interrotta da qualcosa di nuovo. L'anteprima su google è molto per avere l'idea. Leggilo!


Penso che questo libro sia abbastanza ripetitivo. Consiglio di leggere il primo 1/4.
Ben Haley,

8

hacker, di Steven Levy.

La personalità e il modo di vivere devono venire prima di tutto. Tutto il resto può essere appreso.



8

Il linguaggio Python è stato molto influente per me, vorrei aver letto questi libri anni fa. La bellezza e la semplicità del linguaggio Python hanno davvero influenzato il modo in cui ho scritto il codice in altre lingue.

testo alternativo testo alternativo


2
Penso che avviare nuovi programmatori con Python ridurrebbe la quantità di brutti codici nel mondo. Lavoro con qualcuno che fa rientrare casualmente le righe: quella persona non lo farebbe se avesse lavorato con Python per alcuni mesi.
xnine,

6
Penso che l'avvio di nuovi programmatori con Python ridurrebbe la quantità di altre lingue.
Marco Mariani,

2
Quelle copertine sono una coincidenza?
Kelly S. francese,




7

Penso che "The Art of Unix Programming" sia un libro eccellente, di un eccellente hacker / geniale mente come Eric S. Raymond, che cerca di farci comprendere alcuni principi di progettazione del software (principalmente la semplicità). Questo libro è un must per ogni programmazione che sta per iniziare un progetto sotto la piattaforma Unix.


6
questo è un duplicato.
Christopher Mahan,

7

Mentre sono d'accordo sul fatto che molti dei libri di cui sopra sono assolutamente da leggere (Pragmatic Programmer, Mythical Man-Month, Art of Computer Programming e SICP vengono subito in mente), mi piacerebbe andare in una direzione leggermente diversa e raccomandare A Discipline di programmazione di Edsger Dijkstra. Anche se ha 32 anni, l'enfasi sulla "progettazione per la verificabilità" è molto rilevante (anche se "verificabilità" significa "prova" anziché "test unitari").



7

Refactoring di Martin Fowler : il miglioramento del design del codice esistente è già stato elencato. Ma descriverò in dettaglio perché mi ha influenzato.

L'essenza di tutto il libro riguarda la strutturazione del codice in modo che sia più semplice da leggere e comprendere dagli umani . Mi insegna fortemente che il codice che scrivo è destinato ai miei colleghi e successori a consumare e possibilmente imparare qualcosa di buono da esso. Mi ispira a programmare consapevolmente in un modo che lascia la gente lodare il mio nome e non mi maledice alla dannazione per l'eternità .



7

Ecco un libro eccellente che non è così ampiamente applaudito, ma è pieno di approfondimenti: Agile Software Development: The Cooperative Game , di Alistair Cockburn.

Cosa c'è di così speciale? Bene, chiaramente tutti hanno sentito il termine "Agile", e sembra che molti siano credenti in questi giorni. Che tu ci creda o no, ci sono alcuni principi profondi dietro il perché esiste il movimento Agile. Questo libro scopre e articola questi principi in modo preciso e scientifico. Alcuni dei principi sono (tra l'altro, queste sono le mie parole, non quelle di Alistair):

  1. La cosa più difficile nello sviluppo di software per team è far sì che il cervello di tutti abbia la stessa comprensione. Stiamo costruendo sistemi enormi, elaborati e complessi che sono invisibili nel mondo tangibile. Meglio riuscirai a far sì che più cervelli delle persone condividano una comprensione più profonda, più efficace sarà il tuo team nello sviluppo del software. Questa è la ragione di fondo per cui la programmazione delle coppie ha senso. La maggior parte delle persone lo respinge (e l'ho fatto anch'io inizialmente), ma con questo principio in mente consiglio vivamente di provarlo. Ti ritrovi con DUE persone che comprendono a fondo il sottosistema che hai appena costruito ... non ci sono molti altri modi per ottenere un trasferimento di informazioni così approfondito così rapidamente. È come una fusione mentale vulcaniana.
  2. Non hai sempre bisogno di parole per comunicare rapidamente una comprensione profonda. E un corollario: troppe parole e superi la capacità di ascoltatore / lettore, il che significa che il trasferimento di comprensione che stai tentando non avviene. Considera che i bambini imparano a parlare la lingua essendo "immersi" e "assorbenti". Non solo la lingua ... dà l'esempio di alcuni bambini che giocano con i treni sul pavimento. Arriva un altro bambino che non ha mai nemmeno visto un treno prima ... ma guardando gli altri bambini, prende l'essenza del gioco e gioca subito. Questo succede sempre tra gli umani. Questo, insieme al corollario di troppe parole, ti aiuta a vedere quanto fosse errato ai vecchi tempi della "cascata" per provare a scrivere specifiche dettagliate sui requisiti di 700 pagine.

C'è molto di più anche lì. Adesso zitto, ma consiglio vivamente questo libro!


2
Un contributo unico e hai dedicato del tempo a spiegare chiaramente perché valeva la pena di leggerlo. +1 per originalità e fatica! Non vedo l'ora di leggerlo presto ...
Avery Payne,

Buona. Non credo che rimarrete delusi.
Charlie Flowers,

7

Maestri del destino. Per quanto riguarda la motivazione e l'amore per la tua professione: non andrà meglio di quanto è stato descritto in questo libro, una storia davvero stimolante!


+1 per la revisione accurata di una riga
rubayeet
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.