Una riflessione sui miei 20 anni di lavoro nello sviluppo software

Ho ricevuto il mio primo stipendio come sviluppatore software nel luglio 2004. Sono passati 20 anni.

Durante questi anni sono stato sviluppatore, imprenditore, consulente, formatore, e ho imparato (principalmente commettendo errori) molte cose sia sul lato tecnico che su quello sociale dello sviluppo software.

Quello che ho scritto qui è basato su quello che ho vissuto in questo mercato, il che significa: è basato su molti anni di esperienza, ma è anche influenzato da queste stesse esperienze. Ma dato che ho visto cose cambiare e altre non cambiare, vorrei provare a elaborare il mio ragionamento su quali sono le cause e le conseguenze di questi risultati.

Quindi, iniziamo!

Cosa è cambiato in 20 anni?

Beh… Ovviamente, la tecnologia è cambiata. E con essa, tutto è cambiato.

Quando ho iniziato a programmare non avevamo iPhone o telefoni Android, e curiosamente stavo lavorando con il mobile computing. Pocket PC 2002 era il sistema operativo e stavo scrivendo codice C++ che doveva essere altamente ottimizzato a causa di tutte le restrizioni di memoria che avevamo all’epoca.

Computer mobili IntermecMobile negli anni 2000: Questi dispositivi potevano far sembrare fragile il Nokia 3310

Ma soprattutto: le organizzazioni sono cambiate. E la maggior parte dei cambiamenti che ho visto sono stati causati da innovazioni tecnologiche.

Complicato, poi più semplice, poi complesso

Se hai mai scritto un’applicazione web usando J2EE e Enterprise Bean, ricorderai quanto era burocratico. Il deploy non era diretto, dovevamo scrivere molto codice per fare la cosa più semplice e i cambiamenti allo schema del database erano un incubo. Il punto è che stavamo principalmente creando applicazioni web private perché il web non era quello che è oggi (nemmeno Orkut era stato creato ancora).

All’inizio, questi punti dolenti hanno incentivato le organizzazioni a spingere per team più grandi, un dipartimento di gestione database specializzato e anche un dipartimento operazioni.

D’altra parte, gli sviluppatori hanno iniziato a creare strumenti per risolvere questi punti dolenti: framework ORM come Hibernate hanno iniziato a diventare popolari, poi framework come Rails hanno iniziato a introdurre modi più semplici per creare database evolutivi e anche un approccio più diretto per creare un’applicazione web.

Questi cambiamenti hanno dato potere agli sviluppatori e permesso a piccoli team di essere ancora più produttivi di quanto lo fossero i grandi team aziendali. Con questo abbiamo visto un cambiamento nel mercato: tutti volevano team più piccoli con i cosiddetti Sviluppatori Full-stack. Il cloud computing era disponibile per tutti per meno di $5/mese con Heroku, DigitalOcean e AWS, e molte startup hanno iniziato a spuntare ovunque.

Ma poi… tutto è cambiato.

Il web si è evoluto e quello che era un semplice REQUEST/RESPONSE con HTML e CSS è diventato un puzzle complesso usando Ajax, jQuery, e poi Angular, Ember, React, Vue, Svelte. Le aziende hanno iniziato a richiedere sviluppatori frontend.

Sul backend, le cose sono diventate ancora più complesse. I giganti dell’industria stavano affrontando le sfide causate dal loro stesso successo: come gestire una quantità così massiccia di utenti simultanei? Come memorizzare efficientemente questa quantità massiccia di dati?

Ancora una volta, gli sviluppatori sono venuti in soccorso e hanno creato soluzioni come Docker, Kubernetes, Grafana. I giganti hanno condiviso le loro storie di successo e le aziende di medie dimensioni hanno deciso di aggiungere tutta questa complessità ai loro prodotti per raggiungere gli stessi risultati. In parte, questo movimento è stato causato anche dagli sviluppatori: volevamo lavorare con la tecnologia all’avanguardia usata dai giganti del mercato, anche se chiaramente non era necessaria per i nostri server che gestivano molti meno utenti di Google o Facebook.

Sviluppare un software semplice sembrava… inutilmente complesso. La maggior parte delle aziende con cui ho lavorato all’epoca non stavano creando prodotti per le masse, ma prodotti di nicchia con poca o nessuna necessità di tale complessità. Ed è stato proprio quando ho iniziato a lavorare di più con consulenza e formazione di nuovo. Stavo costantemente sostenendo modelli più semplici ogni volta che erano abbastanza buoni.

Lo faccio ancora.

Cosa non è cambiato in 20 anni?

Molte cose:

  • Abbiamo ancora bisogno di sviluppatori software

  • Le persone stanno ancora cercando di capire come misurare la produttività nel campo dello sviluppo software

  • Le stime sono ancora un problema per la maggior parte delle persone

  • Le persone discutono ancora su qual è il miglior editor di testo/IDE/framework/linguaggio

  • E beh… lo sviluppo software mi porta ancora gioia :)

Non sento di aver detto tutto quello che volevo dire. Devo ancora riflettere di più su come sono cambiato durante questi 20 anni.

Forse scriverò di più su questo in futuro.

Dipendenze: Librerie o applicazioni OTP
L'avvento del TDD: Una guida per principianti