Esiste una data di scadenza per i libri ben considerati, ma vecchi sulla programmazione? [chiuso]

51

Dopo aver letto a domanda sui libri che ogni programmatore dovrebbe leggere , mi chiedo se quanto segue debba essere considerato obsoleto:

Tutti questi libri sembrano molto vecchi. Non c'è una differenza tra l'informatica moderna e ciò che era corrente quando sono stati scritti quei libri?

Ad esempio, il mio insegnante di 61 anni spiega le cose molto bene ma dimentica di prendere in considerazione tutto ciò che è stato fatto tra quando ha iniziato a insegnare 25 anni fa e ora.

Non è lo stesso vero per quei libri? Non ci sono più libri moderni che insegnano principi e tecnologie più vicini alla pratica corrente? O ritieni che siano utili e rilevanti anche oggi?

    
posta Olivier Pons 23.05.2017 - 14:40
fonte

18 risposte

92

Questi libri riguardano i principi di sviluppo. Questi principi sono, per loro natura, indipendenti dal linguaggio e per alcuni persino paradigmatici-agnostici (OOP, programmazione funzionale, lingue imperative).

Spiegano la teoria e le buone maniere dello sviluppo perché, alla fine, il software è sempre relativo al recupero dei dati, all'elaborazione e alla successiva emissione di dati. Facebook, Twitter, 3D, processo batch di contabilità, gestione del traffico ferroviario, lancio di razzi, ecc.

Libri che parlano di una lingua, come "How to learn XXXXX in YY days" , dove XXXXX è una lingua e YY è un numero che alla fine (ea volte in realtà molto rapidamente) diventa obsoleto, perché, per natura, riguardano cose che si evolvono , o essere sostituito e diventare obsoleto.

Code Complete , del fantastico Steve McConnell, è forse il libro che mi ha fatto capire questo. E il Programmatore pragmatico ha totalmente cambiato la visione che avevo dello sviluppo del software. Leggendo questi libri, ti rendi conto che il 95% del problema che stai affrontando ogni giorno è già stato risolto e che il 95% di noi sta ancora reinventando la ruota.

Il cosiddetto "Cloud" non è il futuro dello sviluppo del software, è un modo di utilizzare software sviluppato.

Non cadere nella trappola di parole d'ordine hype / stronzate, concentrati su come puoi migliorare le tue abilità di artigiano del software.

Concentrati sull'apprendimento di ciò che altri spiriti brillanti hanno inventato e imparato prima di noi, perché è l'unico modo per diventare uno sviluppatore esperto.

    
risposta data 13.12.2011 - 02:30
fonte
80

All those books seem very, very, very old."

Psicologia-Programmazione-computer (1971) - Con un milione di volte quanti programmatori come nel 1970 la psicologia di come progettano i programmi e quali errori fanno e come evitarli è più importante che mai.

Strumenti software (1976) - Con il web che è una raccolta di frame, utilità, script e plug-in - le idee in Strumenti software non sono mai state più rilevanti.

EDIT: per rispondere alla domanda generale di - i vecchi libri di programmazione sono rilevanti?

I principi generali dell'ingegneria del software non sono cambiati molto, ci sono nuove tecnologie OO, TDD, ecc. Ma generalmente gli utenti e i problemi non sono cambiati - e pensare a come dividere un problema è lo stesso ora come sempre.

Questi libri più vecchi erano generalmente scritti da esperti del settore. Molti libri di programmazione moderni hanno lo scopo di far uscire un fermaporta da 2000 pagine per la parola chiave più recente mentre è ancora in corso.

I libri su linguaggi e tecnologie che non vengono più utilizzati probabilmente non sono rilevanti - nessun manuale di assemblatore Vax è presente nell'elenco. Ma "C" è ancora molto usato e "The C programming langauge" non è solo il miglior libro su "C", è un modello di come scrivere un tutorial conciso e un riferimento alla tua lingua.

