Negli anni ’80, il modo più semplice per iniziare una lotta tra nerd era proclamare che il tuo linguaggio di programmazione preferito era il migliore. C, Pascal, Lisp, Fortran? I programmatori passavano ore a spiegare esattamente perché il loro particolare modo di creare una clausola if-then-else era superiore al tuo modo.
Questo era allora. Oggi, le battaglie che riguardano la sintassi e la struttura sono in gran parte finite perché il mondo ha convergente su alcuni semplici standard. Le differenze tra i punti e virgola, le parentesi graffe e quant’altro in C, Java e JavaScript sono minori. Esistono ancora interessanti dibattiti sulla tipizzazione e le chiusure, ma la maggior parte sono irrilevanti perché l’automazione sta colmando il divario. Se non vi piace specificare un tipo di dati, c’è una buona possibilità che il computer sia in grado di dedurre esattamente ciò che intendevate. Se il vostro capo vuole JavaScript ma a voi piace Java, un compilatore incrociato convertirà tutto il vostro Java digitato staticamente in JavaScript minificato, pronto per essere eseguito in un browser. Perché combattere quando la tecnologia ci copre le spalle?
Oggi, l’azione interessante è nei framework. Quando mi sono seduto con altri membri della facoltà alla Johns Hopkins University per pianificare un nuovo corso, i framework hanno dominato la conversazione. Angular è meglio di Ember? Node.js è tutto questo?
Abbiamo progettato un corso di indagine che avrebbe esplorato l’architettura dei più importanti pacchetti software che sono il fondamento di Internet. Questo era il centro dell’azione, degno di un corso d’indagine che avrebbe esplorato l’architettura dei più importanti pacchetti software che stanno alla base di Internet.
In questo senso, i frameworks sono i nuovi linguaggi di programmazione. Sono dove si trovano le ultime idee, filosofie e praticità della codifica moderna. Alcuni si estinguono, ma molti stanno diventando i nuovi mattoni fondamentali della programmazione. Qui ci sono sette aspetti che alimentano la tendenza dei framework — e che rendono i framework il nuovo focolaio preferito per le lotte tra nerd.
La maggior parte della codifica è mettere in fila le API
C’è stato un tempo in cui scrivere software significava impiegare tutta la propria conoscenza del linguaggio di programmazione per spremere il massimo dal codice. Aveva senso padroneggiare la complessità dei puntatori, delle funzioni e dello scopo – la qualità del codice dipendeva dal fare la cosa giusta. Oggi l’automazione gestisce gran parte di questo. Se lasciate dichiarazioni inutili nel codice, non preoccupatevi. Il compilatore elimina il codice morto. Se lasciate puntatori penzolanti, il garbage collector probabilmente lo capirà.
Inoltre, la pratica della codifica è diversa ora. La maggior parte del codice è ora una lunga linea di chiamate API. C’è una occasionale riformattazione dei dati tra le chiamate API, ma anche questi lavori sono di solito gestiti da altre API. Pochi fortunati riescono a scrivere codice intelligente, bit-banging, pointer-juggling per le viscere delle nostre macchine, ma la maggior parte di noi lavora con i livelli superiori. Semplicemente facciamo scorrere i tubi tra le API.
Per questo motivo, è più importante capire come si comporta un’API e cosa può fare. Quali strutture di dati accetta? Come si comportano gli algoritmi quando il set di dati diventa più grande? Domande come queste sono più centrali nella programmazione di oggi che quelle sulla sintassi o sul linguaggio. Infatti, ci sono ora un certo numero di strumenti che rendono semplice chiamare una routine in un linguaggio da un altro. È relativamente semplice collegare le librerie C al codice Java, per esempio. Capire le API è ciò che conta.
Vale la pena di stare sulle spalle dei giganti
Immagina di essere diventato un discepolo di Erlang o di un altro nuovo linguaggio. Decidete che offre la migliore piattaforma per scrivere un’applicazione stabile e senza bug. Questo è un bel sentimento, ma potrebbero volerci anni per riscrivere tutto il codice disponibile per Java o PHP nel vostro ultimo linguaggio scelto. Certo, il vostro codice potrebbe risultare drammaticamente migliore, ma ne vale la pena?
I frameworks ci permettono di sfruttare il duro lavoro di chi è venuto prima di noi. Può non piacerci l’architettura che hanno scelto e possiamo litigare sui dettagli di implementazione, ma è più efficiente soffocare le nostre lamentele e trovare un modo per vivere con le differenze. È molto più facile ereditare tutto il bene e il male del codice base attraverso un framework. Prendere la strada del macho scrivendo tutto da soli nel vostro nuovo linguaggio preferito piuttosto che in uno dei framework più popolari non vi permetterà di godervi la crema della vostra nuova scelta così rapidamente come se vi rimetteste semplicemente ai creatori di framework e alle loro API.
Conoscere l’architettura è ciò che conta, non la sintassi
Quando la maggior parte della codifica è mettere in fila le chiamate API, non c’è molto vantaggio nell’imparare le idiosincrasie del linguaggio. Certo, si può diventare esperti su come Java inizializza i campi statici negli oggetti, ma sarebbe molto meglio capire come sfruttare la potenza di Lucene o JavaDB o qualche altro mucchio di codice. Potreste passare mesi a studiare le routine di ottimizzazione dei compilatori Objective-C, ma imparare i pro e i contro dell’ultima libreria core di Apple farà davvero urlare il vostro codice. Andrete molto più lontano imparando i dettagli pignoli del framework che la sintassi del linguaggio su cui il framework poggia.
La maggior parte del nostro codice trascorre la maggior parte del suo tempo nei cicli interni delle librerie. Ottenere i dettagli del linguaggio corretto può aiutare, ma sapere cosa succede nelle librerie può ripagare drammaticamente.
Gli algoritmi dominano
Imparare un linguaggio di programmazione può aiutare a destreggiarsi con i dati nascosti nelle variabili, ma questo porta solo fino a un certo punto. Il vero ostacolo è ottenere gli algoritmi corretti, e questi sono di solito definiti e implementati dai frameworks.
Molti programmatori capiscono che è pericoloso e dispendioso spendere tempo per reimplementare algoritmi e strutture dati standard. Certo, si potrebbe essere in grado di sintonizzarli un po’ alle proprie esigenze, ma si rischia di fare errori sottili. I framework sono stati ampiamente testati nel corso degli anni. Rappresentano il nostro investimento collettivo in un’infrastruttura software. Non ci sono molti esempi di quando ha senso “uscire dalla griglia”, mettere da parte il duro lavoro degli altri e costruire una cabina algoritmica con le proprie mani.
L’approccio giusto è studiare i framework e imparare ad usarli al meglio. Se scegliete la struttura dati sbagliata, potreste trasformare un lavoro lineare in uno che richiede un tempo che è una funzione quadratica della dimensione dell’input. Questa è una grande seccatura una volta che si diventa virali.