Il termine “Full Stack Developer” ha subito una trasformazione radicale che merita un’accurata riflessione.
Iniziamo con la definizione di cosa significhi essere un “Full Stack Developer”, attingendo da ChatGPT:
I "full stack developer" sono sviluppatori software che hanno competenze sia nel front-end che nel back-end dello sviluppo web o di applicazioni software. In altre parole, sono in grado di lavorare su tutte le parti di un'applicazione o di un sito web, dal lato client che viene eseguito nel browser dell'utente (front-end) al lato server (back-end) che gestisce la logica di business e l'accesso ai dati.
Code language: JavaScript (javascript)
Il mio approccio col termine Full Stack Developer
In un determinato periodo della mia carriera, questa definizione rispecchiava perfettamente il mio stato d’animo, era ciò che sentivo di essere e ciò che desideravo che gli altri percepissero quando mi osservavano. Orgoglioso di questo status, inserivo tale qualifica nel mio curriculum vitae, quasi come quando si ottiene un voto eccellente a scuola e si desidera condividerlo con la propria famiglia.
Col trascorrere del tempo ho scoperto che il fascino di questa definizione ha conquistato il cuore di molte persone, principalmente a causa di un pensiero comune: il Full Stack è un programmatore completo e, per le aziende, assumere un Full Stack Developer rappresenta un valore aggiunto.
Se assegno a questo tipo di programmatore un progetto, lui è in grado di gestire in modo autonomo tutti gli aspetti dello sviluppo software: è come avere un intero team di sviluppo racchiuso in un’unica persona!
Col tempo mi sono accorto che questo approccio poteva avere un senso quando i progetti erano semplici e le tecnologie poco numerose.
Oggi il mondo è cambiato, è molto più complesso coprire ogni sfaccettatura di un progetto. Ora essere un “Full Stack Developer” sembra essere sinonimo di lavorare in modo mediocre su tutti gli aspetti di un progetto: non si è un esperto di backend, né di frontend, né di devops; si conoscono le nozioni di UX, UI, SEO, marketing, si conosce un po’ di tutto, ma nulla in modo approfondito, o magari solo una parte.
Proviamo ad traslare il concetto di “Full Stack” sul vostro meccanico: il vostro meccanico, quando c’è un problema alla carrozzeria, non la ripara a martellate, ma coinvolge un carrozziere; quando ci sono problemi di carburazione chiama un esperto di carburatori; quando c’è un problema elettrico, coinvolge un elettrauto.
Allo stesso modo, se il vostro medico sospetta un particolare problema, vi manda da un esperto specializzato in quell’area, che vi sottoporrà a una visita approfondita per formulare una diagnosi e una cura mirate.
Un programmatore “Full Stack” no: è stato scelto per non dover chiamare nessuno, per risolvere tutto da solo.
Questo approccio non è sostenibile, o meglio non è affrontabile pensando che il Full Stack sia un punto di arrivo e non un punto di partenza.
Molte professioni ci fanno comprendere che l’esperto di un particolare ambito è preferibile a un ‘tuttologo’, se vogliamo svolgere un lavoro a regola d’arte.
I programmatori esperti sanno bene quanto sia importante specializzarsi e riconoscono le ore perse nella ricerca di soluzioni che un esperto avrebbe risolto rapidamente.
Nella cultura di massa, e spesso quando si parla con i propri committenti, vi è la presunzione che un programmatore debba essere in grado di fare tutto alla perfezione.
Rispondere con frasi come ‘non è il mio campo, ci vorrebbe un esperto di UI’ viene visto come un segno di debolezza, pur essendo una risposta legittima, professionale e onesta.
- "Sono un Full Stack Developer"
- "Ah, quindi sei un esperto di tutto?"
- "No, non proprio"
Code language: JavaScript (javascript)
Il mercato del lavoro e il Full Stack Developer
Il mercato del lavoro ha iniziato a cavalcare l’onda della richiesta di “Full Stack Developer”, rispondendo a questa esigenza in modi talvolta bizzarri.
Stanno emergendo figure come i “Full Stack Developer Junior”, che si dichiarano “full stack” ma aggiungono il termine “junior” per sottolineare la loro inesperienza. Spesso, questo titolo segue corsi intensivi del tipo “diventa full stack in 6 mesi”.
Non ce ne rendiamo conto, ma ci troviamo di fronte a un problema serio. Da un lato, stiamo mettendo nella testa dei giovani programmatori l’idea di poter coprire autonomamente e facilmente l’intero stack tecnologico, per poi farli scontrare con la cruda realtà: al primo progetto complesso che incontrano, si rendono conto di non essere in grado di gestirlo da soli.
Non è però tutta colpa di questi nuovi programmatori. Esiste anche un problema legato ad alcune aziende che non hanno la capacità di valutare accuratamente il reale livello di competenza delle persone ed assegnano ruoli di responsabilità basandosi sulle poche informazioni in loro possesso.
Rispondere in modo brillante a un colloquio tecnico è una cosa, ma come sostiene saggiamente Linus Torvalds:
<em>Talk is cheap. Show me the code</em>
Code language: HTML, XML (xml)
La qualità del codice e la valutazione del programmatore
Il codice, l’approccio alla risoluzione dei problemi e il modo in cui si affrontano le difficoltà sono gli aspetti che contraddistinguono un programmatore dall’altro, anche se entrambi si definiscono “Full Stack Developer”.
Purtroppo, valutare quanto una persona sia effettivamente in grado di produrre non è affatto semplice. Ho visto programmatori produrre grandi quantità di codice, ma di scarsa qualità, e programmatori che ne producevano poco, ma di altissima qualità.
Per voler citare Antoine de Saint-Exupéry:
La perfezione si raggiunge non quando non c'è più nulla da aggiungere, ma quando non c'è più nulla da togliere
Code language: JavaScript (javascript)
Riuscire a valutare il vero valore di un programmatore è un’abilità molto difficile da acquisire, eppure è una competenza fondamentale per un buon manager. Non è sufficiente valutare il numero di righe di codice prodotte, né il numero di progetti completati o di tecnologie conosciute, soprattutto in un’era in cui le tecnologie cambiano rapidamente e ci aiutano a scrivere sempre più codice in meno tempo.
La quantità di codice non è un indicatore di qualità, anche nel caso in cui funzioni perfettamente e sia coperto da numerosi test funzionanti. Il codice non deve essere valutato al chilo, bensì per la sua qualità, manutenibilità, scalabilità e leggibilità.
Chi può valutare la qualità del codice? Non è facile rispondere a questa domanda.
La risposta più semplice potrebbe essere: un altro Full Stack Developer, ma questa non è la risposta giusta.
Non lo è perché un Full Stack Developer non è un esperto in tutto, ma dovrebbe essere esperto soprattutto nel suo ambito applicativo specifico. Quindi la valutazione del valore di una persona da parte di un Full Stack Developer potrebbe essere influenzata da una serie di bias dovuti alle sue esperienze personali, conoscenze pregresse e competenze acquisite.
Allora, può essere un HR a valutare la qualità del codice? O un manager? Un collega? Un cliente? La risposta giusta è: tutti loro possono contribuire.
Anche in questo caso, però, la valutazione sarà data dalla somma delle esperienze delle varie persone coinvolte, che potrebbero avere opinioni diverse e decretare che lo stesso Full Stack Developer sia un genio in uno stack tecnologico come LAMP, ma un incapace in un altro come MEAN.
Se lavorassimo invece sulla “problem solving attitude”?
Abbiamo quindi metabolizzato che “Full Stack Developer” è un termine non qualificante, interpretabile in modo diverso a seconda del contesto e, soprattutto, molto oneroso dal punto di vista degli aggiornamenti tecnologici necessari.
Proviamo quindi a lavorare su un concetto diverso: la “problem solving attitude”.
Un programmatore che possiede una solida “problem solving attitude” è in grado di affrontare qualsiasi problema, anche se non ne ha mai affrontato uno simile in passato. È capace di analizzare il problema, scomporlo in parti più piccole, trovare una soluzione, implementarla e testarla con successo.
Questo tipo di programmatore non si lascia scoraggiare dalle difficoltà, ma le affronta con determinazione, adattandosi e imparando lungo il percorso. Questa mentalità flessibile e analitica è fondamentale per affrontare le sfide sempre nuove che si presentano nello sviluppo software.
Un programmatore con una solida “problem solving attitude” non ha timore di chiedere aiuto, di ammettere “non so” o “non ci riesco”. Anzi, è in grado di lavorare efficacemente in team, condividendo le proprie conoscenze, imparando da chi ne sa di più e insegnando a chi ne sa di meno.
In questo contesto, un grande bagaglio di esperienze in contesti e tecnologie diverse, in progetti internazionali con tecnologie eterogenee, è sicuramente un valore aggiunto, molto più che essere un Full Stack Developer. Quest’ultimo, infatti, non si specializza nella risoluzione di problemi, ma nella conoscenza approfondita del proprio stack tecnologico specifico, risultando fuori contesto come un giocatore di bowling in una partita di briscola.
Riuscire a risolvere problemi anche in contesti non familiari è un valore aggiunto prezioso all’interno di un team. Ci sarà sempre tempo in seguito per perfezionare la soluzione mettendola nelle mani di un esperto di prodotto, ma la capacità di risolvere problemi in modo autonomo è una competenza inestimabile.
Un programmatore con una mentalità flessibile, analitica e collaborativa, unita a un’ampia gamma di esperienze diverse, sarà in grado di affrontare con successo le sfide più complesse, adattandosi e crescendo costantemente.
Conclusioni
Il mio consiglio è di evitare di dichiararsi “Full Stack Developer”.
Questo termine è ormai troppo inflazionato e, scritto sul CV di un programmatore junior, non aggiunge alcun valore, se non l’ilarità dei programmatori più esperti che lo leggono.
È molto meglio identificare in modo preciso le tecnologie in cui si è esperto e quelle in cui si ha avuto meno esperienza. Per tutti i programmatori è così: puoi essere un mago di Angular, aver scritto delle API REST in Node, ma se un esperto di Backend analizza il tuo codice, probabilmente troverà delle lacune.
Esponendo con chiarezza quali sono le proprie competenze ed esperienze, sarà poi il tuo interlocutore a valutare il tuo effettivo valore, un aspetto che vale molto più di una generica etichetta di “Full Stack Developer”.
Occorre concentrarsi sul costruire una solida “problem solving attitude“, sull’acquisire esperienza in contesti tecnologici diversi, uscendo dalla propria comfort zone, promuovendo un approccio collaborativo al lavoro.
Queste qualità saranno molto più apprezzate di un’autocertificazione come “Full Stack” che rischia di risultare fuorviante o eccessivamente generalista.