Ci sono nuovi algoritmi? Sì. Ma tutti i vecchi algoritmi sono ancora rilevanti e la maggior parte di quelli nuovi sono in aree oscure che difficilmente si incontreranno. Nessuno ha inventato un tipo migliore o FFT di recente. Sebbene altre persone abbiano avuto tentativi di spiegarle meglio, non c'è motivo per cui i libri Algorithms di quest'anno siano migliori di quelli del CLRS.

ps. La tua nuova e interessante iWhatsit funziona con BSD, sviluppato nel 1977. Ora i tuoi bambini scendono dal mio prato!

    
risposta data 13.12.2011 - 23:32
fonte
28

All those books seem very, very, very old. Don't you think there's a difference between nowadays and when those book were written?

IMHO non è una sorpresa che libri molto buoni restino popolari per decenni - questo dimostra quanto siano buoni. Ma penso di poterti dire qualcosa per ognuno dei candidati che hai elencato:

Code complete: 2nd edition = may, 2004

In realtà la prima edizione di "Code complete" era del 1993, quindi questa è davvero una "classica". Riguarda lo stile di codifica di base, utilizzando esempi che si applicano a quasi tutti i linguaggi di programmazione della famiglia C, che contiene al giorno d'oggi le lingue più diffuse (C / C ++ / Java / C # / Objective-C / D / ...). Quindi sì, questo libro è aggiornato.

Introduction to algorithms (Cormen, Leiserson, Rivest, Stein)

Beh, in realtà non ho letto quel libro (il mio libro degli algoritmi era di "Sedgewick"), ma l'algoritmo di apprendimento e la costruzione dell'algoritmo sono davvero indipendenti dal linguaggio. Ovviamente, questo mestiere sta diventando molto sottovalutato negli ultimi anni, dal momento che oggi si trovano molti algoritmi di base nelle librerie standard, ma IMHO ogni programmatore professionista dovrebbe avere alcune conoscenze di base in questo campo.

The Pragmatic Programmer

Questo è un ottimo libro sulla programmazione come artigianato. Agnostico linguistico e molto, molto aggiornato, purché la programmazione sia eseguita dai programmatori come compito manuale, utilizzando editor di testo, IDE, controllo di versione ecc.

Structure and Interpretation of Computer Programs: = September 1, 1996

Questo è il mio preferito, anche se (o forse perché) il libro usa Scheme per insegnarti le differenze tra i diversi paradigmi di programmazione. Non conosco nessun altro libro che abbia una così strong concentrazione sulla costruzione di astrazioni. Costruire astrazioni è un'abilità chiave che fa la differenza tra un programmatore mediocre e un programmatore di punta - che non è cambiato negli ultimi decenni, quindi, davvero, questo libro è senza tempo. Inoltre, le lingue e gli elementi linguistici funzionali sono diventati più popolari di recente, quindi IMHO le idee presentate in questo libro hanno avuto una rinascita.

The C Programming Language

Bene, questo libro potrebbe non essere così senza tempo come gli altri quattro. Ma dal momento che C è qualcosa come la "madre" di tutte quelle lingue popolari che ho elencato sopra, potrebbe essere una buona idea leggere questo libro - non penso che ci siano dei libri "C" moderni che sono davvero migliori. E se devi fare una programmazione di manutenzione del codice C ++ che è stata scritta da qualcuno che conosceva meglio C in C ++, allora questo libro è un must.

Infine, stavi chiedendo libri che prendessero in considerazione la maggior parte della "realtà attuale", senza essere troppo specifici della tecnologia. Quindi qual è la "realtà attuale" e cosa è cambiato sul lato "non tecnologico"? Ecco alcuni punti dell'ultimo decennio, senza dire che questa lista è completa o con le giuste priorità.

  1. Esiste più codice legacy (specialmente più codice legacy non solo in Fortran e Cobol, ma anche in C ++ e Java).
  2. Test delle unità e TDD è diventato più preferito.
  3. C'è molto più codice open source disponibile.
  4. OO ha ottenuto sempre più critiche

