MindView Inc.

[ Suggerimenti ] [ Soluzioni degli Esercizi] [ Volume 2 ] [ Newsletter Gratuita ]
[
Seminari ] [ Seminari su CD ROM ] [ Consulenza]

Pensare in C++, seconda ed. Volume 1

©2000 by Bruce Eckel

[ Capitolo Precedente ] [ Indice Generale ] [ Indice Analitico ]

trad. italiana e adattamento a cura di Gianmaria De Tommasi

C: Letture consigliate

Approfondimenti di C e C++.

C

Thinking in C: Foundations for Java & C++, di Chuck Allison (è un seminario MindView, Inc., ©2000, disponibile su C-ROM; disponibile con il CD allegato al libro oppure all’indirizzo www.BruceEckel.com). Si tratta delle lezioni e delle trasparenze di un corso introduttivo al linguaggio C e propedeutico allo studio del Java o del C++. Il corso non è da ritenersi esaustivo; vengono trattati solo gli argomenti ritenuti necessari per l’apprendimento degli altri linguaggi. In sezioni specifiche vengono introdotti gli aspetti utili per i futuri programmatori C++ o Java. Prerequisiti consigliati: qualche esperienza con linguaggi di programmazione ad alto livello, come Pascal, BASIC, Fortran, oppure LISP (è possibile intraprendere la lettura del CD senza avere queste conoscenze, anche se il corso non è stato pensato come introduzione ai fondamenti della programmazione).

C++ in generale

The C++ Programming Language, 3rd edition, di Bjarne Stroustrup (Addison-Wesley 1997).  In un certo senso, lo scopo di Penare in C++ è di permettere l’utilizzo del libro di Bjarne come un manuale. Siccome questo libro contiene la descrizione del linguaggio fatta dall’autore, rappresenta la fonte migliore a cui attingere per risolvere qualunque incertezza sul C++. Quando si è acquistata una buona confidenza con il linguaggio e si è pronti per programmare seriamente, questo libro diventa indispensabile.

C++ Primer, 3rd Edition, di Stanley Lippman e Josee Lajoie (Addison-Wesley 1998). Non è un libro per principianti così come potrebbe suggerire il titolo. È un libro voluminoso che scende in molti dettagli, ed è il testo al quale fare riferimento, insieme allo Stroustrup, per risolvere i problemi. Pensare in C++ dovrebbe fornire le basi per poter affrontare entrambi C++ Primer ed il libro di Stroustrup.

C & C++ Code Capsules, di Chuck Allison (Prentice-Hall, 1998). Questo libro presuppone la conoscenza sia il C che il C++, e affronta alcuni argomenti che vengono facilmente dimenticati, o che non vengono compresi quando vengono incontrati per la prima volta. Utile, quindi, per rimediare ad alcune lacune che si potrebbero avere riguardo il C ed il C++.

The C++ Standard. Su questo documento il comitato di standardizzazione ha lavorato duro per anni. Purtroppo non si tratta di un documento gratuito. In ogni modo è possibile comprarlo per soli 18 dollari in formato PDF all’indirizzo www.cssinfo.com.

I miei libri

Di seguito sono riportati in ordine di pubblicazione i libri pubblicati dall’autore di Pensare in C++. Alcuni di essi non sono più disponibili.

Computer Interfacing with Pascal & C (pubblicato attraverso la Eisys imprint, nel 1988. Disponibile solo attraverso il sito www.BruceEckel.com). È un introduzione  all’elettronica che risale ai tempi in cui CP/M la faceva da padrone ed il DOS era solo agli inizi. Vengono utilizzati linguaggi ad alto livello e la porta parallela per pilotare i circuiti elettronici presentati. Si tratta di un adattamento degli articoli scritti per la prima, ed anche migliore, rivista con la quale l’autore ha collaborato: Micro Cornucopia (per parafrasare Larry O’Brien, per lungo tempo editore di Software Development Magazine: “la migliore rivista di computer mai pubblicata – avevano anche in progetto di costruire un robot in un vaso da fiori!”). Purtroppo Micro C è scomparsa prima che nascesse Internet.

Using C++ (Osborne/McGraw-Hill 1989). Uno dei primi libri sul C++ ad essere stati pubblicati. Oramai è andato fuori stampa ed è stato sostituito dalla seconda edizione intitolata C++ Inside & Out.

C++ Inside & Out (Osborne/McGraw-Hill 1993). Come già detto si tratta della 2a edizione di Using C++. La trattazione di C++ Inside & Out è ragionevolmente accurata, ma risale al 1992 e Thinking in C++ è stato pensato per rimpiazzare questo libro. Altre informazioni riguardo questo libro e il codice sorgente degli esempi sono disponibili al sito www.BruceEckel.com.

Thinking in C++, 1st edition (Prentice-Hall 1995).

Black Belt C++, the Master’s Collection, edito da Bruce Eckel (M&T Books 1994). Fuori stampa. Si tratta di un insieme di estratti dagli interventi di vari esperti di C++ alla Software Development Conference, presieduta dall’autore. La copertina di questo libro ha stimolato l’autore ad occuparsi della realizzazione di tutte le copertine delle pubblicazioni successive.

