Nel mondo dello sviluppo software, la differenza tra un programmatore junior e un senior developer non risiede solo nel numero di anni di esperienza o nella quantità di linguaggi conosciuti. Risiede, soprattutto, in un insieme di abitudini, discipline e approcci strategici che trasformano il semplice "scrivere codice" in "costruire soluzioni software di alta qualità, manutenibili e destinate a durare". Per le Piccole e Medie Imprese (PMI) italiane, comprendere e promuovere queste abitudini all'interno dei propri team di sviluppo, o richiederle ai propri consulenti web, è fondamentale per evitare di accumulare debito tecnico e per garantire che gli investimenti in tecnologia siano fruttuosi nel lungo periodo.

Molti si chiedono: "Perché è così importante scrivere codice 'bene', come farebbe un programmatore senior?" Le ragioni sono molteplici e impattano direttamente sull'efficienza e sulla redditività di un'azienda:

  1. Comprensibilità e Collaborazione: un codice ben scritto è più facile da leggere e comprendere per gli altri membri del team. Quante volte ci si è trovati di fronte a una codebase indecifrabile, con la tentazione di riscrivere tutto da capo? Un codice chiaro è apprezzato e distingue un approccio professionale.
  2. Riduzione del Tempo di Supporto: scrivere codice seguendo best practice riduce drasticamente il tempo necessario per spiegarlo o per fare debugging. Ho lavorato spesso con sviluppatori che, per fretta, trascuravano certi principi e si ritrovavano poi frustrati dalle continue interruzioni dei colleghi. Un codice chiaro e ben documentato "parla da solo".
  3. Longevità del Codice: uno degli aspetti più frustranti per uno sviluppatore software è vedere il proprio lavoro riscritto poco dopo perché incomprensibile o mal strutturato. Seguire pratiche da senior aumenta la "shelf life" del codice, rendendolo un asset più prezioso per l'azienda ed evitando sprechi di tempo e risorse in riscritture non necessarie.

Come sviluppatore software esperto e consulente IT per numerose PMI, ho distillato sei abitudini fondamentali che caratterizzano il lavoro di un vero senior programmer.

Stai cercando un Consulente Cyber Security esperto per la tua Azienda? Nel mio profilo professionale trovi la mia esperienza e le competenze specifiche per aiutarti a proteggere il tuo business. Contattami per una consulenza.

1. Completare Veramente il Lavoro Prima di Proseguire (Finish Your Work)

Sembra banale, ma è un punto cruciale. In molti progetti, specialmente quelli gestiti con metodologie agile come Scrum, c'è un'immensa pressione per dichiarare un task "completato". Spesso si è tentati di dire "sono all'85%, il resto lo sistemo dopo" per rispettare le scadenze dello sprint. Questa pratica, per esperienza diretta su innumerevoli progetti, non fa altro che accumulare debito tecnico personale e per il team.

Nessun altro potrebbe accorgersene inizialmente, ma quel "resto" è lì, nascosto, pronto a causare problemi futuri. Quando riporto lo stato di avanzamento a un project manager o a uno scrum master, l'onestà è fondamentale. Preferisco che il management sia frustrato nel breve termine sapendo lo stato reale del progetto, piuttosto che mentire per poi affrontare conseguenze peggiori. Avere la disciplina di considerare ogni porzione di codice come il proprio marchio personale è essenziale. Come sottolineato da Scott Nimrod in una passata intervista, ogni riga di codice che scriviamo sarà letta da qualcun altro e rappresenterà il nostro biglietto da visita professionale. Avere orgoglio nel proprio lavoro e assicurarsi che sia realmente finito prima di passare al successivo è la prima abitudine di un senior developer degno di questo nome. Per una PMI, questo si traduce in software più stabile, meno bug e minori costi di manutenzione imprevisti.

2. Far Rispettare gli Standard di Codifica (Enforce Coding Standards)

Un'altra caratteristica distintiva dei programmatori senior è la loro insistenza nel far rispettare standard di codifica condivisi. Fortunatamente, oggi la tecnologia ci viene in aiuto. A differenza di 15 anni fa, la maggior parte degli IDE moderni come VS Code, ma anche Emacs e Vim, e i linguaggi stessi, offrono strumenti di auto-formattazione. Scrivi il tuo codice, e al momento del salvataggio il file viene automaticamente formattato secondo regole predefinite (es. indentazione, posizione delle parentesi graffe, spaziature). Questo è particolarmente vero per linguaggi come PHP, con gli standard PSR (PHP Standards Recommendations), o per JavaScript con tool come Prettier o ESLint.

Se l'auto-formattazione non è integrata, esistono plugin per IDE più "corposi" come Visual Studio o PHPStorm/IntelliJ IDEA che permettono di definire e applicare standard di formattazione per l'intero team.

Lavorare su codebase dove ogni sviluppatore segue uno stile diverso è incredibilmente frustrante e inefficiente. Come consulente freelance, quando vengo chiamato per un audit su un progetto esistente, è spesso palese dove mani diverse hanno scritto codice con stili eterogenei.

