Recensione “Cocoa Programming – A Quick Start Guide for Developers”

Beh, magari chiamarla “recensione” è un po’ altisonante, non sono ancora ai livelli di dispensare perle di saggezza, però diciamo che “penso quindi sono” e, in qualità di non-sprovveduto, fornisco la mia personale opinione su questo libro pubblicato da Pragmatic Programmers (http://pragprog.com).

Mi sono imbattuto in questa casa editrice al WWDC09, grazie a @Geppy e a @Vicente, e sono rimasto “conquistato” da una scelta editoriale che reputo molto innovativa: è possibile acquistare i libri prima che vengano pubblicati, in versione digitale, ricevendo delle versioni “beta” man mano che l’autore prosegue nella stesura e nella rilettura, oltre che nella correzione degli errori (anche grazie proprio alle segnalazioni dei lettori!).

Fin dal momento dell’acquisto, anche qualora il libro sia ancora nelle prime versioni, è possibile “prenotare ” la versione cartacea (oltre a quella digitale in formato pdf, epub, mobi) che verrà spedita una volta che sia stata rilasciata la versione definitiva (ovvero, quando il libro va appunto “in stampa”).

Non c’è nemmeno da chiedere in che lingua siano le pubblicazioni: ovviamente solo in Inglese, lingua nella quale tutt’oggi rimangono la maggior parte dei libri dedicati alla programmazione per Objective-C/ Mac OS X / iPhone OS (salvo alcune eccezioni) .

Veniamo a noi: in qualità di programmatori “pragmatici”, andiamo direttamente al punto della questione: il libro “Cocoa Programming – A Quick Start Guide for Developers” si propone come il primo libro con cui confrontarsi per un aspirante programmatore nel “mondo Mac”. Cocoa è infatti il framework, scritto in linguaggio Objective-C, sul quale si basano Mac OS X e (nella sua “declinazione” Cocoa Touch) iPhone OS.

Per dirla con parole Apple,

Cocoa is an application environment for both the Mac OS X operating system and iPhone OS, the operating system used on multi-touch devices such as iPhone and iPod touch. It consists of a suite of object-oriented software libraries, a runtime, and an integrated development environment.

(Tratto da “Cocoa Fundamentals”, lo trovate a http://developer.apple.com/mac )

Il problema di questo libro (o forse il pregio, dipende da cosa state cercando) è che è appunto focalizzato su Cocoa e su tutti gli aspetti legati a questo framework, tanto da portare esempi al limite dell’inutile pur di mostrare tutte le feature messe a disposizione da questo ambiente. Intendiamoci: i Cocoa Bindings, Key-Value Observing e Key-Value Coding sono temi che torneranno molto cari in futuro, i capitoli relativi a Core Data hanno una grande importanza (anche nell’ottica di iPhone OS), senza contare inoltre che questo libro è stato scritto “a cavallo” del WWDC09 in cui sono state rivelate nuove e importanti feature per Mac OS X 10.6 quali Blocks, Grand Central Dispatch e OpenCL (quest’ultimo però non è trattato nel presente libro) e nelle 15 (quindici!) versioni beta che sono state rilasciate c’è stato modo di inserire dei capitoli dedicati ad esse.

Insomma, la chiave di lettura di questo libro sta in quelle due parole “quick start” del titolo: se credete di potervi trovare un modo per iniziare immediatamente a programmare, magari guidati passo-passo nella realizzazione di alcune applicazioni che abbiano un immediato utilizzo e riscontro, qui potreste rimanere delusi. Cocoa Programming è in effetti un “tour de force” di tutto quanto può mettervi a disposizione Cocoa (ed è davvero tanta roba!) ma non vi porterà in un cammino verso delle applicazioni con dei veri e propri risvolti pratici (per lo meno finchè non affronterete il discorso Core Data, in cui avrete la possibilità di avere anche dei dati salvati in locale…).

Per il resto, il libro si concentra molto sulle differenti vie che possono essere adottate per ottenere le soluzioni più efficaci nelle implementazioni del software, in particolare mettendo in risalto le potenzialità dei binding ottenute tramite Interface Builder, opposte alla scrittura di righe di codice per ottenere le stesse funzionalità con minore efficacia e soprattutto introducendo maggiori possibilità di errore. Sicuramente permette di apprezzare tutto quanto potrete apprendere in seguito, con quelli che rappresentano invece i libri più “didattici” come iPhone SDK Development o Beginning Mac Programming, anche se chi sta cercando un modo per ottenere risultati immediati rimarrà probabilmente deluso.

Dopo i primi capitoli, in cui viene mostrato come realizzare un browser funzionante in pochi semplici click del mouse, si passa a capitoli che forniscono una introduzione degli oggetti, delle classi, dei metodi, dei parametri e delle variabili di istanza; sono fondamentali ma sono accompagnati da esempi abbastanza intricati e con pochi risvolti pratici. Questo stesso approccio rimane in tutta la parte centrale del libro, in cui quanto si apprende viene applicato ad una ipotetica applicazione che permette di visualizzare l’icona dei programmi che avviate o chiudete sul vostro Mac, in vari modi. In seguito, quando si arriva ai capitoli dedicati a Core Data, si è ridestata la mia speranza di poter vedere qualche caso reale, ma dopo un paio di versioni di una ipotetica “Libreria” (classico esempio per rappresentare relazioni tra delle entità) si torna sull’esoterico con Blocks, le Operations e le Dispatch Queues. Interessanti da leggere, un po’ meno da studiare per chi si imbatte per la prima volta con certi concetti.

Il ritmo degli esempi è tutto sommato accettabile: inizialmente si viene guidati “passo-passo” nella realizzazione delle interfacce e di ogni riga di codice che si va a scrivere, passando poi a degli esercizi con relativa soluzione, con un passaggio più o meno graduale verso maggiore indipendenza. Tranne alcuni esempi un po’ ostici (alcuni dei quali ono stati risolti grazie ai forum del sito PragProg), la scelta si rivela nel complesso discreta. È comunque possibile scaricare per intero i file del progetto di Xcode di ogni esempio presentato, in modo da poter avere sotto controllo ogni particolare, anche quelli che vengono tralasciati nelle soluzioni stampate.

Una nota in chiusura: l’autore del libro, Daniel H. Steinberg, che può risultare sconosciuto ai più, è una figura molto attiva nell’ambiente riguardante Objective-C/Cocoa, collabora con PragProg e altri editori, e tiene il proprio blog al sito http://dimsumthinking.com/.

L’approfondimento relativo all’autore mi ha dato la chiave di lettura del libro che ho cercato di trasmettere in questa recensione: è una introduzione al mondo Cocoa, che contiene al suo interno concetti necessari per i principianti ed altri decisamente più ostici e che, in casi estremi, forse non saranno neanche mai affrontati da alcuni programmatori; non aspettatevi però di avere in mano, al termine di questo libro, alcuna applicazione con applicabilità al mondo reale: per quelle ci sono altri libri oppure altri podcast su iTunes U.