Thinking in Java, 2a edizione (Prentice-Hall, 2000). La prima edizione di questo libro vinse ilSoftware Development Magazine Productivity Award e il Java Developer’s Journal Editor’s Choice Award nel 1999. È possibile scaricarne una copia al sito www.BruceEckel.com.

Approfondimenti e angoli oscuri

Questi libri approfondiscono vari aspetti del linguaggio, e aiutano a non commettere errori comuni durante lo sviluppo di programmi in C++.

Effective C++ (2nd Edition, Addison-Wesley 1998) e More Effective C++ (Addison-Wesley 1996), di Scott Meyers. Due classici; entrambi sono libri da avere ed affrontano seriamente la risoluzione di problemi e la progettazione del codice utilizzando il C++. In Pensare in C++ si è cercato di catturare molti dei concetti esposti da questi libri, ma sicuramente lo scopo non è stato raggiunto. Se si vuole lavorare seriamente con il C++, prima o poi si dovranno affrontare queste due letture. Disponibili anche in CD ROM.

Ruminations on C++, di Andrew Koenig e Barbara Moo (Addison-Wesley, 1996). Andrew è un’autorità avendo lavorato direttamente con Stroustrup su molti aspetti del linguaggio C++. I suoi suggerimenti sono particolarmente illuminanti, e si può imparare molto leggendo il suo libro oppure, se si ha la fortuna, incontrandolo di persona.

Large-Scale C++ Software Design, di John Lakos (Addison-Wesley, 1996). Questo libro affronta alcuni argomenti che tornano utili durante lo sviluppo di progetti grandi e piccoli, fornendo risposte a problemi frequenti.

C++ Gems, curato da Stan Lippman (SIGS publications, 1996). Una selezione di articoli tratti da The C++ Report.

The Design & Evolution of C++, di Bjarne Stroustrup (Addison-Wesley 1994). In questo libro l’inventore del linguaggio svela le ragioni di alcune delle scelte progettuali fatte durante la creazione del C++. Da non ritenersi essenziale, ma pur sempre d’interesse.

Analisi e progettazione

Extreme Programming Explained di Kent Beck (Addison-Wesley 2000). Adoro questo libro. Nonostante abbia mantenuto un atteggiamento radicale verso il mondo che ci circonda, ho sempre ritenuto possibile lo sviluppo di una metodologia di programmazione diversa e migliore, e penso che Extreme Programming ci vada dannatamente vicino. L’unico libro che ha avuto lo stesso impatto su di me è stato PeopleWare (vedi sotto), che tratta principalmente tematiche che riguardano l’ambiente e la cultura aziendale. Extreme Programming Explained parla di programmazione, trattando svariate tematiche, tra le quali alcune correlate a recenti “scoperte”. L’autore si spinge oltre, affermando che molte novità vanno bene fintantoché non si spende troppo tempo per poterle utilizzare: in questo caso è meglio lasciare perdere (si noti che questo libro non ha il marchio di approvazione UML sulla copertina). Potrei decidere di andare a lavorare per un azienda basandomi solamente sul fatto che utilizzino o meno Extreme Programming.  Libro piccolo, con capitoli brevi che si leggono senza sforzo, e che fornisce molti spunti di riflessione. Il libro ha la capacità di aprire al lettore una finestra su un nuovo mondo mentre è immerso nel proprio ambiente di lavoro.

UML Distilled di Martin Fowler (2a edizione, Addison-Wesley, 2000). Quando si incontra per la prima volta l’UML, ci si scoraggia facilmente perché ci sono molti tipi diagrammi e molti dettagli ai quali bisogna fare attenzione. Secondo l’autore di questo libro, molti di questi particolari non sono necessari, quindi la trattazione è stata ridotta a ciò che viene ritenuto essenziale. Nella maggior parte dei progetti reali si ha bisogno solo di una parte degli strumenti grafici messi a disposizione dall’UML, e l’obiettivo di Flower è quello di ottenere un buon progetto, piuttosto che preoccuparsi dei dettagli. Lettura piccola e piacevole; è un libro per chi tenta il primo approccio con l’UML.

The Unified Software Development Process di Ivar Jacobsen, Grady Booch, e James Rumbaugh (Addison-Wesley 1999). Inizialmente ero totalmente prevenuto nei riguardi di questo libro. Ai miei occhi sembrava avere tutte le caratteristiche di un noioso libro universitario. Dopo la lettura, invece, sono rimasto piacevolmente sorpreso e ritengo che solo le versioni  tascabili del libro spieghino l’UML in maniera da sembrare poco chiaro anche agli autori stessi. Il nucleo del libro oltre ad essere molto chiaro, è anche di piacevole lettura. La cosa migliore, poi, è che il metodo illustrato è molto utile dal punto di vista pratico. Non si tratta di un libro come Extreme Programming (e non ha la stessa semplicità di lettura), ma fa sempre parte del “carozzone” UML – ed anche se non utilizzerete Extreme Programming, dato che molte persone sono salite sul carro dell’UML (a prescindere dal loro reale livello di conoscenza del metodo), probabilmente incontrerete questo libro. Penso che questo libro rappresenti il libro sull’UML per antonomasia (anche perché è stato scritto dagli inventori del metodo n.d.t.), ed è il libro al quale fare riferimento, dopo aver letto UML Distilled di Flower, quando si vuole approfondire l’argomento.

