Sono passati solo 20 anni. Ho cominciato in una piccola web agency della Brianza grazie ad Alessandro e Livio, con cui ho condiviso diversi anni di lavoro. In questi 20 anni ho lavorato per una big della Silicon Valley, il più grande sito di annunci d’Italia, ho girato il mondo, e ancora oggi mi sto divertendo parecchio.
Qualcosa di buono in questi 20 anni di sicuro l’ho combinato.
Di quel buono che ho imparato, ti regalo 256 consigli: molti sono ovvietà, altri sono meno ovvi, altri sono semplicemente constatazioni personali. Magari a volte mi ripeterò un po’ e non sempre applico questi consigli nel mio lavoro di tutti i giorni, ma il titolo clickbait doveva fartelo capire, no?
Magari in futuro approfondirò qualcuno dei temi proposti… Se hai tempo leggi anche questo articolo, che mi ha ispirato nel creare il mio.
Cose che ho imparato scrivendo codice…
- Meno codice scrivi, meglio è
- Il miglior codice è quello che non devi scrivere (o che hai dovuto cancellare)
- Se hai capito come risolvere un problema, il codice che scriverai sarà banale
- Leggere i test è il miglior modo che hai per capire il codice scritto da un’altra persona
- Se devi lavorare con codice scritto da qualcun altro e i test non ci sono, una sessione di pairing dove scrivete dei test sarà essere utile a entrambi
- Se i test non ti hanno ancora salvato il culo, lo faranno presto
- Visto che i test ti salveranno il culo, devono farlo nel minor tempo possibile
- Coverage al 100%? Una cazzata
- La piramide dei test non è una cazzata
- Come lo testi un cronjob? Ecco.
- Testa i casi limite, sono quelli che ti faranno perdere il sonno
- Se un bug si ripresenta più volte, scrivi un test per evitarlo
- Piuttosto che avere un test “flaky” meglio non averlo del tutto quel test
- Code review, tempo “alla lavagna” e pairing sono momenti importantissimi
- Il tempo che spendi scrivendo la descrizione di un ticket o di una PR non è sprecato: ti aiuta a suddividere il problema (prima) e a rifletterci un’ultima volta (poi)
- Quando scrivi il testo di un ticket o di una PR fatti aiutare dagli LLM, ma rileggiti sempre almeno una volta
- A volte fissare il muro per un po’, fare una doccia, portare fuori il cane (o simili) saranno gli unici modi che hai per risolvere un problema
- Impara il prima possibile a fare stime precise dei tuoi task (su questo sono diventato bravo solo di recente)
- Task piccoli sono più facili da stimare: divide et impera
- Impara a dare nomi precisi alle “cose” (variabili, classi, tipi, funzioni, interfacce…)
- I log non mentono mai
- Impara a leggere, a greppare, e a filtrare i log e gli stacktrace: è obbligatorio
- Non sottovalutare mai un warning
- Un log rotto è peggio di un log mancante
- “A/B testing tutta la vita”: che parlino i numeri
- “Feature toggling tutta la vita”: almeno dormi sereno
- Ok le feature flag, ma se per attivare una funzionalità ti servono 3 feature flag, beh…
Hai sbagliato tutto - “Finito è meglio che perfetto”
- Sarà anche finito, ma devi farlo diventare quasi perfetto il prima possibile
- Rilasciare spesso è un must
- Ogni deploy senza monitoring è un atto di fede
- Pipeline di CI/CD infinite? Red flag
- Test troppo instabili? Red flag
- Build in locale di durata infinita? Red flag
- Codice prolisso senza motivo? Red flag
- Tooling lento e troppo complesso? Red flag
- L’onboarding di un nuovo sviluppatore sul progetto è complesso e lungo? Red flag
- Automatizza il più possibile (salvataggi, linting, ecc…)
- Se una cosa va fatta più di 2 volte, rendila uno script
- Quando fai review di una PR, leggi anche quello che non è cambiato
- Se una variabile cambia troppe volte, hai un problema
- Le PR minuscole/quickwin danno molta soddisfazione e si sommano nel tempo migliorando la qualità generale della codebase. Non farti scappare l’occasione di un fix veloce…
- La banda, la CPU e la memoria infinita non esistono, anche se a volte sembra sia così
- La latenza di rete esiste. Crea il tuo software come se il backend fosse dall’altra parte del mondo
- La ricorsione è talmente affascinante che, per descriverla, finisci per usare la ricorsione
- Quella funzione ricorsiva così figa… Beh, meglio riscriverla con un
for. I tuoi colleghi ti ringrazieranno - Piccolo è bello: i file che crei devono essere piccoli, le funzioni che scrivi devono essere piccole, le PR devono essere piccole
- Le immagini in una PR aiutano più di mille parole. Un video in una PR aiuta più di 1000 immagini
- Un codice sicuro è spesso un codice noioso. Meglio noioso che bucato
- Scrivi codice che capirai anche tra 6 mesi, dopo una nottata di merda
- Il tuo codice deve essere leggibile come un racconto breve: deve avere un inizio, raccontare la storia di quello che fa e finire in modo chiaro
- La documentazione automatica è importante, ma non deve diventare un’ossessione
- Lavora con linguaggi fortemente tipizzati, ma divertiti con linguaggi dalla tipizzazione debole (se sai quel che stai facendo)
- Cerca di scrivere funzioni pure
- Evita le dipendenze circolari
- Ogni tanto misura cronometro alla mano le performance del tuo codice
- Se un’operazione richiede più di mezzo secondo, sappi che l’utente che l’aspetta si è già rotto le scatole
- Se crei pagine web, devono essere responsive
- La dependency injection è una bella cosa
- I commenti nel codice, anche quelli “banali”, servono sempre a qualcosa, non mi convincerai del contrario
- Vedi sopra. A volte i commenti banali mi servono come “ancore”
- Non ti fidare al 100% dei commenti che trovi nel codice, se non li hai scritti tu
- Le variabili o costanti che indicano un’unità di misura devono contenere un riferimento all’unità usata.
const DOG_WEIGHT_KG = 5; - Se usi una
reduce()(o un suo equivalente) la devi spiegare a chi verrà dopo di te, non me ne frega nulla di quanto sia semplice - Forse (in realtà senza forse) quella
reduce()può diventare unfor - “Simplicity is the ultimate sophistication” (cit.), scrivi codice semplice. Sempre.
- Vedi sopra. DRY/KISS/YAGNI/SRP/PENGY. Dovrebbero essere il tuo mantra
- Evita acronimi inventati. Non stai scrivendo codice per i militari
- Le eccezioni vanno gestite. Sempre
- Mettere tutto il codice dentro un
try/catchnon è gestire le eccezioni - Un bugfix senza test è solo una teoria
- Chi misura il tuo lavoro in righe di codice, quadratini verdi su github o altre cose simili è un coglione
- Se proprio devi, misura il tuo lavoro in righe di codice eliminate
- Nel 2030 probabilmente non scriveremo molto codice, spiegheremo alle macchine come tradurre requisiti in codice, faremo code review e “pairing” con le macchine. Impara ad usare gli strumenti AI oggi.
- C’è una libreria per quasi tutto. Non reinventare la ruota, se puoi
- L’autenticazione è difficile. Se puoi non scriverla da zero
- Prima di usare una libreria assicurati di aver capito quello che fa e come lo fa. Assicurati che l’ultimo commit sul repo non sia stato fatto 10 anni fa
- Se una libreria ha 10K stelle ma 200 issue aperte da 2 anni… passa oltre
- A fine mese incassa lo stipendio e paga un po’ di debito tecnico se puoi
- Google e StackOverflow erano i tuoi migliori amici. Ora ci sono gli LLM
- Puoi usare tutti gli LLM del mondo, ma senza basi forti non vai da nessuna parte
- Il codice evolve, migliora (o peggiora) con il tempo. Il codice che peggiora col tempo è codice morto. Chiedete a Charles Darwin cosa ne pensa…
- 2 spazi (al massimo 4), nessuna tab
- Quelli che “no if”… Boh. Vedi https://www.defusetheifstrategy.com/
- “Talk is cheap, show me the code” (cit.)
- Un font “per programmatori”, con le legature se possibile, ti cambia la vita, vedi https://www.programmingfonts.org/
- Cloud bello, ma il ferro spesso costa meno
- Non sottovalutare mai SQLite
- Non sottovalutare mai Redis
- Usa un ORM, ma…
- Usa un ORM solo quando conosci SQL
- Se una query è lenta, chiediti se il problema è negli indici o nella query stessa
- I bug più gravi non sono quelli che fanno crashare il software, ma quelli che fanno perdere soldi
- Il codice che dipende dal fuso orario, dall’i18n o dalle date prima o poi ti tradirà
- Se una PR contiene più di 15 file cambiati, spezzala in più PR
- Impara almeno un linguaggio funzionale
- Fai qualche leetcode ogni tanto. Rinfresca le tue basi…
- Forza i conventional commits sui tuoi repo
- Impara bene almeno un paio dei framework più utilizzati nel tuo ambito
- Monoliti VS Microservizi: meglio un monolite fatto bene che microservizi fatti “perché fa figo”, meglio un monolite quasi decente che microservizi quasi decenti. E la maggior parte delle volte i microservizi non ti servono davvero
- Ogni microservizio deve poter fallire senza compromettere nient’altro che se stesso
- Se non hai bisogno di un message broker, non usarlo. Aggiunge complessità, latenza e problemi che prima non avevi
- Se usi un message broker, ogni consumer deve poter crashare senza far crollare tutto
- Blockchain? No
- Se annidi 4
forti serve un ripasso di questo - Le cose si spaccano nei modi più imprevedibili
- A meno di lavorare in ambiti specifici, se spacchi qualcosa non ammazzi nessuno, rimboccati le maniche e risolvi il tuo problema
- Modali, finestre, sidepanel, ecc… nel browser? Fanno schifo. Prima te ne rendi conto, meglio è
- Impara Docker, se non lo conosci
- Impara a creare e gestire un cluster kubernetes, anche piccolo. Usa minikube
- Fail Fast, Circuit Breaking… Se non sai cosa sono… Studiali
- Prima o poi ti servirà un sistema di rate limiting. Meglio prima
- Un software veloce e fluido vale più di mille funzionalità inutili
- Il codice legacy spesso è codice noioso che funziona
- Non scrivere codice per “farti notare” o per sembrare “smart”, scrivilo per essere utile
- Il tuo ambiente di sviluppo locale deve essere facilmente riproducibile (ad esempio, usa
docker-compose) - Una volta mergiato, il tuo codice diventa di tutti
- Una volta mergiato, il codice di altri diventa anche tuo
- Se una cosa è configurabile, qualcuno la configurerà male
- I parametri di configurazione vanno documentati, non indovinati
- Il codice non fixerà mai un problema a livello di prodotto o di business
- L’accessibilità non è una feature: presto sarà un requisito legale
- La privacy non è una feature: è un requisito legale
- Se hai paura di deployare, hai sbagliato qualcosa prima
- Non fare refactor se non hai test a supporto
Cose che ho imparato lavorando con le persone…
- A volte i migliori sviluppatori sono arroganti sul lavoro, ma fuori dall’ufficio sono persone molto umili
- Non sei pagato per scrivere codice. Sei pagato per risolvere problemi
- Se ricevi notifiche slack ogni 5 minuti, non stai lavorando
- Un buon mentore è qualcuno che ti fa domande, non che ti dà risposte
- Se pensi di essere arrivato (o arrivata), ho una brutta notizia per te…
- C’è sempre spazio per imparare meglio l’inglese
- Se sai un’altra lingua oltre all’italiano e all’inglese… Meglio!
- Le promozioni non vanno solo a chi le merita. Vanno a chi le sa chiedere
- Se lavori da remoto, devi essere un eccellente scrittore
- Non lavorare in pigiama. Il cervello lo capisce
- Il micromanagement a distanza è ancora peggio di quello in ufficio. Non accettarlo
- Un team pieno di “brillanti solisti” fa schifo
- Dire: “non lo so” non è un peccato mortale
- Ok la storia del rilascio di venerdì… Ma non rilasciare neanche di lunedì mattina. Tutti sono ancora mezzi rincoglioniti
- Parla con le persone anche senza un motivo tecnico. Fa bene a te e a loro
- Un buon manager protegge il team
- Le pause vanno programmate. Altrimenti non le fai
- Scrivere codice da solo è facile. Farlo con altri è il vero mestiere
- Essere un/una manager anche solo decente è difficilissimo
- Un cattivo manager può rovinare un ottimo team nel giro di qualche mese
- C’è chi diventa manager solo perché è al posto giusto nel momento giusto, non pensare che il tuo manager abbia meriti particolari
- Non usare lo stesso avatar per dieci anni. Aggiorna anche la tua immagine, ogni tanto
- Più le aziende parlano di Diversity & Inclusion, meno la praticano davvero
- Le “risorse umane” sono pagate dall’azienda: lavorano per l’azienda, non lavorano per te
- Se hai delle questioni sul lavoro e pensi possa essere utile, non aver paura di chiedere un consiglio ad un legale esperto in diritto del lavoro
- Stai attento al collega simpatico che racconta sempre barzellette. Le cose sono due: o è un coglione o vuole fregarti. A volte entrambe le cose.
- Lavorare tanto non è lavorare bene
- Lavorare bene non significa non sbagliare mai
- Cambia qualcosa nel tuo CV una volta a settimana. Anche una cosa piccolisima
- Essere puntuali e mantenere le promesse fatte è metà del lavoro
- Fare domande scomode ti renderà antipatico
- Fare domande scomode è necessario
- Il gossip è imprescindibile: “sapere è potere”
- Se fai gossip, sarai oggetto di gossip a tua volta. È un sacrificio necessario
- Ci sono persone “chiave” in ogni azienda. Bisogna farsele amiche il prima possibile
- Non dire sempre di sì
- A volte devi dire di sì anche se non vuoi
- Se ti tocca assumere qualcuno per lavorare con te, cerca di valutarne attentamente anche le soft skill, è un errore che ho fatto solo una volta, ma che sto pagando ancora oggi
- Se lavori su web, non usare lo stesso browser che usano tutti i tuoi colleghi
- Non fare “blaming” sulle persone, fallo sui processi
- Non serve un ufficio per lavorare bene insieme
- Andare in ufficio ti rende “visibile”
- Se lavori da remoto, fai in modo che il team e l’azienda “ti vedano” e sappiano su cosa stai lavorando
- Come rendersi visibile? Le piccole cose si sommano: sii educato/a, disponibile e anche un po’ strano/a se lo sei nella vita normale
- Vai alle conferenze, ai meetup, agli eventi per sviluppatori, conosci e parla con le persone
- Parlare alle conferenze è meno difficile di quel che sembra
- I fullstack developer non esistono più, non ti definire tale
- Alle aziende i fullstack piacciono perché hanno la sensazione di pagare uno sviluppatore per averne 2. In realtà ne hanno 0.90
- Non ti definire mai “smanettone”: è svilente
- Le interruzioni sono velenose. “Napo hai un momento?” e puff… È passata un’ora
- Se lavori con persone in diversi fusi orari, sfrutta questa cosa a tuo vantaggio: apri le PR quando stacchi, ad esempio, così la mattina troverai commenti e/o approvazioni già pronte
- Prima o poi, tutti si ritrovano un collega tossico. Impara a gestirlo
- Se una discussione tecnica dura più di 10 messaggi in chat, organizza una riunione per parlarne
- Rispetta gli standard e i processi del team, specie se sei nuovo
- Chiedi aiuto quando serve
- Riconosci il merito degli altri, ma pretendi che gli altri facciano altrettanto con te
- Non prendere le critiche al codice come critiche personali
- Se una call di 20 minuti può essere un’email, scrivila
- Se un’email può essere una call di un paio di minuti, fai quella call
- Le call senza agenda sono una perdita di tempo
- Gli utenti non leggono, al massimo scansionano
- Se l’utente non riesce a fare una cosa col tuo software, la colpa è tua
- Gli utenti riusciranno a fare cose che non avevi previsto con il tuo software
- Le dimissioni di un collega possono dirti molto sullo stato dell’azienda
- Se uno standup dura più di 15 minuti… Protesta!
- Se i meeting tecnici sono pieni di gente non tecnica… Protesta!
- L’azienda per cui lavori è importante, ma il tuo network lo è di più
- Se un collega viene lasciato solo a gestire una crisi, il team ha fallito
- Il silenzio prolungato in un team è quasi sempre un segnale di problemi
- Se tutti sono d’accordo, probabilmente nessuno ha detto quello che pensa davvero
- Essere chiari è più importante che essere gentili
- Se una regola la rompi ogni volta, è sbagliata. Cambiala o eliminala
- Se una regola è lì “perché si è sempre fatto così”… Trova e risolvi il problema che l’ha introdotta.
- Se una regola sembra assurda, c’è sicuramente una storia divertente dietro…
- Il team non è la somma dei membri, ma la qualità delle relazioni tra loro
- Le lamentele ripetute sono un problema di leadership
- Non aspettare di “sentirti pronto” per cambiare lavoro. Non lo sarai mai al 100%
- Quando fai una domanda tecnica, spiega anche cosa hai già provato. Le persone ti aiuteranno più volentieri
- Molti usano scrum come scusa per non lavorare
- Se proprio devi usare scrum, adattalo al tuo team, non adattare il tuo team a scrum
- Uno scrum master è più utile di quello che pensi
Cose che ho imparato lavorando con i computer…
- Usa più di uno schermo
- Non usare più di due schermi
- Se puoi, usa un monitor con refresh rate elevato. I tuoi occhi ringrazieranno
- Usa una scrivania regolabile in altezza (manuale va bene, elettrica meglio)
- Usa una sedia di qualità
- Usa una tastiera di qualità, non è un vezzo
- Non usare una tastiera meccanica 40%, quello sì che è un vezzo
- Usa un mouse di qualità (e saluta il tunnel carpale)
- Sulla macchina che usi per lavoro devi avere i pieni poteri (root o admin)
- Pretendi hardware di un certo livello, se devi usarlo per lavoro
- La RAM del tuo computer non è mai abbastanza
- Le luci RGB non ti fanno scrivere codice migliore
- SSD. Al massimo sugli HDD facci i backup
- Meglio un editor semplice che un IDE con 11000 funzioni che non userai mai
- Cerca di conoscere molto bene l’IDE o l’editor che stai usando… Soprattutto le scorciatoie da tastiera.
- Meno usi il mouse, meglio è
- Le cuffie? Le migliori che riesci a permetterti. Personalmente ho una preferenza per le Sony, con cavo.
- Non puoi usare le cuffie? Usa una soundbar!
- Usa un microfono e una webcam di qualità: è un gesto di educazione e serve davvero!
- Non dovresti usare il computer aziendale per cose personali (e viceversa), ma comunque succederà
- Se l’azienda per cui lavori è minimamente strutturata, installerà uno spyware sul tuo computer aziendale, spacciandolo per “gestione remota”. Comportati di conseguenza
- Schermo, browser e terminale devono essere “distraction free”
- “È sempre colpa del DNS” (cit.)
- Wireless è comodo, ma non ho mai dovuto ricaricare un cavo… 😂
- Non salvare password nei browser. Fallo nel password manager
- Se il tuo router ha più di 5 anni, probabilmente il vicino 70enne ha un Wi-Fi più veloce del tuo
- Se ti sei organizzato bene non hai bisogno di un backup diretto del disco del tuo computer: tutto sarà a portata di NAS (o di Cloud) in caso di problemi
- Devi avere sempre a disposizione una VPN, anche se non la usi mai
- Usa una VPN quando ti connetti a reti pubbliche
- Non sottovalutare mai il potere di un clipboard manager
- Un computer ben tenuto dura anni. Uno incasinato è vecchio dopo 6 mesi
- Se ti muovi spesso, compra un secondo alimentatore e lascialo fisso nello zaino
- Se usi spesso solo un portatile, usa comunque almeno un mouse. Il touchpad ti rovina le mani
Constatazioni personali
- Ci sono persone con cui non posso e non voglio lavorare, nonostante il mio massimo impegno. Una sono stato costretto ghostarla ovunque, anche sul posto di lavoro
- Le aziende non sono fedeli a te, non esserlo nemmeno tu. Mai credere alla “grande famiglia”
- Non saremo una grande famiglia, ma sono comunque un team player
- Sindrome dell’impostore: ho lavorato con persone 10 volte migliori di me, ma ho lavorato anche con persone 10 volte più scarse di me. Serve concentrarsi solo sulle prime
- Spesso ho opinioni forti sul progetto/prodotto per cui lavoro: non sono una “code monkey”
- Spesso ho opinioni forti e basta, fattele andare bene, perché se ho un’opinione forte è solo perché me ne frega qualcosa, piuttosto preoccupati se sto zitto
- Devo avere un sacco di cazzate sulla scrivania
- Mi serve la musica per lavorare
- Se ho le cuffie in testa non mi rompere le scatole
- macOS mi piace
- Linux mi piace, ma non come macOS
- Tra altri 20 anni (O 10?) non farò più questo lavoro o lo farò in una maniera completamente diversa
- Mi importa più del codice che del tooling
- Scrivo ancora codice nel tempo libero, ma sempre meno con il passare degli anni
- A volte mi piace andare in ufficio, ma di solito sono molto meno produttivo che a casa
- La comfort zone è una merda
- Un team che ride insieme lavora meglio e tendo a far ridere gli altri, ma non voglio essere il giullare del team