Salire lungo l’albero dell’astrazione
Ricordo le prime righe di codice che ho scritto. Durante il primo anno delle superiori, sono entrato per la prima volta in contatto con la programmazione. Il mio insegnante ci disse che era ora di smettere di parlare di pseudocodice e algoritmi e di iniziare a scrivere codice C++ che funzionasse davvero. Fu una strana sensazione di soddisfazione. Il mio programma leggeva due numeri dalla console e ne scriveva la somma.
Mentre fissavo quella console, non pensavo affatto al fatto che altri 29 studenti avessero scritto le stesse righe di codice. Perché avrebbe dovuto essere un problema? In fondo stavamo imparando, no?
Facciamo un salto avanti di 15 anni. Anche se il contesto è diverso, il risultato è lo stesso. Tu, io e decine di migliaia di sviluppatori in tutto il mondo scriviamo le stesse righe di codice. Forse non stiamo sommando due numeri, ma di sicuro allineiamo div, recuperiamo dati da endpoint REST e cerchiamo utenti in un database. Stiamo ancora imparando?
L'ascesa dell'automazione
Quando parliamo di apprendimento umano nel 2019, abbiamo un forte concorrente: qualcosa che non si stanca di scrivere ed eseguire sempre lo stesso codice. Qualcosa che può influire profondamente su come si evolverà il nostro lavoro in futuro.
Oggi si parla molto di automazione e di macchine che sostituiscono gli esseri umani. Come si sta preparando, dunque, il nostro mercato del lavoro?
L'automazione è già una pratica consolidata nell'ingegneria del software. I linguaggi e gli strumenti di programmazione più diffusi integrano moltissime funzioni automatizzate. Pensiamo all'allocazione della memoria e alla garbage collection. Pensiamo al controllo dei tipi e alla compilazione dei programmi.
Anche i processi di sviluppo software traggono vantaggio dall'automazione. Eseguiamo test funzionali e non funzionali sulle nostre applicazioni e sui nostri servizi. Disponiamo di pipeline automatizzate per la creazione e la distribuzione, che avviano server e configurano gli ambienti al posto nostro.
Eppure, quando pensiamo all'atto di scrivere codice, lo consideriamo ancora un compito umano. In tutto lo stack ci affidiamo a ingegneri specializzati per progettare l'architettura, ideare e realizzare sistemi backend, database, applicazioni web, applicazioni mobili e così via.
Forse i lavori nell'ingegneria del software non sono destinati a essere automatizzati. Forse «automazione» non è il termine giusto. E «astrazione»?
Automazione e astrazione
Pensa alla programmazione di basso livello e a quella di alto livello. Quanta flessibilità hai nell’allocare la memoria o nell’accedere ai registri del processore? E quanta potenza ti offre un framework ben scritto?
Quando scegli un livello di astrazione più elevato, lasci che siano altri a prendere le decisioni di basso livello al posto tuo. Così puoi realizzare una soluzione software completa molto più rapidamente. Questa è la teoria, naturalmente.
L’astrazione può essere vista come un albero di decisioni. Cheng Lou ha tenuto un’interessante presentazione sui compromessi legati al salire e scendere lungo questo albero di astrazione.
In definitiva, l’astrazione consiste nell’automatizzare le attività ripetitive e nel poter esprimere di più con meno sforzo. Significa usare quel codice scritto da qualcun altro, senza duplicare il lavoro.
L’automazione è quindi al nostro servizio, ma non è qui per sostituirci: è qui per consentirci di raggiungere livelli di astrazione più elevati. Questo comporterà un lieve cambiamento nel mercato del lavoro per gli ingegneri del software, ma di certo non segnerà la fine della necessità dell’ingegneria del software. Significa che sempre più spesso dovremo dedicare meno tempo a scrivere codice per risolvere problemi di basso livello già affrontati da altri. E, si spera, potremo dedicare più tempo a risolvere problemi ancora irrisolti.
Lo sviluppo frontend è rimasto indietro?
Se ci concentriamo sul mondo del web e del mobile, lo sviluppo di applicazioni sta facendo enormi passi avanti in questa direzione. Negli ultimi anni abbiamo assistito a una straordinaria crescita degli strumenti, dei framework e dei servizi. Tutti cercano di offrire astrazioni migliori e più potenti.
I servizi backend gestiti, GraphQL e gli strumenti per i sistemi di progettazione stanno diventando pratiche diffuse. Tuttavia, per creare interfacce utente, su mobile o sul web, non siamo ancora arrivati a quel punto. Lavoriamo con i mattoni fondamentali del web: HTML, CSS e JavaScript. Certo, abbiamo TypeScript, React, CSS-in-JS e decine di altri strumenti che migliorano l’esperienza di sviluppo. Ma le nostre attività non sono cambiate alla radice. Continuiamo a scrivere gli stessi componenti e le stesse interazioni utente di migliaia di sviluppatori in tutto il mondo. Siamo ancora in fase di apprendimento.
Colmare il divario con l’automazione e la generazione di codice
C’è un divario nello stack tecnologico. Lo sviluppo frontend può puntare a un livello di astrazione più elevato. Il codice che scriviamo oggi può essere automatizzato o generato. Dobbiamo solo immaginare nuovi modi per modellare tutta la complessità dell’interfaccia. Possiamo iniziare esaminando i sistemi di eventi, le macchine a stati e i flussi di dati bidirezionali. Non sarà facile, ma sarà divertente!
Sono entrato in TeleportHQ lo scorso novembre con un obiettivo chiaro: colmare questo divario e lavorare a un livello di astrazione superiore per lo sviluppo frontend. Credo nella nuova era di strumenti, modelli e pratiche che stanno emergendo per sostituire le implementazioni di basso livello delle funzionalità ripetitive dell’interfaccia utente.
Questa ondata di automazione e astrazione ci permetterà di concentrarci sugli aspetti più importanti e complessi dell’ingegneria frontend? E risolverà i problemi legati alle noiose attività ripetitive? Non vedo l’ora di scoprirlo! Unisciti a noi nella nostra missione: sviluppare i migliori generatori di codice per applicazioni web e mobile, come libreria open source.
Commenti
Non ci sono ancora commenti. Sii il primo a condividere le tue opinioni.