Nello sviluppo di software (in particolare nello sviluppo web), sentiamo la frase “sviluppatore full stack”, come in ” Sono uno sviluppatore full stack ” o ” stiamo cercando uno sviluppatore full stack. ” Indovina un po’ ? Non vi è nulla di simile.
La frase “Full Stack” è in realtà solo una parola d’ordine aziendale, non una designazione ingegneristica. I veri sviluppatori non vanno in giro dicendosi l’un l’altro: ” Sei full stack?… Sono full stack… e tu?… tu full stack?… ” La frase “full stack” è proprio ciò che gli sviluppatori dicono per assecondare i reclutatori che di solito non hanno idea di cosa significhi. È quello che dicono i reclutatori per placare i manager, ma di solito non hanno idea del perché lo stanno dicendo. È quello che dicono i manager perché ovviamente nessuno vuole un team di sviluppatori half-stack, sarebbe pazzesco. Hai mai visto una squadra di half stack? È orribile.
Allora da dove viene questa frase?
Questa sfortunata frase si è evoluta da un descrittore tecnico che significa l’insieme completo di tecnologie primarie che costituiscono una soluzione tecnica completa. In genere significa il database e il sistema operativo (noto anche come “back-end”) e includendo l’interfaccia utente (nota anche come “front-end”). Tra questi due punti c’è il controllo e la logica aziendale. Questa soluzione end-to-end si basa su molte tecnologie ausiliarie come la rete, l’hardware, i bilanciatori di carico, i firewall, ecc., ma in genere “lo stack” si riferisce solo al database, al sistema operativo e ai linguaggi necessari per creare un soluzione software completa (tipicamente uno o più linguaggi di back end e uno o più front end). Apparentemente sembra logico che se “lo stack” è l’insieme di tecnologie necessarie per realizzare una soluzione end-to-end, allora vorresti un ingegnere che sia un “ingegnere full stack”. In altre parole, vuoi un tecnico in grado di completare una soluzione end-to-end. Sembra logico. Non è. È molto sbagliato (con un paio di eccezioni degne di nota spiegate di seguito).
Quindi, quando chiedi a uno sviluppatore, ” sei full stack? “, quello che stai veramente chiedendo è ” puoi lavorare con il database, il sistema operativo e due o più linguaggi di programmazione? “Certo che diranno di sì. Tuttavia la domanda stessa è completamente priva di significato. Essere “full stack” è la definizione stessa di ingegnere/sviluppatore di software. Non ci sono altri tipi di ingegneri del software. Nessuno.
Se sei un tecnologo ma non “full stack”, allora non sei un ingegnere del software. Questo è letteralmente ciò che significa ingegnere del software. Ci sono molte altre professioni che sono entrambe altamente tecniche ma non Full Stack, e hanno i loro nomi. Gli amministratori di database sono specializzati nel database, non sono full stack ed è per questo che li chiamiamo amministratori di database. Gli amministratori di sistema sono specializzati nel sistema operativo e nei server, non sono full stack, motivo per cui li chiamiamo amministratori di sistema. I web designer (al contrario degli sviluppatori web) sono specializzati nella progettazione di interfacce utente, ma non in soluzioni web complete, motivo per cui non li chiamiamo ingegneri del software. Se non sei “full stack”, allora non sei un ingegnere del software. Si autodefinisce.
Dire che vuoi un ingegnere “full stack” è come dire che vuoi un medico “full medical” o un vigile del fuoco “full fire”.
Non dici quelle cose perché è ridondante. Non ci sono medici “mezzi medici”. Ci sono professionisti medici che non sono “medicinali completi”, come infermieri, EMT e assistenti medici. Ecco perché hanno i loro nomi, non sono medici. Nel momento in cui dici “dottore” significa che ottieni “medicina completa”. Essere un ingegnere del software significa avere un insieme specifico di competenze necessarie per impegnarsi pienamente in quella professione. Per definizione quelle abilità sono “lo stack completo”. Quando chiedi a uno sviluppatore ” sei Full Stack? ” in realtà stai chiedendo “sei un ingegnere del software?” Se stai parlando con uno sviluppatore e hai bisogno di chiedere” sei full stack? ” allora non capisci davvero gli sviluppatori o lo stack. Vuoi assumere grandi ingegneri del software? Fallo bene. La domanda sul full stack non ha senso a meno che tu non chieda anche del tuo stack in particolare, e se lo fai, non c’è bisogno che tu chieda “ sei full stack? ” innanzitutto.
* Il primo motivo per cui non esiste uno sviluppatore full stack è che tutti gli sviluppatori sono full stack. “Full stack” è una designazione priva di significato e ridondante.
Sebbene ogni sviluppatore sia Full Stack, è molto importante rendersi conto che ogni sviluppatore è migliore o peggiore in un’area o nell’altra e alcuni si sono specializzati di proposito solo in una parte dello stack. Tornando all’analogia del dottore, mentre ogni medico è medico a pieno titolo, alcuni sono specializzati e non sono più appropriati per altri scopi medici. Vuoi che un cardiochirurgo ti faccia un intervento chirurgico al cervello? Non credo.
Anche senza una specializzazione mirata in un’area o nell’altra, ogni sviluppatore è semplicemente migliore in un’area piuttosto che in un’altra. Ad esempio, nel mio caso ho frequentato un corso di Laurea in Tecnologie informatiche e negli anni ho lavorato in diversi linguaggi di programmazione, sistemi operativi e database. Se mi chiedi ” sei Full Stack?” e io dico di sì, cosa hai imparato? Niente. Quello che devi davvero sapere è che ho capacità diverse in diversi punti dello stack. Sono molto competente sui database, le mie capacità sono solide. Non faccio grossi errori, ma di certo non sto facendo cantare in perfetta armonia le tabelle del database. Sono al di sopra della media con l’interfaccia utente e il design, ma non sono un designer UI/UX e non posso competere con coloro che sono specialisti in quella specifica area. Tuttavia, nella parte posteriore e centrale dello stack, la mia logica di controllo, logica aziendale e capacità di architettura sono eccezionali. Sebbene io sia “full stack” proprio come qualsiasi ingegnere del software, ho un’affinità per la parte backend e sistema operativo dello stack e per l’architettura.
In un impresa di sviluppo multi-sviluppatore, se vuoi il miglior prodotto software in assoluto, devi smettere immediatamente di credere e assecondare il mito dello sviluppatore full stack.
Se pensi di aver bisogno di ingegneri “full stack” perché vuoi ingegneri intelligenti che comprendano il software end-to-end, allora smetti di dire “full stack” e inizia a dire “esperto”. Inizia a fare le domande giuste. D’altra parte, se hai bisogno di ingegneri full stack perché questo è il tuo modello di sviluppo, stai semplicemente sbagliando. Se hai un team di sviluppatori che lavora l’intero stack in silos, facendo tutto dal database all’interfaccia utente, allora lo stai facendo in modo sbagliato, sbagliato, sbagliato. Sbagliato.
Come la maggior parte delle cose nella vita, ci sono un paio di eccezioni; 1) Sei una start-up o così piccola hai solo uno o due sviluppatori, oppure 2) non hai letteralmente scelta perché il progetto deve essere affidato a una sola persona per forti motivi di business. In questi casi, con tutti i mezzi, parla dello stack completo perché non hai scelta e questa è una strategia praticabile. Ci sono molti sviluppatori là fuori che possono davvero offrire al riguardo (mi piace pensare di essere uno di loro). Ma quando cresci, allora cresci nel modo giusto e rompi la bugia dello “stack completo”.
Quando qualcuno mi chiede se sono un Full Stack, la mia risposta è: “Sono un ingegnere del software”. Se non capisci il mio significato, probabilmente non capisci abbastanza per farmi comunque domande pertinenti sul mio set di abilità.
Non sei ancora convinto? Guardala in un altro modo, il motivo per cui la catena di montaggio ha rivoluzionato la produzione è perché abbiamo imparato che sebbene un artigiano possa fare tutto, non dovrebbe. Se vuoi costruire sedie, non assumi 5 artigiani che sono “sedia piena”. Non dici a ciascuno di loro di uscire e abbattere gli alberi, poi dire a tutti loro di riportare indietro il legno e tagliarlo, poi dire a tutti loro di intagliare il legno, ecc. Quello che fai è mandarne uno a raccogliere legna — la tua migliore mietitrice di legna. Uno imposta una stazione di taglio e la elabora: la tua migliore taglierina. Uno imposta una stazione di intaglio e intaglia: il tuo miglior intagliatore. Una stazione di montaggio e montaggio: il tuo miglior assemblatore. Uno imposta una stazione di finitura: il tuo miglior finisher. Ti specializzi e crei un flusso. Costruisci sinergia. Il software non è diverso. In ogni momento del processo di produzione del software dovresti avere un posto in cui il tuo specialista in quell’area può impegnarsi, fare del suo meglio e andare avanti. Se mi dici che il tuo software non si presta a quel modello, allora metterò in dubbio la tua architettura e la tua leadership. Se vuoi gestire il tuo team di sviluppo come se fosse il 1700, questo è il tuo problema, ma non sorprenderti quando i tuoi 10 “artigiani” completi vengono istruiti da tre specialisti di ingegneria della guida dura guidati da qualcuno che sa come portare a termine il lavoro questo secolo.
Quando chiedi un ingegnere full stack in un ambiente aziendale, puoi anche dire: “Voglio un tuttofare e padrone di nessuno”.
So cosa stai pensando. Stai ancora pensando “ ma voglio davvero sviluppatori full stack! Nonostante tutto ciò che ho appena detto, lo pensi ancora perché per te “pieno stack” significa qualcuno ugualmente e perfettamente abile in tutti i punti dello stack. Buona fortuna. Non solo è impossibile, dopo due decenni di sviluppo del software posso dirti che, supponendo che potrei persino trovare quella persona, non ne ho bisogno né la voglio. Dammi un esperto di database, un esperto di logica di controllo e un artista con l’interfaccia utente, e batterò il tuo team “full stack” in ogni modo, a ogni livello, ogni volta. Ogni volta .
** Il secondo motivo per cui non esiste uno sviluppatore full stack è che nessuno sviluppatore è in pratica full stack nella produzione aziendale. Almeno non se lo stai facendo bene. Possono essere. Semplicemente non dovrebbero esserlo.