Si può usare
SlideShare per condividere presentazioni e filmati più o meno specialistici, ma bisogna dire che un corposo
slide show dal titolo "Deep C", assemblato da
Olve Mauda, sembra meritare ben più di un'occhiata e andrebbe letto da cima a fondo. Vediamo sommariamente di cosa tratta. Si parte con un
esempio di codice C molto breve e apparentemente innocuo, che diventa però pretesto e motivo per esporre concetti e distinzioni piuttosto importanti, che a volte possono rimanere in ombra.
Questo vale, ad esempio, per alcune sottili
differenze tra i diversi standard C, che col passar del tempo si sono accumulati, e dei quali può essere opportuno tener conto quando si programma usando questo linguaggio. Alcuni risultati sorprendenti, o non univocamente interpretabili, potrebbero dipendere peraltro anche da scelte del compilatore oltre che del linguaggio, e anche di questo occorre tener conto.
L'
esposizione degli argomenti in
Deep C è realizzata attraverso un confronto immaginario tra due personaggi, uno maschile, non troppo preciso, che risponde un po' a naso, alle stesse domande che la protagonista femminile, invece, riesce a risolvere dimostrando conoscenza approfondita della materia. Quello che rende un dipendente, o un collega, competitivo e affidabile dunque sembra essere la competenza su alcuni (apparenti) dettagli, come dichiarazioni e definizioni, convenzioni di chiamata, ottimizzazione e conoscenza degli standard.
Qui finisce una prima parte della presentazione, che nel seguito riprende e approfondisce i cosiddetti
sequence point, veri e propri punti nodali dove si pagano le conseguenze delle scelte effettuate in precedenza. E' vero che in alcuni casi vengono proposte delle forme espressive che i più eviterebbero, ma probabilmente è anche vero che non tutti sanno esattamente per quali motivi certe forme andrebbero evitate. Altri approfondimenti sono quelli relativi alla
differenti architetture a 32 e 64 bit, dalle quali a volte non si può prescindere.
L'autore della presentazione tratta comunque altri argomenti più generali, come il
model memory, oppure le
ottimizzazioni, prima di concludere con una sintetica e riassuntiva slide relativa allo
spirito del linguaggio C: fiducia nel programmatore e semplicità mi sembrano i due punti principali di queste informali specifiche.
Passando a C++, i nostri due personaggi si autovalutano quanto a conoscenza del linguaggio, e ovviamente il meno preparato dei due è quello che riceve (da se stesso) il punteggio più alto. L'autore di
Deep C si tiene nel mezzo assegnandosi un sette, prima di partire con un problemino, relativo alle
dimensioni di una struct con due campi di tipo
int e
char. Presto arrivano domande più imbarazzanti, come ad esempio se è possibile che una
struct C++ abbia funzioni membro.
Dal momento che la mia autovalutazione in C++ è decisamente in fase calante, mi limiterò a qualche cenno sugli argomenti oggetto di indagine, che sono tra gli altri le
differenze e somiglianze con C, l'inizializzazione degli oggetti, le classi, le convenzioni sintattiche, la
regola dei tre. Le ultime slide si occupano appunto di alcuni di questi argomenti e del ciclo di vita degli oggetti.
L'ultima parte di questa corposa presentazione insiste sull'opportunità di tenersi sempre aggiornati, incontrando persone, discutendo dal vivo o via Internet, frequentando dei corsi e leggendo dei libri: la capacità e la volontà di imparare cose sempre nuove distingue un programmatore buono da uno mediocre, e sarebbe opportuno che in un gruppo di lavoro ci fosse un discreto numero di rappresentanti della prima specie. D'altra parte, lavorando in gruppo si imparano molte cose anche dai colleghi, sempre se si è capaci di essere recettivi e senza pregiudizi.
Al termine di
Deep C vengono fornite alcune
indicazioni bibliografiche:
ACCU;
Test-Driven Development for Embedded C di
James Grenning; il vecchio testo "
Expert C programming" di
Peter van der Linden; infine, per quanto riguarda C++, "
Effective C++" di
Scott Meyers e
C++ coding standards di
Herb Sutter e
Andrei Alexandrescu.