(Non elencherò qui nulla sullo sviluppo di Web o App, perché penso che questa tecnologia sia specifica).

Esistono buoni libri per gli argomenti 1 e 2, in particolare " Pulisci codice ", che è del 2008, e " Lavorare efficacemente con legacy codice " del 2004. Forse questi sono alcuni dei libri" più recenti "che stai cercando?

    
risposta data 23.05.2017 - 14:40
fonte
13

Di quelli che hai citato "Codice completo", "Il programmatore pragmatico" e "SICP" sono stati nella mia lista di letture consigliate per tutti i nuovi sviluppatori che iniziano qui nella mia azienda e vogliono raggiungere un livello superiore.

Non sono obsoleti da molto tempo perché la scienza fondamentale in Informatica non è cambiata.

    
risposta data 12.12.2011 - 17:54
fonte
10

Non ho letto tutti quei libri, ma ho il codice completo e il programmatore pragmatico. Questi libri sono lontani dall'essere obsoleti. Potrebbero avere un paio di paragrafi un po 'arrugginiti, ma la maggior parte dei contenuti è ancora attuale.

Il progresso in Informatica e Programmazione è un processo evolutivo . Nuove astrazioni vengono introdotte su quelle vecchie, ma queste nuove cose non rendono necessario il vecchio obsoleto.

Un'analogia ... Sia che tu stia studiando per diventare un trauma chirurgo o un chirurgo specializzato nel trapianto cardiaco, devi ancora sapere come funziona il corpo umano, la chimica cellulare, i sistemi d'organo, come aprire il torace e come smettere rapidamente di sanguinare se si verifica, ecc ... Solo perché hanno inventato attrezzature endoscopiche e tecniche meno invasive, non significa che sei fuori dai guai per imparare le basi. Significa solo che devi imparare di più.

    
risposta data 12.12.2011 - 22:12
fonte
7

Il "cloud" non è un fattore. Il "cloud" è in realtà molto più vecchio della maggior parte dei libri che hai elencato. la maggior parte di questi libri tratta di principi fondamentali, in realtà non cambiano mai molto spesso. I framework e le librerie cambiano continuamente, ma il modo in cui dovresti strutturare il tuo codice non cambia molto. Allo stesso modo un puntatore è ancora un puntatore che non inizia a fare cose diverse solo perché. L'unico libro specifico di una lingua che hai elencato riguarda C, nel qual caso quel vecchio libro è molto più utile di qualsiasi cosa di nuovo, perché è stato scritto più vicino al periodo in cui è stato sviluppato qualsiasi codice C con cui avresti lavorato.

    
risposta data 12.12.2011 - 17:36
fonte
6

L'elenco che hai citato, no non sono obsoleti. Un libro è obsoleto solo quando il soggetto è cambiato abbastanza da non essere utile. La natura della programmazione e il linguaggio C sono cambiati entrambi molto poco dalla pubblicazione

    
risposta data 12.12.2011 - 17:41
fonte
6

Una delle cose che devi realizzare è che esistono principi sottostanti che sono essenzialmente senza tempo e implementazioni che tendono ad andare e venire.

I principi sottostanti sono essenzialmente tutta la noiosa teoria sulla quale l'informatica trascorre molto tempo e che continua ad essere valida anche se il mondo cambia intorno ad esso. Questo a differenza di cose come "Come usare Win32s in Windows 3.11" che è molto vecchio e obsoleto.

Per mettere le cose in prospettiva - il testo canonico sulla geometria ha duemila anni. La maggior parte della matematica insegnata fino al livello universitario ha almeno 300 anni. L'unico motivo per cui i libri CS non sono più vecchi, è perché il campo è ancora nuovo.

    
risposta data 12.12.2011 - 18:41
fonte
6

Alcuni libri sono senza tempo perché discutono di idee così fondamentali per la pratica dello sviluppo del software, saranno sempre applicabili.

