Dopo due anni e 4 mesi dalla precedente, ecco la quarta edizione di questa
Bibbia del C# che così tanto successo ha riscosso negli anni passati.
Lo scorso 8 settembre 2008 avevo recensito la precedente edizione dedicata alla versione 3.0 di C#.
Avrei tanta voglia però, con questa e per alcune delle prossime recensioni, di fare come fanno gli autori di questo ed altri libri quando avviene il passaggio tra una versione e l’altra (di C#, VB, ASP.NET e così via), ovvero fare un bel Copy&Paste della precedente recensione, dare qualche aggiustatina qua e là, ed averla bella e pronta con poco sforzo.
Mi sa che per i prossimi mesi, in cui mi dedicherò alle nuove edizioni di libri su C# e ASP.NET farò più o meno così.
Magari mi concentrerò sulle differenze, e segnalerò se ci sono stati miglioramenti o peggioramenti rispetto a prima. Questo testo della O’Reilly, dei due fratelli Albahari, è un vero “must” per chi sviluppa in C#. persino Scott Guthrie (il papà di ASP.NET) lo ha raccomandato senza riserve su Amazon.
Innanzitutto rispetto alla vecchia versione le pagine sono aumentate di quasi 200, passando da 838 a 1025. Mi chiedo che libri avremo quando saremo arrivati a C# 12.0.
Dando un’occhiata al sommario si nota che sono stati aggiunti dei capitoli riguardanti i “Code Contracts” (cap. 13), la programmazione dinamica e parallela (cap. 19 e 22) e sono stati riorganizzati diversamente gli ultimi capitoli riguardanti argomenti avanzati.
La prima metà del libro non è cambiata tantissimo: sono stati risolti dei bug nel testo e nel codice degli esempi (in sostanza le “errata” della vecchia versione), ma il “core” del discorso è quasi identico.
Chi aveva letto la versione 3.0 del libro si ritroverà quindi a leggere le stesse frasi e a vedere gli stessi esempi, pur con qualche lieve differenza.
Il tipo di esposizione non è cambiato: tanto codice, esempi brevi e mirati, testo lungo il necessario, niente domande a quiz alla fine dei capitoli, e nemmeno sommari introduttivi o riepilogativi. Tutto lo spazio e dedicato ad approfondire i meandri di C# e del CLR.
Non manca qualche utile accortezza di design, come il mettere in grassetto i pezzi di codice aggiunti o particolarmente significativi, e i fondamentali box a lato dove si approfondiscono alcuni concetti o si illustrano curiosità e dettagli.
Come avevo fatto due anni fa, una premessa importante è d’obbligo: questo non è un libro per principianti, ma non bisogna nemmeno essere dei super esperti per trarne beneficio. Diciamo che le spiegazioni degli autori sono molto sintetiche, e non sprecano 10 pagine per spiegare cosa è una variabile o un ciclo “foreach”.
Non comprendo però il motivo per cui ci sia stata una regressione nella realizzazione della rilegatura. Nella precedente edizione era efficacissima. Il bordo del libro non era incollato alle pagine, come in tutti i “normali” libri, ma era staccato ed agganciato alle due copertine con una tecnica molto comoda e nello stesso tempo robusta. Ciò consentiva di tenere aperto sulla scrivania senza problemi un libro di oltre 800 pagine. In questa edizione, invece, dove le pagine sono aumentate e quel tipo di rilegatura sarebbe stata invero utile, si è ritornati al passato, con la classica rilegatura incollata. Ora è praticamente impossibile tenerlo aperto, ed è una scomodità da tenere conto. La qualità della carta, molto buona, è rimasta invece invariata, come anche il font del testo e altre caratteristiche di impaginazione che lo rendono molto leggibile e piacevole da leggere.
Quello che invece mi infastidisce maggiormente, in questo pur ottimo testo, è il fatto di dover spendere ogni volta almeno un’oretta nella sistemazione in matita delle varie errate riscontrate dai lettori. Alcune sono poco significative (ad esempio per migliorare la chiarezza di alcune frasi), ma altre riguardano errori nel codice degli esempi, e questo ha un impatto ben maggiore. Capisco che in un tomo del genere, con così tanta carne al fuoco ed un numero spropositato di esempi di codice, sia più facile incorrere in qualche bug, ma preferirei aspettare magari qualche mese in più ma ottenere un libro che abbia ricevuto un’attenta ed approfondita correzione delle bozze. Bisogna dire però che questa edizione soffre di un numero inferiore di errori rispetto alla precedente (ed è già un passo avanti).
Questa è la pagina del sito O’Reilly dedicata al libro.
Da qui è possibile scaricare un Pdf di 18 pagine contenente il sommario dettagliato il primo breve capitolo.
Questa è la pagina delle Errata.
Purtroppo, come si vede, non sono affatto poche, anche se alcune piuttosto banali e trascurabili.
Ricordarsi di verificare sia le errata “confirmed” che quelle “unconfirmed”.
Per quanto riguarda il codice invece, forse perché molto frammentato, non esiste un file di download.
Gli autori però mettono a disposizione un tool ad hoc per provare le proprie query LINQ.
Si chiama LINQPad, e qua sotto è rappresentato uno screenshot.
Sotto riporto il sommario sia della versione 4.0 che della versione 3.0 del libro, così ci si può fare meglio un’idea del cambiamento nei contenuti.
Come voto finale metto un 9 pieno, maggiore dell’8 che avevo assegnato alla versione 3.0. Il libro, pur con qualche difetto, è un vero e proprio “Dizionario del C#”, e si trova tutto quanto può servire.
PRO
Eccellente compendio di tutto ciò che riguarda C# 4.0 nel suo complesso. Libro ideale da tenere come reference omnicomprensiva. Grande abbondanza di esempi mirati e ottimamente pensati.
CONTRO
La presenza di non pochi refusi costringe il lettore (e il libro stesso) ad una sorta di quarantena in modo da sistemarseli a mano. La rilegatura ha perso la tecnica geniale che aveva nella precedente edizione.
Voto complessivo: 9/10
Lettore: Intermedio / Avanzato
Table of contents
Chapter 1 : Introducing C# and the .NET Framework Object Orientation
Chapter 2 : C# Language Basics A First C# Program
Chapter 3 : Creating Types in C# Classes
Chapter 4 : Advanced C# Delegates
Chapter 5 : Framework Overview The CLR and Core Framework
Chapter 6 : Framework Fundamentals String and Text Handling
Chapter 7 : Collections Enumeration
Chapter 8 : LINQ Queries Getting Started
Chapter 9 : LINQ Operators Overview
Chapter 10 : LINQ to XML Architectural Overview
Chapter 11 : Other XML Technologies XmlReader
Chapter 12 : Disposal and Garbage Collection IDisposable, Dispose, and Close
Chapter 13 : Diagnostics and Code Contracts Conditional Compilation
Chapter 14 : Streams and I/O Stream Architecture
Chapter 15 : Networking Network Architecture
Chapter 16 : Serialization Concepts
Chapter 17 : Assemblies What’s in an Assembly?
Chapter 18 : Reflection and Metadata Reflecting and Activating Types
Chapter 19 : Dynamic Programming The Dynamic Language Runtime
Chapter 20 : Security Permissions
Chapter 21 : Threading Threading’s Uses and Misuses
Chapter 22 : Parallel Programming Why PFX?
Chapter 23 : Asynchronous Methods Why Asynchronous Methods Exist
Chapter 24 : Application Domains Application Domain Architecture
Chapter 25 : Native and COM Interoperability Calling into Native DLLs
Chapter 26 : Regular Expressions Regular Expression Basics
Appendix : C# Keywords
Questo invece è il sommario della precedente edizione, giusto per farsi un’idea dei cambiamenti. E più sotto i dettagli del libro, sia presi dal sito della O'Reilly che da Amazon.
Summary
Preface
1 - Cap. 1 – Introducing C# and the .NET Framework
8 - Cap. 2 – C# Language Basics
60 - Cap. 3 – Creating Types in C#
105 - Cap. 4 – Advanced C#
159 - Cap. 5 – Framework Overview
170 - Cap. 6 – Framework Fundamentals
229 - Cap. 7 - Collections
274 - Cap. 8 – LINQ Queries
320 - Cap. 9 – LINQ Operators
362 - Cap. 10 – LINQ to XML
395 - Cap. 11 – Other XML Technologies
422 - Cap. 12 – Disposal and Garbage Collection
432 - Cap. 13 – Streams and I/O
469 - Cap. 14 - Networking
498 - Cap. 15 - Serialization
535 - Cap. 16 - Assemblies
562 - Cap. 17 – Reflection and Metadata
612 - Cap. 18 - Security
639 - Cap. 19 – Threading
698 - Cap. 20 – Asynchronous Methods
709 - Cap. 21 – Application Domains
722 - Cap. 22 – Integrating with Native DLLs
738 - Cap. 23 – Diagnostic
756 - Cap. 24 – Regular Expressions
775 - A. C# Keywords
782 - B. Namespace-to-Assembly Reference
791 - Index
.
.
.