Ritengo ancora fondamentale avere un documento (una pagina Wiki, un file Markdown nel repository) facilmente accessibile che definisca chiaramente gli standard di codifica del team. Se si adotta uno standard open source consolidato (come PSR-12 per PHP o lo stile di Airbnb per JavaScript), è ancora più semplice: basta linkare la documentazione ufficiale. Nelle mie consulenze per PMI che sviluppano con Laravel o Symfony, l'adozione di questi standard è uno dei primi passi per migliorare la qualità e la collaborazione.

Ecco un banale esempio concettuale in PHP che illustra la differenza:

Non Standard:

function esempioMalfomattato($param1,$param2){if($param1==true) {echo 'Condizione Vera';} else { echo 'Condizione Falsa';}}

Standard (es. PSR-12):

function esempioFormattato(bool $param1, string $param2): void
{
    if ($param1 === true) {
        echo 'Condizione Vera';
    } else {
        echo 'Condizione Falsa';
    }
}

La differenza in leggibilità e manutenibilità è evidente.

3. Documentare i Pattern in Modo Disciplinato (Document Patterns)

I programmatori senior comprendono il valore della documentazione dei design pattern utilizzati in un progetto. All'inizio di un nuovo software, il team discute e sceglie una serie di pattern – alcuni sono noti e open source, altri possono essere specifici del progetto. Specialmente in ecosistemi complessi come React (dove si sceglie React solo per il rendering e si integrano molte altre librerie e pattern per la gestione dello stato, il routing, ecc.) o in applicazioni Laravel / Symfony che implementano architetture Domain-Driven Design (DDD) o CQRS, avere un riferimento centrale è vitale.

Un singolo documento Markdown o una pagina Wiki che elenchi tutti i pattern concordati è un asset di valore inestimabile.