Prendi ad esempio il mese Mythical Man , mentre stavo leggendo questo libro, continuavo a dimenticare che era scritto nel 1975. Quando spruzza nel riferimento occasionale su IBM System 360, mi dà sempre fastidio perché questo è l'unico contenuto che risale al libro. Tutto il resto si applica qui e ora. Conservo ancora la mia copia di Patterns of Enterprise Application Architecture di Martin Fowler, ora 9 anni ma ancora senza tempo e ancora applicabile al lavoro che faccio oggi.

Il mio libro preferito in questo momento è Modellazione Java a colori con UML (1999) di Peter Coad anche se I ' m uno sviluppatore C # ed evita UML, perché le tecniche e i concetti mi rendono un programmatore migliore.

Faremmo bene ad imparare dalla prima generazione di sviluppatori perché hanno calcato il terreno che stiamo percorrendo proprio ora e la loro saggezza guadagnata duramente può aiutarci a fare un balzo in avanti su quello che stiamo facendo / apprendere oggi .

    
risposta data 12.12.2011 - 20:27
fonte
5

I principi fondamentali del software non sono cambiati negli ultimi 20 anni. Uno stack, un albero e una lista collegata funzionano ancora allo stesso modo di allora. "XOR" significa ancora la stessa cosa. Un byte ha ancora 8 bit.

Stai seriamente suggerendo che lo "sviluppo multipiattaforma" è una nuova idea? Perché pensi che C sia stato inventato?

"Cloud" è una parola d'ordine di marketing. Significava qualcosa di specifico, ma è stato degradato a causa di un uso eccessivo. Al giorno d'oggi, ogni volta che si ha qualcosa che parla con un server remoto su una rete, i marketer attaccano l'etichetta "cloud" su di essa. Quindi non ha davvero senso parlarne, perché è una parola priva di significato.

Non conosco il tuo professore di 61 anni, quindi non posso garantire per lui. Tu, d'altra parte, non sei chiaramente intelligente come pensi di essere. Ascolta il professore, è possibile che tu impari qualcosa.

"Non puoi diventare vecchio senza essere uno sciocco, molti giovani saggi, sono morti come un figlio di puttana." - Richard Pryor

    
risposta data 12.12.2011 - 19:21
fonte
4

Ecco alcuni libri molto vecchi e obsoleti:

  • The Art of Computer Programming, vol. 1-3 di D. Knuth. Questi erano pubblicato tra il 1968 e il 1981! Non stiamo usando le valvole a vuoto più, gente! Tutto in questi libri è zoppo. Dov'è il discussione su Python e Ruby?

  • Computer e Intrattabilità: una guida alla teoria di NP-Completezza di M. R. Garey e D. S. Johnson, 1979. Super lame! Ormai probabilmente tutti questi problemi sono stati risolti.

Se un libro non è stato scritto negli ultimi tre anni con focus su Python, allora non vale la pena leggerlo.

    
risposta data 12.12.2011 - 19:09
fonte
3

Quei libri non sono obsoleti, quei libri sono classici.

Per citare Kaplansky , " passare un po 'di tempo ogni giorno a imparare qualcosa di nuovo è disgiunto dal problema su cui stai lavorando (ricorda che la disgiunzione può essere temporanea), e leggi i maestri . "

    
risposta data 12.12.2011 - 19:29
fonte
3

So cosa intendi quando abbiamo dei progressi (LINQ mi viene in mente) che cambiano la leggibilità e l'uso del codice, ma semplicemente perché questi libri sono vecchi, non significa che non offrono grandi lezioni per il lettore.

Anche se i linguaggi di programmazione che usano potrebbero essere caduti in disuso, la teoria dei linguaggi di programmazione è ancora valida oggi. La maggior parte di questi libri lo rende un punto di riferimento per la base molto bene, e le basi non sono cambiate molto.

    
risposta data 31.01.2012 - 15:26
fonte
1

