Il ruolo di sviluppatore Senior è divenuto sempre più importante, di pari passo con la continua e rapida evoluzione del settore Tech, e molti programmatori faticano ad esser riconosciuti come tali. Sei già un Senior? E cosa ci si aspetta da te in quanto tale?
A dire il vero, rispondere a queste domande non è semplice e potremmo ricevere risposte differenti a seconda delle aziende o delle persone a cui le poniamo. In questo articolo cercherò di condividere il mio punto di vista, in base alle mie opinioni ed esperienze personali.
Veniamo al dunque! Spero che questo articolo possa aiutare gli ingegneri nella loro crescita professionale ed i manager ad assumere persone qualificate, a definire le aspettative ed a supportare i propri gruppi di lavoro.
Senior? Si, ma quanto?
La prima annotazione che mi permetto di fare è che non farò distinzione tra i vari livelli di anzianità, come possono essere quelli di Staff, Ingegnere Capo o Architetto del Software.
Mi preme, più che altro, concentrarmi su quali siano le caratteristiche per essere riconosciuto ed apprezzato in qualità di “Senior”, in generale. Ok, Luciano, ma che diamine intendi per “Senior, in generale”?!? Le responsabilità principali di un ingegnere senior sono quelle di far progredire i progetti e le persone.
Alcuni amano definire questa figura professionale come un moltiplicatore di forze, il che è, bada bene, ben diverso dal definirlo un ingegnere che ne vale 10: Infatti, lo sviluppatore senior non è né un eroe solitario né una rockstar, un prestigiatore o un mago dalla lunga barba grigia, né tantomeno un unicorno o chissà che. E’ innanzitutto uno che sa giocare in squadra.
Più facile a dirsi che a farsi, certo, ma di quali competenze, compiti e mentalità stiamo parlando? Quale approccio mentale serve? Cosa serve in più, rispetto ad un ingegnere junior o di medio livello, per mandare avanti le cose?
Sono già un Senior?
Il primo mito da sfatare è che essere un Senior non dipende necessariamente da quanto uno abbia lavorato nel settore.
Più anni di esperienza ≠ senior
Ovviamente, essere in giro da un po’ sicuramente aiuta in quanto aumentano le probabilità che tu abbia affrontato diverse sfide e ne abbia tratto preziosi insegnamenti. Ma non diciamo che “non sei senior se non hai almeno 5 anni di esperienza” o frasi del genere.
Un ragionamento di questo tipo non può funzionare. Allo stesso modo, essere un senior non è nemmeno una questione di età, invecchiare non comporta automaticamente che diventi più bravo nel tuo lavoro… Il senior non è uno che ha accumulato 40 anni di esperienza!
Nel corso della mia carriera ne ho avuto la conferma diverse volte.
Ho lavorato con colleghi molto giovani e al tempo stesso molto appassionati e competenti, che definirei senza ombra di dubbio dei senior. Mentre ho avuto a che fare con colleghi più anziani e con molti anni di esperienza sul curriculum ma il cui contributo, sia al progetto che alla squadra, era prossimo allo zero se non addirittura negativo. Non definirei mai questi ultimi come senior, sebbene la società per cui lavoravo li considerasse come tali…
Quali competenze servono?
Se gli anni di esperienza non sono importanti, cosa conta davvero?
Ricorda, tutto ruota sul far progredire i progetti e far crescere il tuo team e, per farlo, servono alcune competenze specifiche, ma di quali competenze stiamo parlando?
Per quanto riguarda le competenze tecniche, ci si aspetta che un programmatore senior abbia delle solide basi di linguaggi di programmazione, framework, database, architettura dei programmi eccetera. Tuttavia le competenze tecniche non sono l’ unica cosa che ne definiscono il ruolo. Le cosiddette soft skills,come possono essere la comunicazione, l’attitudine al comando o la propensione alla risoluzione dei problemi sono altrettanto importanti.
Mi spingo a dire che per un senior tali competenze forse sono addirittura più importanti rispetto alle quelle tecniche. Perché non importa solamente quello che sai, importa anche come tu sia in grado di trasmetterlo e permettere agli altri di sfruttare il tuo sapere. Come condividere la tua esperienza, sbloccare situazioni difficili e rendere il gruppo di lavoro autosufficiente e più produttivo.
Le competenze comunicative sono di importanza vitale per un programmatore senior, in quanto lavora spesso a contatto con gruppi multidisciplinari e deve comunicare concetti tecnici ad interlocutori che tecnici non sono. Un ingegnere senior, dunque, deve essere in grado di spiegare in modo chiaro le proprie idee, ascoltare attentamente e fornire riscontri costruttivi.
L’attitudine al comando è altrettanto importante, in quanto è responsabilità del senior quella di fare da tutor ai junior della squadra, dirigere i vari gruppi del progetto e prendere le scelte tecniche più difficili. Ed è suo anche il compito di motivare la squadra, assegnare i compiti in modo efficace e fare da guida e supporto all’occorrenza.
Un’altra capacità indispensabile per l’ingegnere del software senior è la propensione alla risoluzione dei problemi. Uno sviluppatore senior deve essere in grado di pensare in modo critico, analizzare problemi complessi e trovare soluzioni creative. Dovrebbe essere a suo agio all’interno di situazioni poco chiare e non ancora definite, pronto ad adattarsi ad ogni nuovo sviluppo.
In fin dei conti, l’ingegneria del software non è altro che risoluzione di problemi!
Tuttavia i problemi non sono sempre di natura tecnica, specie all’interno delle organizzazioni più strutturate, dove sono presenti interlocutori con esperienze diverse e di differente formazione, e i problemi possono essere comunicati nel modo sbagliato e mutare di frequente. Per questo diventa fondamentale contribuire alla comprensione dei problemi che si stanno riscontrando, formulare e condividere gli obiettivi e guidare la squadra di lavoro nella giusta direzione; competenze cruciali, queste, che possono avere un impatto enorme.
La migliore soluzione tecnica non è necessariamente la migliore soluzione per una organizzazione.
Piuttosto, la migliore è quella che tiene in conto come ottimizzare l’apporto di quanti più sviluppatori junior possibili, quanto facilmente possa essere modificata e adattata alle necessità, di quanto la si possa espandere se gli affari vanno bene ecc.
Potresti essere costretto a scartare soluzioni perfette dal punto di vista tecnico in favore di soluzioni ottimali per la squadra ed l’ambiente in cui lavori. Le competenze tecniche da sole non bastano a comprendere tutte le sfaccettature di un progetto e a trovare soluzioni che soddisfano tutte le necessità.
Sono abbastanza tecnico?
Ok,ok, lo so che dovremmo parlare di competenze tecniche!
Dopotutto, visto come funziona il settore tech oggigiorno, questo è il primo aspetto per cui sarai considerato! Se non sei in grado di dimostrare le competenze tecniche, allora non avrai nessuna chance di ottenere quel posto che desideri tanto!
In qualità di sviluppatore senior, possedere competenze tecniche che coprono diverse aree è fondamentale per dare il massimo in uno scenario in continua evoluzione quale lo sviluppo di software. Per essere uno sviluppatore senior di successo è essenziale avere un profilo a “forma di T”, che enfatizza la perfetta padronanza di una specifica competenza e solide basi in altre.
Profilo a forma di “T”
Con profilo a forma di T si intende, per un ingegnere del software, essere esperto in una competenza o area specifica (rappresentata dal lungo tratto verticale della nostra T) ed avere al tempo stesso una vasta conoscenza di altre aree (rappresentate dai tratti orizzontali). Questo permette ai singolo individuo di poter contribuire in più modi ad un progetto pur essendo esperto della propria area di specializzazione primaria. I profili a T consentono una collaborazione efficace con membri di lavoro aventi competenze diverse, aprendo la strada ad un processo di sviluppo con maggiori probabilità di successo.
Un buon modo per costruire il profilo a T è quello di iniziare a sviluppare il tuo tratto verticale, ovvero quello che alla fine diventerà il tuo punto di forza! Concentrati per un po’ su una singola area. Inutile a dirsi, sarebbe meglio sceglierne una che ti piaccia davvero.
Quando pensi di averne raggiunto la padronanza, cerca di espandere la tua conoscenza partendo da lì e comincia a sviluppare il tratto orizzontale. Esci fuori dalla tua comfort zone ed esplora gli argomenti correlati. Questi argomenti dovrebbero auspicabilmente arricchire le tue conoscenze pregresse e permetterti di creare dei prodotti dall’inizio alla fine.
Se, ad esempio, sei diventato esperto in sviluppo di API, potresti voler approfondire i database o lo sviluppo front-end, in quanto ti permetterebbero di avvicinarti ad un profilo da programmatore full-stack. Allo stesso modo, potresti anche approfondire l’argomento IaC (infrastructure-as-code) ed imparare ad implementarlo nel processo produttivo.
Il segreto non sta nel diventare un esperto in ognuna di queste ulteriori aree ma nell’apprendere quanto basta per capire le basi e collaborare in modo efficace con chi, invece, le padroneggia a fondo.
Conoscenza vasta
Serve anche una vasta conoscenza dello sviluppo di software, che comprende i modelli di piattaforme, architetture, strutture di codice, testing, processi di sviluppo e scalabilità.
Inoltre, un ingegnere del software senior deve saper mettere a confronto e scegliere tecnologie e paradigmi diversi, come architettura monolitica e microservizi, memoria e CPU, alta scalabilità e bassa latenza, software riutilizzabile e software su misura, complesso e semplice. Ed è fondamentale saper prevedere l’effetto, sia nel breve che nel lungo termine, dei compromessi fatti.
Raggiungere questo livello di conoscenza è tutto fuorché semplice. Sicuramente necessita di una significativa quantità di tempo speso a sviluppare prodotti, adottando diverse pratiche, diversi linguaggi di programmazione, framework, metodologie e così via.
Puoi ampliare le tue conoscenze solamente se sai riconoscere che ogni scelta tecnica comporta una serie di compromessi. Ci saranno sempre aspetti positivi e negativi.
Non esiste una formula magica per la tecnologia!
Non esiste un framework che tu possa usare per costruire qualsiasi tipo di applicazione in modo ottimale! Se hai una visione sufficientemente completa del panorama tecnologico, dovresti essere in grado di capire quale insieme di tecnologie è più adatto ad affrontare un problema specifico.
E, ovviamente, va bene essere smentiti, purché tu mantenga una mente aperta e lasci a te stesso, e al tuo team, il margine per commettere degli errori, imparare dai fallimenti e provare approcci alternativi. La strada per il successo raramente è una linea retta…
Trova tutti i bug!
È risaputo che il software privo di bug è un mito, quindi non dirò che un ingegnere del software senior non crea bug! Certo che lo fa… Ma è molto importante per un ingegnere del software senior sapere cosa si può fare per ridurre al minimo il numero di bug e cercare di individuarli il più presto possibile (possibilmente prima che lo facciano gli utenti).
Comprendere ed approfondire i resoconti degli utenti, scrivere diversi tipi di test (unitari, di integrazione, complessivi), individuare ed analizzare i casi limite e tenere conto del debito tecnico costituiscono competenze fondamentali .
Un ingegnere del software senior dovrebbe essere in grado di fare una grande differenza e di aiutare l’intero team a scrivere un software migliore, illustrando ed educando alle migliori pratiche per il test del software.
Direi che non è troppo difficile scrivere test, ma scrivere buoni test è quasi un’arte! Per scrivere test efficaci, è necessario scrivere codici testabili. Ciò significa progettare un codice modulare, privo di dipendenze e con input e output ben definiti. Quanto migliore è la progettazione del codice, tanto più facile sarà scriverne i test.
I test devono essere facili da leggere, comprendere e mantenere. Usa nomi descrittivi per i tuoi test e scrivi test che coprano una caratteristica o un comportamento specifico. Evita di testare più funzioni nello stesso test, in quanto potrebbe rendere più difficile individuare l’origine dell’errore.
Ma come imparare a fare tutto questo?! Anche qui, pratica, pratica e ancora pratica!
Inizia accettando il fatto che un codice non testato è un cattivo codice (o per lo meno un codice che dovrebbe tenerti sveglio la notte). Quindi cerca di capire il settore aziendale specifico e che cosa ha senso testare e come. Quale tipo di input è più rappresentativo, quale tipo di output ci si aspetta e che tipo di effetti collaterali possono verificarsi.
Impara i diversi tipi e i diversi framework di test. Infine, impara quali tipi di test forniscono il maggior valore per l’azienda e ottimizza il flusso di lavoro del team per concentrarvi maggiormente su questi fattori.
Promuovere i modelli giusti
Avendo scritto un libro sui design pattern, sono certamente di parte al riguardo…
Un ingegnere del software senior dovrebbe aver sviluppato un certo grado di flessibilità nei diversi linguaggi di programmazione e dovrebbe comprendere paradigmi come OOP e Funzionale, Dichiarativo e Imperativo, Compilato e Interpretato. Ciò consentirà a un ingegnere del software senior di essere in grado di risolvere lo stesso problema utilizzando strumenti e tecniche differenti.
Allo stesso modo, un ingegnere del software senior deve comprendere i vari modelli di progettazione e le pratiche migliori. Questo gli consentirà di suggerire modelli che possono avere effetti positivi a lungo termine e di evitare quelli potrebbero infine causare problemi.
Il codice è un elemento che dovrà evolversi con il cambiare delle esigenze del business e dei clienti ed è quindi importante progettare tenendo conto dell’evoluzione. I modelli non sono perfetti, sono solo degli schemi che potete decidere di utilizzare per affrontare situazioni comuni e spianare la strada a miglioramenti futuri.
Cerca di non essere dogmatico applicando modelli di progettazione specifici solo perché puoi farlo, cerca di pensare a quale sia il valore che il modello specifico apporta al progetto e se questo valore sia effettivamente importante.
A volte, del semplice codice fittizio può risultare molto efficace ed essere compreso ed evoluto facilmente. Altre volte, invece, è necessaria la struttura imposta da specifici modelli di progettazione, perché potrebbe rendere il codice più testabile, estendibile, configurabile, ecc.
Come ingegnere software senior, questa è un’opportunità per brillare e avere un impatto significativo durante le sessioni di pairing e di revisione del codice!
Quali tipi di soft skills?
Ora che abbiamo affrontato le competenze tecniche che ti daranno un vantaggio nella tua carriera e ti permetteranno di essere riconosciuto come ingegnere senior, affrontiamo l’elefante nella stanza: le soft skills.
Hai ottenuto quel colloquio grazie alle tue competenze tecniche fondamentali, ma ora hai la possibilità di fare davvero colpo facendo mostra delle tue soft skills.
Voglia di crescere
La mentalità di un ingegnere del software senior è cruciale quanto le sue competenze tecniche e soft. Un ingegnere senior deve avere una mentalità incline alla crescita, la volontà di imparare e adattarsi e la propensione al continuo miglioramento.
Deve essere a proprio agio con i fallimenti, vederli come un’opportunità per imparare ed essere disposto a correre dei rischi. Ricorda sempre che un ingegnere senior deve anche essere un giocatore di squadra, non un eroe. Deve collaborare con il proprio team, sostenere i colleghi e contribuire al successo della squadra.
Essere una leva attiva
Un ingegnere software senior deve avere un ruolo molto proattivo in un’organizzazione. Non dovrebbe isolarsi in una stanza e continuare a sbattere le dita contro la tastiera. Un senior deve sapere quando è il momento di fare domande difficili e prendere in mano la situazione per scoprire ciò che non sa.
Essere in grado di fornire un punto di vista fortemente tecnico in una conversazione aziendale può avere grande impatto e informare l’azienda su quale sia la strategia migliore per andare avanti. A tutti gli effetti, un senior dovrebbe diventare un ponte tra il prodotto e la tecnologia.
Questo a volte significa che un senior dovrebbe anche sapere quando è il momento di dire NO. No a soluzioni rapide e sporche (che alla fine si ritorceranno contro) solo per rispettare una scadenza. No a piani che prevedono solo la costruzione di funzionalità su funzionalità senza considerare l’esperienza dell’utente e la stabilità a lungo termine del prodotto. No a scelte tecniche arbitrarie solo perché “abbiamo sempre fatto così ed è sempre andata bene”.
Dire NO è facile ma al tempo stesso molto difficile. Tutti possono dire NO, questa è la parte facile! Il difficile è argomentare il perché di quel NO, proporre punti di vista alternativi, trovare compromessi e disinnescare bombe a orologeria a breve o lungo termine.
Per riuscire a farlo serve un elevato livello di soft skills. Devi saper comunicare in modo efficace e scegliere con saggezza la tua battaglia. Non puoi dire sempre NO a tutto o corri il rischio di essere preso per un ostruzionista scorbutico.
Si tratta piuttosto di saper dire “NO, MA” piuttosto che un secco “NO”. E dovresti anche essere in grado di farlo di fronte alle persone giuste e al momento giusto… Se fatto bene, questo può avere un forte impatto positivo sull’azienda e sul team. Può portare all’innovazione e creare nuove potenzialità di lavoro o vantaggi competitivi unici.
Questa è un’area di crescita per me. Una di quelle in cui, se ripenso alla mia carriera, mi sembra di aver fallito molte volte. Ma spero di aver imparato qualcosa e con il tempo migliorerò…
Capire l’azienda
Per essere una leva attiva nella vostra organizzazione, devi essere in grado di capire l’azienda il più profondamente possibile.
Sai qual è lo scopo dell’azienda? Qual è la visione nel lungo termine? Esiste una strategia chiara? Quali sono i grandi punti di forza e quali di debolezza?
Se sei in grado di rispondere a queste domande sei in una buona posizione per utilizzare le tue competenze tecniche per determinare come la tecnologia può aiutare l’azienda ad avere successo.
Solo con una solida comprensione dell’azienda sarai in grado di scegliere le battaglie giuste, di concentrarti su ciò che conta e di contribuire alla progettazione di sistemi che possano servire l’azienda oggi ma anche essere adattati alle esigenze future.
La Comunicazione
Una buona comunicazione è stimolante come il caffè nero e rende altrettanto difficile dormire dopo.
Anne Morrow Lindbergh
Come ingegnere del software, le capacità comunicative sono fondamentali per il tuo successo. Devi essere in grado di comunicare efficacemente con diversi interlocutori, tra cui altri ingegneri, project manager, clienti e dirigenti. Ciò richiede un’ampia gamma di abilità comunicative, dal parlare e ascoltare allo scrivere e presentare.
Poiché dovrai parlare con tutti gli interlocutori, dovresti imparare a comunicare concetti tecnici a interlocutori non tecnici in un modo che sia facile da comprendere. Ciò significa anche saper ascoltare i commenti e incorporarli nel tuo lavoro. La capacità di comunicare efficacemente con gli interlocutori è essenziale per garantire che tutti siano sulla stessa lunghezza d’onda e che i progetti siano portati a termine con successo.
Un’altra importante abilità comunicativa per un ingegnere del software è quella di spiegare le incertezze e proporre idee su come affrontarle. Lo sviluppo del software è un processo intrinsecamente incerto e ci saranno sempre incognite e sfide impreviste.
Come ingegnere del software, devi essere in grado di comunicare queste incertezze in modo chiaro e conciso. Devi anche essere in grado di proporre idee su come affrontare queste incertezze e far progredire il progetto.
Inoltre, gli ingegneri del software devono essere in grado di parlare degli errori e delle lezioni apprese. Ne abbiamo già parlato, ma è importante sottolineare che il fallimento è una parte inevitabile dello sviluppo del software ed è importante essere trasparenti sui fallimenti e sulle lezioni apprese. Ciò richiede capacità di comunicazione efficaci, compresa quella di assumersi la responsabilità degli errori e di comunicare onestamente. Inoltre, è necessario saper comunicare le lezioni apprese dai fallimenti e incorporarle nei progetti futuri.
Le capacità comunicative sono essenziali anche per la stesura della documentazione e per le presentazioni. Gli ingegneri del software devono essere in grado di scrivere una documentazione chiara che spieghi come funzionano le loro soluzioni e come devono essere utilizzate e gestite nella produzione. Devono inoltre essere in grado di fornire presentazioni che comunichino efficacemente i concetti tecnici a un pubblico non tecnico. Ciò richiede una grande capacità di scrittura e di presentazione, oltre all’abilità di semplificare argomenti complessi e renderli digeribili per il pubblico.
Una buona comunicazione può aprire molte porte e sbloccare situazioni complesse. Assicurati quindi di esercitarla il più possibile!
Supporto alla gestione
Quando sei un buon comunicatore, diventi una persona che può essere molto efficace nel supportare diverse attività di gestione. Ad esempio nella pianificazione e nell’organizzazione degli incontri. Puoi aiutare a tenere traccia delle priorità e del debito tecnico e a suddividere i compiti difficili in parti più gestibili.
Ti trovi in una posizione unica per capire e sfruttare i punti di forza del team e per coinvolgere le persone giuste al momento giusto. Lavorando a stretto contatto con la direzione, puoi assicurarti che il tuo lavoro sia in linea con gli obiettivi aziendali generali e che gli sforzi del tuo team siano incanalati nella giusta direzione.
La pianificazione è un’altra abilità determinante per un ingegnere del software. Richiede di suddividere i progetti di grandi dimensioni in attività più piccole e gestibili, di stimare il tempo necessario per ciascuna attività e di stabilirne la priorità. Una pianificazione efficace contribuisce a garantire che i progetti siano portati a termine in tempo e nel rispetto del budget.
L’organizzazione degli incontri, come le riunioni in piedi, le revisioni informali e le retrospettive, possono offrire l’opportunità di condividere i progressi, identificare i problemi e pianificare il futuro. Come ingegnere del software, devi contribuire a guidare questi incontri e assicurarti che siano produttivi ed efficienti.
Non sto dicendo che gli ingegneri del software senior debbano sostituire il ruolo dei project manager o dei product manager, ma piuttosto che debbano integrare questi ruoli e fornire la loro prospettiva tecnica unica per mantenere gli obiettivi, i piani e l’esecuzione in linea con le aspettative del team tecnico.
Autonomia e attenzione alla consegna
Le ultime due soft skills su cui vorrei soffermarmi sono l’autonomia e l’attenzione alla consegna.
A volte gli ingegneri del software senior si trovano in una posizione unica per contribuire in modo significativo a progetti che richiedono una ricerca approfondita e tanto impegno. Si tratta di progetti fortemente tecnici come quelli relativi all’ottimizzazione delle prestazioni, alla significativa ristrutturazione del codice ed alla riprogettazione dell’architettura. Spesso si tratta di progetti molto importanti per l’azienda, perché possono sbloccare l’innovazione e generare nuove potenzialità di lavoro.
In base alla mia esperienza, non è raro che in questi progetti un singolo collaboratore sia in grado di dedicare una certa quantità di tempo a concentrarsi e a compiere progressi significativi in un lasso di tempo molto breve, portando avanti una prima grossa parte della ricerca. Ma anche in queste situazioni è importante evitare a tutti i costi una scarsa comunicazione con il team.
Se stai lavorando a un progetto di questo tipo, assicurati di comunicare regolarmente con la direzione e altri colleghi senior per tenere sotto controllo i tuoi progressi, ottenere un riscontro utile e condividere le tue conoscenze.
Ma la capacità di fornire valore lavorando in autonomia non è utile solo nei progetti di ricerca, ma è anche una buona abilità da padroneggiare in generale. Nell’industria del software, è più comune lavorare con cose che non conosciamo piuttosto che con cose che conosciamo!
Ci sono sempre nuovi ambiti da esplorare, nuove sfide da affrontare e nuovi strumenti con cui confrontarsi. Pertanto, è importante essere in grado di imparare rapidamente e di aggiornarsi velocemente quando necessario. Non dovresti aspettare che siano gli altri a insegnarti e a dirti come fare certe cose, ma dovresti essere in grado di fare alcuni progressi per conto tuo, ad esempio consultando e comprendendo la documentazione e il codice esistente.
Se hai già una vasta competenza, dovrebbe essere quasi istintivo aggiungerne altre quando necessario. Naturalmente, è giusto chiedere aiuto se ti senti bloccato, ma è anche importante cercare di fare tutto il possibile per progredire da solo, in modo da costruire il maggior contesto possibile e massimizzare il risultato del tempo speso a ricevere aiuto da altri.
In teoria, un ingegnere del software senior non ha bisogno di troppe indicazioni. È in grado di capire da solo ciò che è necessario per portare avanti le cose e di coinvolgere gli altri quando è necessario. Un altro aspetto riguarda la negoziazione delle aspettative e la comprensione di ciò che significa avere successo nell’ambiente attuale.
È bene essere chiari con la direzione e con il resto del team tecnico e definire le caratteristiche del successo individuale e di squadra. Se non sai cosa ci si aspetta da te e dal resto del team, anche se pensi di fare la cosa giusta, potresti finire per non fornire il valore che ci si aspetta da te; allo stesso modo, potresti non essere in grado di aiutare il tuo team ad avere successo.
Avere un simile atteggiamento di schiettezza e chiarezza di solito mantiene l’umore più positivo e aiuta a evitare le delusioni. Certo, non è sempre possibile evitare tutte le delusioni o i fallimenti. Perciò, quando il problema si presenta, potresti essere tentato di dare la colpa a qualcun altro o al sistema. Ma è invece più maturo chiedersi cosa si sarebbe potuto fare meglio e cosa si potrebbe fare in futuro per evitare che problemi simili si ripresentino.
Come posso crescere?
Se sei un ingegnere del software e vuoi aumentare le tue competenze e diventare un membro senior del tuo team, potresti chiederti quali sono i passi da intraprendere per raggiungere questo obiettivo.
Beh, non temere! Ecco 4 idee (più alcune extra) che credo ti aiuteranno nel tuo percorso.
Approfondire un livello
Innanzitutto, non limitarti a grattare la superficie delle tecnologie con cui stai lavorando. Scava più a fondo e impara a conoscere gli strati sottostanti. Probabilmente hai costruito un sito web o un’API, ma ti sei mai chiesto come funziona il protocollo HTTP? O anche come funziona il protocollo TCP e cosa succede per stabilire una connessione? Apprezzare questi dettagli ti darà una comprensione molto più ricca delle tecnologie con cui lavori ogni giorno.
Sì, se cominci a scavare diventa un pozzo senza fondo… Quindi come fare ad addentrarti più a fondo senza perderti e a ricavarne valore? La mia regola generale (che ho rubato/appreso dal mio amico Roberto) è quella di scavare solo un livello più in basso, partendo dalle tecnologie con cui si ha già familiarità.
Hai già trascorso un po’ di tempo con OAuth e OpenID Connect? Probabilmente vorrai sapere cosa c’è dentro un JWT. Conosci il flusso del codice di autorizzazione OAuth e cosa succede con tutti i reindirizzamenti? Sai come funzionano gli algoritmi di firma come RSA e HMAC?
Tutti questi sono argomenti che puoi esplorare per consolidare la tua conoscenza di questo particolare ambito. Ti permetteranno di esplorare concetti più generali che potresti riutilizzare in altri ambiti. Tutti costituiscono dei validi passi in avanti per ampliare le tue conoscenze e diventare un ingegnere più completo.
Sono spesso prevenuto verso la costruzione di oggetti. Mi sembra di non capire veramente qualcosa se non riesco a costruirne un piccolo prototipo. Se anche tu sei come me, potresti provare a farlo. Sapresti decodificare un token JWT senza usare una libreria? Saresti in grado di andare oltre e implementare l’algoritmo di verifica della firma?
Costruire prototipi è un ottimo modo per memorizzare alcuni concetti e mettere davvero alla prova la vostra conoscenza. Naturalmente, costruire richiede uno sforzo maggiore, quindi scegliete con saggezza i vostri esercizi di prototipazione: non è possibile reimplementare oltre 60 anni di ingegneria del software solo per il gusto di imparare!
Un video divertente che mi è piaciuto molto ultimamente è The Computer Science Iceberg. Perché mi piace così tanto? Perché illustra davvero bene l’idea di livelli graduali di astrazione e di ricerca di conoscenze fondamentali e generiche.
Divertiti
Questa è una delle mie convinzioni principali: l’ingegneria del software è una professione molto impegnativa. Non perché sia più difficile di altre professioni, ma perché le cose si muovono così velocemente che non puoi mai smettere di imparare e ti sentirai sempre indietro.
L’unica cosa che potrebbe rendere la professione un po’ più facile è una vera passione per la materia. Se sei appassionato, sarà più facile motivarti a imparare sempre cose nuove! E se non so se sono abbastanza appassionato? È comprensibile, soprattutto se sei all’inizio della tua carriera. C’è così tanto davanti a te che potrebbe essere spaventoso e persino scoraggiante.
Anche in questo caso, il mio consiglio è di orientarti verso la costruzione di oggetti. Costruire qualcosa ti darà un riscontro tangibile del fatto che ciò che stai imparando può essere effettivamente utile. Potresti realizzare dei progetti secondari per mettere in pratica le nuove conoscenze.
Inoltre, non dovresti essere timido nel mostrare ciò che hai costruito (e ciò che hai appreso) ai tuoi colleghi e persino ai tuoi amici al di fuori del lavoro! È probabile che riceverai un riscontro e che ti verranno in mente nuove idee e nuove cose che vorresti imparare e provare.
Ancora meglio se ti rendi conto che puoi applicare alcune di queste conoscenze al lavoro. Magari potete sviluppare un nuovo percorso all’interno dell’azienda per cui lavori, magari potresti aiutare in qualcosa che al momento viene trascurato perché nessun altro ha il tempo o le competenze, magari tutto questo può dimostrare un valore maggiore e otterrai una promozione!
Quando si applica questa mentalità di apprendimento continuo e di condivisione delle conoscenze sul lavoro, si potrebbe generare una stimolazione reciproca e ritrovarsi con un team che si diverte a imparare e a costruire insieme.
Un’altra idea per far entrare le persone in sintonia tra loro e generare una stimolazione reciproca delle idee è quella di organizzare hackathon aziendali o giornate di studio gratuite. Questi sono ottimi modi per aiutare i team ad appassionarsi a ciò che fanno, a esplorare nuove idee, a imparare cose nuove e, in definitiva, a mettere le persone in condizione di fornire più valore nel breve e nel lungo termine.
Programmazione a coppie
La programmazione a coppie è un altro grande strumento che puoi sfruttare per dare una spinta alle tue competenze. Collaborare con il maggior numero possibile di persone all’interno dell’organizzazione è fondamentale. Anche se qualcuno è più giovane di te, può comunque avere intuizioni e prospettive che forse non avevi considerato prima. La programmazione in coppia offre una piattaforma per condividere idee e imparare gli uni dagli altri.
Allo stesso modo, non scartare il valore dell’insegnamento agli altri. Anche i membri più anziani del team possono beneficiare delle tue conoscenze e della tua esperienza. Se fai coppia con altri, puoi condividere le tue competenze e aiutare tutti a crescere e a svilupparsi.
Ho imparato tantissimi trucchi lavorando in coppia con altre persone. Anche piccole cose, come la configurazione dell’editor o del terminale. Lo so: non tutti amano la programmazione in coppia. Se questo è il caso, non preoccuparti! Ci sono altri approcci da seguire che possono comunque fornirti un feedback prezioso e aiutarti a imparare dai tuoi colleghi. Le revisioni interattive del codice e le sessioni di dimostrazione sono ottime alternative che consentono di condividere il proprio lavoro e ricevere riscontri senza dover lavorare insieme in tempo reale.
Alla fine, la cosa più importante è rimanere aperti a nuove idee e approcci. Continuando a imparare e a crescere, sarei sulla buona strada per diventare uno sviluppatore di software senior. Quindi, perché non provi la programmazione a coppie e vedi cosa riesci a imparare?
Creazione di contenuti
Prima di tutto, la creazione di contenuti può assumere diverse forme: articoli, discorsi, video, discussioni su Twitter, e chi più ne ha più ne metta! E indovina un po’? Non occorre essere un esperto per condividere qualcosa di nuovo che hai imparato. Anche se sei alle prime armi con un determinato argomento, la tua nuova prospettiva può portare valore agli altri e aiutarti ad affermarti come leader di pensiero.
Perciò crea dei contenuti su come ti sei sentito quando hai provato un nuovo linguaggio di programmazione o un framework. Cosa ti è piaciuto? C’è stato qualcosa che ti ha confuso? Cosa ti è mancato della tua precedente esperienza?
Ma il punto è questo: devi farlo diventare un’abitudine. Impegnati a seguire un programma regolare e svilupperai disciplina e coerenza nella creazione di contenuti. Inoltre, più creerai, più affinerai le tue capacità di comunicazione. E lo ripeto ancora una volta: la comunicazione è un’abilità fondamentale per qualsiasi ingegnere senior.
A proposito di comunicazione, è qui che la creazione di contenuti brilla. Come ingegneri, amiamo perderci nei dettagli tecnici, ma spiegare concetti complessi a interlocutori non tecnici può essere difficile. Creando contenuti, imparerai a comunicare i tuoi concetti in modo chiaro e coinvolgente per un pubblico più ampio. Inoltre, avrai l’opportunità di ricevere un parere sui tuoi contenuti e, se presterai attenzione, potrai migliorare ulteriormente le tue capacità comunicative.
Hai mai sentito parlare di atomic essays? Si tratta di suddividere le tue idee in parti di contenuto più brevi e mirate. Questo approccio può rendere i tuoi contenuti più coinvolgenti e più facili da assimilare, soprattutto su piattaforme come Twitter, dove la brevità è fondamentale. Se non sai che tipo di contenuti creare, questo potrebbe essere un buon formato per iniziare.
Se non sai su cosa creare contenuti, ecco il mio consiglio: ogni giorno, alla fine della tua giornata lavorativa, scrivi 1 cosa nuova che pensi di aver imparato durante la giornata. Alla fine della settimana lavorativa, rivedi i tuoi 5 punti. Sono sicuro che per almeno una di queste cose varrà la pena creare dei contenuti.
La creazione di contenuti può aiutarti a diventare un ingegnere più esperto, affermandoti come guida intellettuale, sviluppando le tue capacità di comunicazione e contribuendo alla comunità. Quindi, vai avanti e condividi le tue conoscenze con il mondo.
Ti sorprenderai dell’impatto che avrà su di te e sugli altri!
Altre idee
Ecco alcuni altri consigli casuali che puoi aggiungere a quelli dati sopra.
Innanzitutto, cerca sempre di mantenere un atteggiamento positivo. Quando le cose si fanno difficili, è facile scoraggiarsi e perdere di vista il quadro generale. Ma ricorda che con tempo e risorse sufficienti, i team possono superare qualsiasi sfida. Quando manca questo lusso, sono certo che esistono compromessi accettabili che possono soddisfare le esigenze di tutti.
Un’altra cosa fondamentale per aggiornarsi è evitare di essere troppo rigidi in fatto di tecnologia o di stili di programmazione. Sforzati di sperimentare diversi modi per risolvere i problemi. È un esercizio per le tue capacità di risoluzione dei problemi.
È importante supportare le idee dei colleghi, anche quando avresti fatto le cose in modo diverso. Questo tipo di atteggiamento collaborativo aiuta a creare fiducia e favorisce una cultura dell’innovazione e del lavoro di squadra. Inoltre, la prossima volta che proporrai qualcosa, sono sicuro che le persone saranno disposte a discutere e a sostenere le tue idee.
Quando si tratta di affrontare compiti difficili, non avere paura di offrirti come volontario. Che ne dici di quel refactoring che nessuno vuole fare? Fatti avanti e accettalo. Quelle parti di codice complicate e incasinate che tutti evitano? Tuffati e cerca di dargli un senso. Assumendo questi compiti impegnativi, potrai farti una reputazione di risolutore di problemi e diventare la persona di riferimento per i lavori più difficili.
Infine, come regola generale, cerca di migliorare un po’ le cose ogni volta che ne hai la possibilità. Che si tratti di documentare un processo, migliorare l’interfaccia utente di un’applicazione o snellire un flusso di lavoro, ogni piccolo miglioramento è importante. Con il tempo, questi piccoli successi si accumulano e ci aiutano a diventare membri più validi del team.
Come faccio a vendermi come sviluppatore senior?
Se penso di essere un ingegnere senior, cosa posso fare per essere riconosciuto come tale?
Innanzitutto, inizia ad assumerti maggiori responsabilità. Cerca opportunità per dirigere progetti o fare da tutor a ingegneri junior. Condividi le tue conoscenze e la tua esperienza con gli altri e fornisci loro una guida.
In secondo luogo, cerca di avere un impatto al di là del tuo team o progetto attuale. Partecipa a iniziative interfunzionali, contribuisci a progetti open-source o intervieni a eventi di settore. Questo tipo di attività può aiutarti ad affermarti come guida intellettuale nel tuo settore e a dimostrare la tua esperienza a un pubblico più ampio.
In terzo luogo, concentrati sullo sviluppo delle tue soft skills. In qualità di ingegnere senior, dovrai comunicare efficacemente con interlocutori tecnici e non, condurre riunioni e negoziare efficacemente. Pertanto, lavora per migliorare le capacità di comunicazione, di leadership e di risoluzione dei conflitti per diventare un membro completo e rispettato del tuo team .
Un altro modo per dimostrare la tua competenza è condividere le tue conoscenze con gli altri. Scrivi post su blog tecnici, registra video didattici o intervieni a eventi interni o esterni per mostrare la tua esperienza e dimostrare la tua volontà di aiutare gli altri a imparare.
Infine, cerca il parere dei tuoi colleghi, dei mentori e dei manager. Chiedi critiche costruttive e sii aperto a suggerimenti per migliorare.
La ricettività ai commenti consente di migliorare continuamente le tue competenze e di dimostrare il tuo impegno a crescere e ad apprendere come ingegnere senior.
Conclusione
La definizione di ingegnere software senior è complessa e sfaccettata, ma in generale implica il possesso di una profonda competenza tecnica, un’ampia conoscenza del settore e una serie di competenze trasversali che consentono una comunicazione efficace, la leadership e la risoluzione dei problemi.
Per diventare un ingegnere del software senior, è importante sviluppare e affinare continuamente le proprie competenze, concentrandosi non solo sulle abilità tecniche ma anche sulla comunicazione, sulla leadership e sull’acume commerciale.
Ciò potrebbe comportare la programmazione in coppia, la creazione di contenuti, la partecipazione volontaria a progetti impegnativi e la ricerca di nuove opportunità di apprendimento.
In definitiva, il percorso verso il grado di senior non è lineare e richiede dedizione, perseveranza e propensione alla crescita per continuare a migliorare ed evolvere come ingegnere del software. Quindi, continua a spronarti per andare sempre più a fondo, per divertirti e trovare gioia nel tuo lavoro e per sforzarti sempre di avere un impatto positivo sul tuo team e sull’organizzazione.
Ma se ti sei chiesto durante la lettura se stavo descrivendo il perfetto ingegnere software senior, lascia che ti dica solo che non mi aspetto che le persone siano in grado di soddisfare ogni singolo aspetto esposto in questo articolo. Ci saranno cose in cui sarai bravissimo e altre in cui sarai appena sufficiente. Fa parte della natura umana e va bene così!
Non possiamo eccellere in tutto, ma dobbiamo conoscere i nostri punti di forza e di debolezza, lavorare con il nostro team per amplificare i punti di forza e compensare le debolezze… e sforzarci di migliorare ogni giorno!
È un viaggio, non una destinazione! Touché…
Questo articolo si basa su una presentazione che ha tenuto lo scorso anno l’autore dal titolo: “The senior dev, an opinionated take”, ed è stato tradotto dall’inglese all’italiano da Mauro Bardetta. Leggi l’articolo originale in inglese qui.