Prima di scegliere una metodologia di progetto, potrebbe essere d’aiuto conoscere il punto di vista di qualcuno che non stia cercando di vendere una soluzione particolare. È semplice scegliere una tecnica senza conoscere bene cosa si vuole ottenere. A volte il solo fatto che venga utilizzata da altri ne giustifica la scelta. Il fattore psicologico gioca un ruolo particolare sul comportamento umano: se si crede che qualcosa possa risolvere i propri problemi, si è portati a provarla (che è una cosa positiva e si chiama sperimentazione). Spesso, però, se i problemi non vengono risolti, invece di abbandonare il metodo, si aumentano gli sforzi a si annunciano altre importanti scoperte (che è una cosa negativa e si chiama rifiuto di ammettere i propri errori). Il tentativo è quello di non affondare, tentando di far salire altre persone sulla propria nave mentre questa sta affondando.

Questo non vuol dire che tutte le metodologie di progetto non servono a nulla, ma che bisogna dotarsi di strumenti che aiutino a sperimentare nuove soluzioni (“Non funziona; proviamo qualcos’altro”) e che non neghino l’evidenza (“Questo non è un problema reale. Va tutto bene , non c’è bisogno di nessun cambiamento”). I libri seguenti dovrebbero fornire questi strumenti e andrebbero letti prima di scegliere una particolare metodologia.

Software Creativity, di Robert Glass (Prentice-Hall, 1995). Personalmente ritengo che questo sia il miglior libro che affronti l’argomento delle metodologie di progettazione nel suo complesso. Si tratta di una raccolta di brevi articoli, scritti da Glass e da altri autori (tra i quali  P.J. Plauger), nei quali vengono riportate le riflessioni e gli studi fatti sull’argomento nel corso degli anni. La lettura del libro è piacevole e  gli autori si dilungano solo quando è strettamente necessario, senza annoiare. Nel caso si voglia approfondire qualche argomento, il libro è ricco di riferimenti bibliografici e rimandi ad altri articoli. Tutti i programmatori e i manager dovrebbero leggere questo libro prima di inoltrarsi nel mare delle metodologie di progetto.

Software Runaways: Monumental Software Disasters, di Robert Glass (Prentice-Hall 1997). La cosa bella di questo libro è che porta in primo piano una cosa di cui ancora non si è parlato: quanti sono i progetti che falliscono, e quanti sono quelli che lo fanno in maniera spettacolare. La maggior parte di noi pensa: “Questo non potrà mai accadere a me” (oppure “Potrà mai capitare ancora?”); questo comportamento porta solo svantaggi. Tenendo presente che le cose possono sempre mettersi per il verso sbagliato, ci si mette in una posizione favorevole affinché le cose vadano per il meglio.

Object Lessons di Tom Love (SIGS Books, 1993). Un altro buon libro che affronta il tema dello sviluppo delle metodologie di progettazione.

Peopleware, di Tom Demarco e Timothy Lister (Dorset House, 2a edizione 1999). Nonostante gli autori abbiano una formazione come sviluppatori di software, questo libro parla di progetti e team di lavoro. L’attenzione è incentrata sulle persone e sui loro bisogni piuttosto che sulla tecnologia. Gli autori parlano di come creare un ambiente dove le persone siano felici e produttive, piuttosto che decidere quali regole queste persone dovrebbero seguire per essere parti della macchina produttiva. È mia convinzione che quest’ultimo approccio sia il principale responsabile dei sorrisi e dell’accondiscendere dei programmatori quando si addotta la nuova metodologia XYZ, anche se continuano a fare quello che hanno sempre fatto.

Complexity, di M. Mitchell Waldrop (Simon & Schuster, 1992). Questo libro racconta come un gruppo di studiosi di diverse discipline sia stato messo insieme a Santa Fe, in New Mexico, per discutere sui problemi che ognuna delle discipline non riusciva a risolvere (il mercato azionario in economia, l’origine della vita in biologia, perché le persone fanno quello che fanno in sociologia, ecc.). Incrociando fisica, economia, chimica, matematica, computer science, sociologia ed alter materie, è stato sviluppato un approccio multi-disciplinare a questi problemi. In questo contesto è emerso un nuovo modo di approcciare i problemi complessi non più basato sul determinismo matematico e sull’illusione di poter scrivere un’equazione che predica tutti questi comportamenti, bensì basandosi sull’osservazione, cercando di  individuare dei pattern da riprodurre nella maniera più fedele possibile (il libro, per esempio, racconta la nascita degli algoritmi genetici). Questo modo di affrontare i problemi è utile quando si ha la necessità di gestire progetti software sempre più complessi.

[ Capitolo Precedente ] [ Indice Generale ] [ Indice Analitico ]
Ultimo aggiornamento:23/03/2003