L'industria dell'informatica è ancora molto giovane. I libri scritti 30 anni fa ritengo ancora validi e necessari per una comprensione completa. I concetti astratti a volte richiedono un po 'di tempo per digerire.

    
risposta data 12.12.2011 - 20:24
fonte
1

Alcune parti minori sono obsolete in tutti quei libri, ma il 99% è comunque ottimo.

I libri degli algoritmi invecchieranno lentamente. Gli algoritmi sono matematici e la matematica non sta cambiando rapidamente. Certo, ci sono ancora ricerche su nuovi algoritmi che sono superiori in determinate circostanze (ad esempio, Algoritmo di Furer ( 2007) Schonhage-Strassen per moltiplicare insieme più di 40000 numeri lunghi), ma l'introduzione è necessaria per apprendere le nozioni di base (divide et impera / Programmazione dinamica / Programmazione lineare / ecc.) in modo da imparare a pensare in modo sensato agli algoritmi.

L'apprendimento dello standard C da K & R è ancora la migliore fonte; anche se non sono sicuro che mi fiderei delle loro sezioni su come configurare il tuo ambiente.

SICP è un libro meraviglioso e insegna le basi della CS moderna attraverso l'insegnamento della focalizzazione che è una lingua meravigliosa. Tuttavia, il lisp non è probabilmente la lingua più utile al giorno d'oggi; anche se altri sostengono che la lisp è la loro arma segreta e che l'apprendimento di linguaggi come java o python fa in primo luogo pessimi programmatori che non hanno mai bisogno di imparare come implementare ordinamento o liste di link o matrici o notazioni O grandi e finiscono per fare cose molto inefficienti.

Alcuni di Code Complete o Pragmatic Programmer sono meno rilevanti, specialmente se stai programmando in lingue più recenti (ad es. python / ruby / C ++ 11), dato che spesso si focalizza su come fare qualcosa in C o fornisce soluzioni raccomandate utilizzando i migliori strumenti disponibili al momento (come CVS / RCS per il controllo della versione piuttosto che uno strumento moderno come git / bzr / hg / svn). Ma è comunque bene pensare a come il controllo delle versioni sia un must e come debba essere semplice e auto-documentante e passare attraverso la logica del perché è assolutamente necessario.

Oppure le raccomandazioni di PP contro gli IDE per l'editor di unix di base e gli strumenti unix - per non dire che non dovresti imparare come usare find / awk / locate / grep / sed, ma un buon IDE può spesso risparmiare un sacco di tempo. Ad esempio, emacs può fare l'evidenziazione della sintassi o il completamento di un semplice codice; ma diciamo che un buon IDE dirà dare consigli sugli strumenti con le dichiarazioni di funzione quando li digiti, o analizzare il codice e contrassegnare le variabili inutilizzate, semplificare la compressione di sezioni di codice, ecc.

    
risposta data 12.12.2011 - 21:40
fonte
1

Isn't there a difference between modern computing and what was current when those book were written? Do you think it changes what we should learn? Shouldn't we take into account the developments of the last 20 years?

Sì, sì e sì.

Questo non rende quei libri obsoleti. "Modern computing" è un termine incredibilmente ampio. Tuttavia, include programmazione C, quindi "The C Programming Language" è ancora un libro pertinente. Esso include algoritmi, quindi "Introduzione agli algoritmi" è ancora un libro pertinente. Così avanti e così via.

Should the current emphasis on multiplatform development multiplatform development (see phonegap) change what we learn today?

La maggior parte delle app sull'App Store (per usare la piattaforma mobile più popolare come esempio) sono scritte in Objective C, un linguaggio dei primi anni '80 che è un superset di C. Quindi, ancora una volta, C è ancora rilevante.

Do you think the "cloud" is a fad or the future?

È il nostro regalo.

When students get out of university, they are supposed to be real developers and be able to work immediately

Ma cosa significa?

