La domanda che molti mi rivolgono è sempre questa: come hai imparato a programmare? Un programmatore, guardando il mio codice, sicuramente scuoterà la testa perplesso (ed ha ragione), ma chi inizia vorrebbe sempre sentirsi rispondere con una qualche rivelazione di un non meglio precisato segreto mistico o magico. In realtà non c'è nessun segreto, perchè il modo migliore di imparare è quello di programmare. In questo articolo vorrei ripercorrere alcune tappe del mio (discutibile) cammino come programmatore / sviluppatore.
Chomsky
Nel 1999, quando ero all'università di Torino, ho sostenuto forse l'esame più impegnativo della mia altrettanto discutibile carriera universitaria: linguistica generale. Tema del corso era la grammatica generativa di Noam Chomsky.
La grammatica generativa negli anni '50 fu applicata alla nascente tecnologia informatica allo scopo di creare dei traduttori simultanei. Il successo della grammatica generativa si deve al fatto che, a livello formale, è molto simile ad un insieme di formule matematiche che ne fanno il candidato ideale per l'applicazione al mondo dei computer.
Da questo corso ho imparato che:
- Ciascun linguaggio ha una struttura profonda
- Questa struttura è logica
- È fondamentale comprendere questa struttura.
La stessa cosa vale per i linguaggi di programmazione. Se si comprende la struttura di un linguaggio di programmazione, è più semplice impararlo.
Tutti i linguaggi di programmazione per il Web sono in qualche modo imparentati, formalmente, con il linguaggio C. Questo linguaggio è stato uno dei primi esempi di riproduzione dei meccanismi logici della mente umana espressi in una grammatica molto simile al linguaggio umano.
Pensiamo alle parole umane if
, else
, do
, while
usate come parole chiave del linguaggio. Usando questo approccio, diventa più semplice scrivere codice, in quanto già possiamo intuire il funzionamento del linguaggio.
Grammatica formale
Consideriamo due esempi di codice, JavaScript e PHP:
var valid = (val != '') : true ? false;
self::A
A livello formale i due punti assumono significati diversi a seconda del linguaggio utilizzato. In JavaScript vengono usati negli operatori ternari, in PHP possono trovarsi sia negli operatori ternari che, raddoppiati, come operatori di scope.
I CSS non sono un linguaggio di programmazione, ma che dire di questo?
p:first-letter {}
p::after {}
In altre parole, i token usati nei vari linguaggi sono sempre gli stessi, solo che a livello formale varia il loro significato nel linguaggio di riferimento. Quindi per me è stato decisivo imparare di volta in volta la grammatica formale dei vari linguaggi, facendo tesoro di quanto imparato dalle grammatiche di altri linguaggi.
Pratica
Ho dovuto fare molta pratica. Prima copiavo degli esempi, poi li ho analizzati, poi ho fatto dei test per conto mio, infine li ho assimilati e quindi riutilizzati.
L'importante è esercitarsi e cercare di venire a capo dei problemi in modo autonomo. Solo così si progredisce in un linguaggio. Il rischio è quello di continuare a copiare e incollare codice per sempre.
E questo, credetemi, è il modo più sicuro per non imparare.