Metodologie di Programmazione: Testi Consigliati
Le note delle lezioni, pubblicate durante lo svolgimento del corso, coprono l'intero programma. Tuttavia alcuni testi possono essere utili per avere ulteriori informazioni, per approfondire, per ampliare le conoscenze e per estendere gli orizzonti.
Cay S. Horstmann, Core Java for the Impatient, Addison-Wesley Professional, 2015.
Presenta Java 8 e buona parte della sua piattaforma in modo conciso ma preciso e scorrevole. Utile per avere una panoramica veloce dell'ecosistema di Java 8. Per alcuni aspetti è un ottimo riferimento, come ad esempio lambda expressions e Streams. Ricco anche di esempi semplici ma efficaci.
Raoul-Gabriel Urma, Mario Fusco, Alan Mycroft, Java 8 in Action, Manning, 2014.
Un'introduzione agile ma esauriente alle nuove caratteristiche di Java 8 e al relativo stile di programmazione funzionale. Buon approfondimento, con esempi efficaci, della programmazione parallela e concorrente supportata dagli Streams.
James Gosling, Bill Joy, Guy Steele, Gilad Bracha, Alex Buckley, The Java Language Specification (Java SE 8 Edition), 2015.
A volte bisogna conoscere un qualche aspetto del linguaggio Java (SE 8) con la massima precisione, allora questo testo è la fonte giusta. Non è certo un testo da leggere dall'inizio alla fine ma solamente da consultare per chiarimenti circa punti specifici. Molto utile quando serve ma si spera che serva il meno possibile perché è necessaria una certa pratica e molta pazienza per trovare quello che si cerca.
Cay S. Horstmann, Gary Cornell, Core Java, Volume I - Fundamentals Pearson Education, 2015 e Core Java, Volume II - Advanced Features, Prentice Hall, 2016.
Due volumi piuttosto corposi (più di 2000 pagine) che rappresentano la più completa e chiara esposizione del linguaggio Java e della piattaforma Java 8 (il secondo volume aggiornato per Java 8 è atteso per l'estate 2016). Molte sottigliezze del linguaggio e della piattaforma sono esaurientemente spiegate con molti esempi significativi.
Ken Arnold, James Gosling, David Holmes, The Java Programming Language, Addison-Wesley, 2006.
Sebbene sia un testo di introduzione al linguaggio Java, non è assolutamente adatto ai principianti. Infatti, è molto parco di esempi ed esercizi. Però è un magnifico testo di approfondimento in grado di soddisfare il programmatore più curioso ed esigente che non si accontenta di sapere come si fa ma vuole anche sapere il perché. Alcuni degli argomenti più ostici del linguaggio Java (SE 6) come la genericità, la reflection e i threads, sono spiegati con rara chiarezza e precisione.
Tim Peierls, Brian Goetz, Joshua Bloch, Joseph Bowbeer, Doug Lea, David Holmes, Java Concurrency in Practice, Pearson Education, 2006.
Alcuni dei testi sopra elencati forniscono una introduzione alla programmazione concorrente in Java. Il libro di Goetz et al. ne dà una trattazione completa, chiara e rigorosa. Se si vuole usare in modo serio la programmazione concorrente in Java, questo testo è indispensabile. Anche se è solamente aggiornato fino a Java 6, i concetti fondamentali, e non solo, sono validi anche per le versioni più recenti.
Joshua Bloch, Effective Java, Addison-Wesley Professional, 2008.
Una meravigliosa fonte di saggi e utilissimi consigli su come usare al meglio tutte le caratteristiche del linguaggio Java (SE 6). Ovviamente, il libro non è per i principianti ma per chi già conosce piuttosto bene il linguaggio e vuole migliorarne la comprensione e l'uso. Chiunque voglia fare un uso non occasionale di Java non può fare a meno di questo testo.
Maurice Naftalin, Philip Wadler, Java Generics and Collections, O'Reilly Media, 2006.
Tutti i misteri della genericità sono qui svelati con chiarezza, precisione e con tantissimi esempi. Consigliabile a chiunque voglia conoscere veramente a fondo la genericità e le Collections.
Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software, Pearson Education, 1994.
Un classico dello sviluppo software. Nonostante abbia ormai più di vent'anni non li dimostra affatto. Le idee in esso contenute hanno influenzato la progettazione di software orientato agli oggetti e non solo in modo molto profondo. Contiene idee universali e riflessioni profonde e stimolanti che non sono state ancora completamente digerite. Indispensabile per programmatori e progettisti software. Il testo ha esempi prevalentemente in C++ comprensibili però anche a chi conosce solamente Java. Ci sono molti testi più recenti con esempi in Java o altri linguaggi.
Robert Nystrom, Game Programming Patterns, Genever Benning, 2014.
Una versione del classico testo di Gamma et al. specializzato allo sviluppo di computer games. I patterns esposti hanno un interesse che va oltre lo specifico campo di applicazione. Inoltre, è uno dei rarissimi testi che riesce ad aggiungere qualcosa di nuovo e stimolante al testo classico sui design patterns. Una lettura scorrevole e vivace con esempi chiari ed efficaci (in C++, ma facilmente comprensibili). Una continuazione naturale del testo classico sui design patterns.
Brian W. Kernighan, Rob Pike, The Practice of Programming, Addison-Wesley Professional, 1999.
Tratta in modo sintetico e significativo tutti gli aspetti della programmazione. Dalle strutture dati ed algoritmi al debugging e testing, dallo stile di programmazione alla progettazione di librerie, passando per l'analisi delle prestazioni e i metodi per migliorare la portabilità. I linguaggi considerati sono: C, C++ e Java.
Jon Louis Bentley, Programming Pearls, Addison-Wesley Professional, 2000.
Molti dei temi trattati nel libro di Kernighan e Pike sono qui elaborati in modo originale e stimolante. Pieno di divertenti ed istruttivi aneddoti che mostrano la reale differenza tra la teoria e la pratica della programmazione e persino dell'ingegneria del software. Usa i linguaggi C e C++.
Frederick P. Brooks Jr., The Mythical Man-Month, Pearson Education, 1995.
L'odissea dello sviluppo software è raccontata e spiegata con rara maestria e raffinatezza da chi l'ha veramente vissuta (un meritato premio Turing). Uno sguardo non offuscato da ideologie e preconcetti, così diffusi nel mondo dell'ingegneria del software, che svela la cruda natura dello sviluppo software. Difficile sopravalutare l'attualità e l'importanza di questo testo nonostante la prima edizione risalga a quasi trent'anni fa.
Paul Graham, Hackers & Painters: Big Ideas from the Computer Age, O'Reilly Media, 2004.
Non è un libro sulla programmazione. È invece un libro sul mondo della programmazione, dai programmatori alle imprese ai linguaggi di programmazione. Una divertente e avvincente riflessione sulla natura dello sviluppo software fondata su esperienze illuminanti e piena di idee brillanti e controcorrente. Un affresco sul passato e il presente di questa attività con profonde intuizioni sul suo futuro. Una lettura stimolante per chiunque si interessi, a qualsiasi titolo, di sviluppo software.
18 Feb 2016