Ci sono troppi linguaggi, API, framework, piattaforme, strumenti, strategie di collaborazione, ecc. per la scuola che ti prepara per un lavoro specifico . La scuola può solo gettare le fondamenta, fornendoti un modello di base su come funziona la macchina, sugli algoritmi, le strutture dati, la costruzione del codice, le strategie di scomposizione, alcuni strumenti, ecc.

Un "vero sviluppatore" non è qualcuno che sa tutto, è qualcuno con la capacità di questo tipo di lavoro, che ha una base teorica e pratica e che conosce come imparare , perché la tua educazione non finisce mai.

    
risposta data 12.12.2011 - 23:17
fonte
1

Ok, quindi ho intenzione di offrire una risposta che è molto più teorica. Sono d'accordo con tutti voi ragazzi che hanno risposto, a mio avviso abbastanza ovvio, questi libri sono la base di ciò che noi programmatori facciamo e tutti questi nuovi quadri sono costruiti sulla stessa linea di vecchi pilastri.

Ecco i miei due centesimi-- non proprio mio, l'ho imparato da San Tommaso e da Aristotele prima di lui.

An abstraction is useless to someone who doesn't understand the particulars.

I meccanismi di un computer non sono cambiati da quando von-neumann. Allo stesso modo, i particolari che devi imparare per essere un grande programmatore saranno gli stessi finché il modello von-neumann non sarà obsoleto. Assembly, è la lingua dei computer ... impara, senza scuse.

C è la lingua madre di Windows e Unix. Impara o trova un nuovo mestiere. Se sei uno di quei ragazzi che sono andati direttamente a JAVA o C #, potresti essere un buon programmatore, ma saresti un programmatore molto migliore se imparassi il periodo C--.

Algoritmi e strutture dati sono il fondamento dei programmi per computer, imparali.

Tutto il resto è un'astrazione di queste discipline fondamentali. Le astrazioni sono meravigliose se usate correttamente - seriamente, io uso C # per il 75% di tutti i miei progetti. Tuttavia, ti rendono stupido se non ti prendi il tempo per capire come funzionano e come funzionano senza di loro. Trascorrerai un tempo infinito facendo software per adattarsi alla proverbiale buca quadrata quando ci sono approcci molto migliori e avremo bug che potrebbero essere evitati. Lo sviluppo del software è un mestiere che deve essere padroneggiato e, alla fine della giornata, gli strumenti cambiano raramente. Ecco perché questi libri sono così importanti.

Tutti questi programmatori solo JAVA e C #, tsk, scommetto che molti di loro non hanno mai visto un episodio di Star Trek!

    
risposta data 13.12.2011 - 07:40
fonte
1

Ho sentito un detto da un mentore:

"Un buon consiglio viene fornito con un motivo perché in modo che tu sappia quando non è più un buon consiglio." Quindi, nei termini di un libro, un libro che spiega perché fare X su Y ti farà sapere quando quel consiglio non è più valido. Un libro "fai sempre questo, fallo e basta" come alcuni dei corsi accelerati in lingua X non è così buono.

Ne ho visto uno chiamato "learn unix in 24 hours", beh il libro aveva uno spessore di circa 8 cm, dubito che molte persone potrebbero persino leggere ogni pagina in 24 ore:)

Ricorda che ciò che è di moda oggi potrebbe essere deriso domani. Tutti i seguenti sono stati considerati mainstream (in voga ieri) ma ora non lo sono:

  • Vai
  • Singola voce singola uscita
  • Notazione ungherese
  • Approccio cascata

E ci sono alcune cose che una volta erano completamente anatema ma ora sono accettate:

  • La ricorsione come strumento per risolvere i problemi (radicale nei primi BASIC giorni)
  • Allocazione della memoria in fase di esecuzione con malloc / new
  • Uso del STL C ++
  • Linguaggi raccolti con garbage per i sistemi in tempo reale

Sapere perché, e saprai quando vecchi presupposti sono stati sostituiti con una nuova realtà, e così dovrebbe il consiglio.

    
risposta data 15.12.2011 - 05:13
fonte

Leggi altre domande sui tag