Questo documento diventa un punto di riferimento durante le code review: se uno sviluppatore software del team utilizza un pattern non concordato, il feedback non è arbitrario ("non mi piace"), ma basato su decisioni condivise ("ricordi la pagina dei pattern? Questo non è tra quelli approvati").

  • Pattern Standard/Framework: se si utilizza un pattern già parte di un framework (es. i middleware di Laravel, il Service Container di Symfony, o gli event listener), includere un link alla documentazione ufficiale o a un tutorial esplicativo è una buona pratica. Evita che i membri del team cerchino su Google esempi che potrebbero non essere allineati con l'uso specifico che ne fate.
  • Pattern Nuovi/Custom: se si introduce un pattern custom (per principi DRY - Don't Repeat Yourself, o per semplificare la scrittura del codice), non basta una demo durante una brown bag lunch o una riunione su Slack. È obbligatorio creare una documentazione specifica che illustri:
    • Lo scopo del pattern.
    • Quando usarlo.
    • Quando NON usarlo (altrettanto importante).
    • Esempi di codice (snippet) che mostrino come applicarlo in scenari comuni.

Come consulente IT, una delle cose che i miei clienti apprezzano di più è la mia attenzione maniacale alla documentazione. Gli altri sviluppatori del team, specialmente quando entro in un progetto come esterno, amano lavorare con me perché hanno questi riferimenti chiari. Purtroppo, molti concetti come il "codice auto-documentante" sono spesso una scusa per non documentare. Un vero senior developer ha la maturità e la professionalità di prendersi il tempo per documentare le decisioni e i pattern del progetto. Per una PMI, questo si traduce in minor dipendenza da singoli individui e più facile onboarding di nuovi sviluppatori freelance o dipendenti.

4. Revisionare Immediatamente Ogni Nuovo Pattern Introdotto (Review New Patterns Promptly)

Un senior developer sa che introdurre un nuovo pattern o una nuova libreria significativa (es. una diversa libreria per l'accesso al database MySQL o PostgreSQL, o un nuovo message broker come Redis o RabbitMQ in un'applicazione Symfony) senza discuterne con il team è rischioso.

Ho visto progetti dove uno sviluppatore, magari con le migliori intenzioni, introduceva una nuova modalità di lavoro e la implementava gradualmente in varie parti della codebase per mesi, senza mai comunicarlo ufficialmente. Solo in seguito si scopriva che qualcun altro nel team aveva già valutato (e scartato) quel pattern per validi motivi (es. incompatibilità con requisiti futuri, problemi di performance noti, o perché semplicemente non era la soluzione migliore per quel contesto specifico). Questo non solo fa perdere tempo, ma può minare la coesione del team.

L'approccio corretto è:

  1. Implementare un Proof of Concept (POC): scrivere solo il codice strettamente necessario per dimostrare il nuovo pattern in azione.
  2. Presentarlo al Team: organizzare una breve sessione per mostrare il POC e spiegare i benefici attesi.
  3. Chiedere Feedback: il team avrà sicuramente opinioni, suggerimenti per migliorarlo, o solleverà potenziali problemi.
  4. Ottenere il Buy-in: una volta che il team è allineato e supporta la nuova soluzione, si può procedere.
  5. Coinvolgere il Team nell'Adozione: invece di accollarsi l'intero lavoro di integrazione, si può coinvolgere l'intero team nell'adottare incrementalmente il nuovo pattern.

Nelle PMI, dove le risorse sono spesso limitate, l'introduzione non coordinata di nuove tecnologie o pattern può frammentare la codebase e gonfiare il debito tecnico. Come backend architect, facilito queste discussioni tecniche per assicurare che le scelte siano ponderate, condivise e documentate. È un passo fondamentale per evitare che un progetto PHP diventi un "Frankenstein" tecnologico.

5. Non Creare User Story Separate per il Refactoring (Don't Create Separate Refactoring Tickets)

Questa potrebbe sembrare una pratica controversa, ma i senior developer esperti sanno che qualunque cosa venga etichettata esplicitamente come "refactoring" in un sistema di ticketing (come Jira) è a forte rischio di essere deprioritizzata o eliminata dal management, specialmente quando le scadenze si avvicinano.

La qualità del codice è una responsabilità intrinseca dello sviluppatore software. Come professionisti, dobbiamo, nei limiti del possibile, prevenire che il management prenda decisioni che danneggino il progetto a lungo termine, sia attraverso l'accumulo di debito tecnico sia creando software difficile da estendere e manutenere.

Quando mi accorgo che è necessario un refactoring (es. modernizzare una vecchia applicazione PHP 5.x a PHP 8.x con Laravel, o migliorare la gestione dello stato in un'applicazione React passando a Redux):

  • Non creo mai un ticket o una user story separata per il refactoring.
  • Non stimo mai uno sforzo di refactoring isolato.
  • Invece, discuto con il resto del team di sviluppo e pianifichiamo come distribuire questo sforzo in modo incrementale.

L'incremental refactoring è una competenza preziosa. Molti sviluppatori pensano al refactoring come a un'attività big-bang: "dobbiamo fermarci per due settimane/un mese e rifare tutto". Questo approccio è raramente accettato dal business. È molto più intelligente decidere che, per ogni nuova feature implementata:

  1. Si utilizzerà il nuovo pattern o la nuova architettura concordata.
  2. Si dedicherà una piccola porzione di tempo (inclusa nella stima della feature) per rifattorizzare una o due feature esistenti adiacenti o correlate, portandole al nuovo standard.

La chiave è non chiamare questa attività "refactoring" nelle stime o nei report per il management. È semplicemente parte del lavoro necessario per implementare la nuova feature in modo robusto e sostenibile. Come professionisti, non possiamo permettere che la qualità sia un optional. Questo approccio è particolarmente utile quando si affronta il debito tecnico in una PMI, come spiego più nel dettaglio in "Modernizzare applicazioni legacy in PHP: una guida pratica con Laravel e Symfony per la sicurezza e la crescita della applicazione web". Se la tua azienda sta lottando con codice obsoleto o difficile da mantenere, la mia esperienza come consulente IT può aiutarvi a definire una strategia di modernizzazione graduale ed efficace.

6. Stimare Tempo Extra per Imprevisti e Documentazione (Estimate Extra Time)

L'ultima abitudine, ma non meno importante, è quella di includere sempre del tempo extra nelle stime per riunioni di progettazione impreviste e per la scrittura della documentazione necessaria. È una situazione comune: si inizia a implementare una feature e ci si imbatte in incertezze o in aspetti non completamente definiti nei requisiti, che richiedono ulteriori discussioni o la creazione di nuova documentazione.

La cosa peggiore è dover tornare da un project manager o da uno scrum master e dire: "Ehi, ho bisogno di aggiungere una nuova user story per scrivere questo documento che non avevamo previsto". È quasi una garanzia di micromanagement.

Consiglio sempre di gonfiare leggermente le stime, non solo per coprire l'incertezza intrinseca dello sviluppo e le riunioni, ma specificamente per la documentazione. Se si vuole mantenere alta la qualità del codice e la produttività del team, è necessario proteggere i propri impegni con il tempo extra che si sa essere necessario per scrivere codice eccellente e professionale, inclusa la sua documentazione. Una PMI che comprende questo accetta stime realistiche che portano a risultati migliori e più duraturi.

Abitudini come percorso, non come sprint

Adottare queste sei abitudini non trasformerà magicamente uno sviluppatore junior in un senior developer dall'oggi al domani, ma è un percorso che, se intrapreso con disciplina e professionalità, porta a risultati tangibili. Per le PMI, avere nel proprio team (o avvalersi di consulenti come il sottoscritto) figure che incarnano questi principi significa costruire asset software robusti, scalabili e capaci di supportare il business nel tempo, invece di accumulare debito tecnico che prima o poi presenterà il conto.

La qualità del codice, la chiarezza degli standard, la completezza della documentazione, la revisione collaborativa dei pattern, l'integrazione del refactoring nel flusso di lavoro quotidiano e una stima realistica degli sforzi sono tutti elementi che contribuiscono a un ambiente di sviluppo più sereno, produttivo e, in ultima analisi, economicamente vantaggioso.

Ultima modifica: Venerdì 6 Giugno 2025, alle 10:10