Iniziare una carriera nelle Big Tech
5 consigli da sapere da studente per diventare Software Engineer
Introduzione
Da quando mi sono trasferito a Dublino (Irlanda) nel 2016 molte cose sono cambiate nella mia vita. Nel 2019, anno in cui sono stato assunto in Google come Software Engineer, ho partecipato a una breve intervista dove ho raccontato un po’ la mia esperienza professionale, cercando di dare qualche spunto e speranza ai ragazzi che devono ancora intraprenderne una.
Da allora, ho ricevuto tantissimi messaggi da persone con ringraziamenti e domande. Molti di voi sono stati ispirati, altri di voi hanno chiesto consigli su come intraprendere una carriera simile alla mia. È così che ho deciso di scrivere questa nota.
Ho deciso di scriverla in italiano. Non avrei mai pensato in vita mia che scrivere in italiano sarebbe stato un pò complicato per me. In realtà, forse in vita mia non avrei mai pensato di dover scrivere questa nota (indipendentemente dalla lingua).
Dal momento che la nostra lingua non è gender-free, e dal momento che di solito la tendenza è quella di usare il genere maschile nei testi, in questa nota userò solo e soltanto il genere femminile. Se ci fosse un genere neutrale in italiano, avrei usato quello. Non è un caso se sto trattando questo argomento mentre scrivo questa nota. Non trascurarne l’importanza.
Cercherò di rispondere a quelle che sono le tipiche domande che ho ricevuto finora elencando 5 punti fondamentali. Vorrei focalizzarmi sull’approccio, la cultura e la mentalità che è necessario avere per poter aspirare a una carriera nelle Big Tech.
Spoiler alert: non credo di essere il più bravo, non lo sarò mai e mai vorrò esserlo. La mia miglior fortuna è che ogni giorno lavoro in un ambiente fatto di persone molto più intelligenti di me, da cui posso imparare come un nano sulle spalle di un gigante! Per questo motivo voglio precisare che queste sono solo mie idee e pertanto possono anche essere sbagliate.
Tutto ciò di cui parlo non viene richiesto come piena padronanza prima di iniziare a lavorare in una Big Tech. Ciò che conta in alcuni casi è di dimostrare di averne la predisposizione.
Cosa significa lavorare in una big tech?
Capisco che al di fuori di questo mondo tutto possa sembrare magico e meraviglioso, ma lavorare in una big tech non è tanto poi diverso dal concetto di lavoro in generale. Come impiegato in un’azienda, sei chiamata a svolgere compiti che sono principalmente attinenti all’unico obiettivo che conta: migliorare il core business dell’azienda, che non necessariamente significa aumentarne i profitti in maniera diretta. Comprendo anche che questa cosa in Italia risulti un po’ bizzarra, ma è la verità: un’azienda che funziona è in grado di investire e (perdere, se capita) denaro a favore di un piano a lungo termine.
L’aspetto diverso del lavoro in una big tech si racchiude principalmente in uno solo: tu come software engineer vieni valorizzata 1000 volte di più di quanto non lo sia in una non big tech.
Quali sono i motivi? Sono tanti. Provo ad elencarne alcuni:
- Specialmente in Italia, raramente si parla di Software Engineer. Tipicamente si parla di Software Developer. La differenza non è banale, e chi non la capisce probabilmente non è pronto a lavorare in una Big Tech. Tale ruolo viene principalmente visto in Italia come quello di “un operaia” o “un muratore”, ossia colui che ha basso potere decisionale in un progetto, e si limita a tradurre quelle direttive in linee di codice. Una software developer in Italia viene tendenzialmente sottopagato perchè si ritiene tale figura come un costo che va ottimizzato piuttosto che valorizzato.
- Sempre specialmente in Italia, esistono infatti ruoli come Software Architect e Project Manager; molti di loro non hanno mai scritto una riga di codice nella loro vita; in puro stile italiano, a loro piace dettare le regole senza sporcarsi le mani, parlando a livello teorico. Questo modello non viene adottato in nessuna Big Tech. Non puoi essere una software engineer se non sei in grado di disegnare/progettare il tuo software e di creare un delivery plan che porti ad un risultato finale. Le Big Tech hanno project and product managers, però il loro ruolo rimane subordinato a quelle che sono le scelte del senior software engineer. La maggior parte di PMs in Big Tech sono software engineers che hanno deciso di cambiare ruolo.
- Per questo stesso motivo appena accennato, sempre in Italia, quando si parla di una Manager di un team si pensa a lei come al ruolo più importante in un azienda; mi dispiace deluderti, ma in una Big Tech questo non è sempre vero; in Facebook e Google, per esempio, una Senior/Staff/Lead Software Engineer conta di più (o al pari merito) di un manager. In una big tech devi innanzitutto essere brava a fare, oltre che parlare.
- Una big tech ha molte più risorse economiche. La maggior parte delle big tech basa i propri profitti sulla realizzazione di software, che ovviamente rappresenta un asset astratto con un basso costo intrinseco. Il costo principale di una Big Tech company è la dipendente stessa (a parte l’infrastruttura hardware come i server) ma questo non è un problema dal momento che il margine di guadagno rimane alto. Di conseguenza, i benefici per un Software Engineer che lavora in una Big Tech sono molti: salari alti, benefits, coperture assicurative, accesso a corsi avanzati, uffici all’avanguardia con tante aree di svago (ovviamente con accesso a una sala mensa di elevata qualità). Queste aziende puntano a creare il posto di lavoro perfetto per un software engineer, cosi che loro non lascino mai per andare in altre aziende.
- In una big tech è piu facile incontrare sofware engineer estremamente talentuosi, imparare da loro e usare le technologie all’avanguardia. Probabilmente il sogno di un software engineer è quello di riuscire a creare software in grado di gestire milioni di utenti senza che il sistema collassi. Le big tech sono posti dove questo sogno può avverarsi.
Com’è iniziata la tua carriera e cosa fai ora?
Nel 2014 ho terminato i miei studi di Ingegneria Informatica al Politecnico di Bari con una laurea magistrale con lode. Non ho mai fatto un PhD (probabilemte lo avrei fatto se avessi capito prima quanto è bello fare esperienza e vivere fuori del tuo paese). Ho lavorato un paio di anni in Italia; successivamente in Amazon AWS come Software Development Engineer, poi Google come Software Engineer e attualmente lavoro in Facebook come Tech Lead Software Engineer. Se vuoi saperne di più di me, dai un occhiata alla mia pagina personale.
Iniziamo!
1 — Dimostra forte padronanza di problem solving, coding skills e testing
Come software engineer, è estremamente importante avere delle solide skills o problem solving, coding and testing. Dai un occhiata alla mia serie di articoli che parla di ciò.
Problem solving
Immagina di dover creare un gestore di una rubrica di un telefono (già, sempre il solito esempio). Per realizzare qualcosa di questo tipo, hai moltissime opzioni, ma solo alcune sono quelle ideali. Come fare a capirlo? Tipicamente una risposta deterministica sta nella valutazione delle time and space complexity. Una soluzione che non dipenda o che dipenda sub-linearmente dalla dimensione dei dati in ingresso è quella che permette al tuo prodotto di funzionare in maniera ottimale anche quando il numero dei dati gestiti è enorme. Tutto ciò richiede una forte conoscenza delle strutture dati e degli algoritmi più importanti.
Coding
Molto spesso ricevo domande su quale sia il linguaggio di programmazione più importante da conoscere. Ti potrei rispondere Python, Javascript, Java, C++ e nessuna delle risposte sarebbe corretta in maniera assoluta. Se ti stai facendo questa domanda, forse sei lontana dal poter lavorare in una Big Tech.
In nessuna di queste aziende, viene richiesta una specifica conoscenza di un preciso linguaggio di programmazione. Infatti, in sede di colloquio non viene chiesto di programmare in uno specifico linguaggio. La ragione è che per lavorare in tali aziende devi essere un talento nella capacità di convertire in codice la soluzione al problema nella maniera migliore possibile. Tutto ciò è indipendente dal linguaggio usato: la maggior parte dei linguaggi seguono gli stessi principi e regole molto simili. Un buon software engineer è in grado di imparare gli aspetti specifici di un linguaggio in pochissimo tempo.
Ci sono chiaramente delle eccezioni: quando il ruolo richiesto ha una forte dipendenza con un certo tipo di mansione, può capitare che ti venga richiesta una forte padronanza e conoscenza per una specifica tecnologia. Ma questo non è un argomento relativo a questa nota.
In Italia, ciò che rappresenta un eccezione alla regola per le Big Tech, diventa invece quasi lo standard: molte delle aziende cercano sviluppatrici che conoscono già uno specifico linguaggio di programmazione, perchè non hanno tempo da perdere per assumere operaie che non sappiano il “loro mestiere”. Non consiglio di seguire questo approccio.
Testing
Se c’e una cosa che fa la differenza nella tua carriera di software engineer, è quella di poter rilasciare il tuo codice appena scritto con la quasi certezza che funzioni in tutti i casi possibili.
Questa certezza non si guadagna con la convinzione di essere i migliori sviluppatori al mondo. Anche la migliore sviluppatrice al mondo (in particolare colei che crede di esserlo) commette una serie enorme di errori.
Il migliore software engineer è colui che non si fida del proprio codice, e che impara sin da subito la scienza del testing. Si esatto, si tratta di una vera e propria scienza. Ci sono tantissimi modi per testare il proprio codice, e dovresti impararli tutti. Come minimo, prima di iniziare ad essere un software engineer devi sapere ed essere convinto che testare il tuo codice è essenziale.
2 — Impara i costi/benefici di scelte di design e programmazione
Come già accennato, un software engineer non è uno sviluppatore. Se pensi che sia lo stesso, probabilmente ti manca la cultura per entrare a far parte di una Big Tech. Un software engineer è come un ingegnere meccanico o edile: è colui che progetta (il software) e lo rende scalabile e resiliente a quelle che sono le maggiori problematiche (always available, scalable and fault tolerant).
Altro tipico errore comune è quello di pensare che più una soluzione è complessa meglio è. Completamente sbagliato. La complessità produce maggiori costi, diretti e indiretti. Un buon software engineer deve sempre tener a mente il costo di ciò che viene costruito. I migliori software engineer con cui ho lavorato sono quelli in cui nelle decisioni tecniche portano sul tavolo argomenti relativi a vantaggi/svantaggi, costi/benefici e valutazioni oggettive delle diverse soluzioni proposte. Un software engineer parla di codice solo nell’ultima fase di creazione di un software.
3 — Dimostra ottime communication skills
Se non sei in grado di vendere le tue idee, di spiegare in linguaggio umano le problematiche che stai affrontando e di non saper collaborare/contribuire a progetti in un team di 5–10 persone, avrai probabilmente difficoltà a lavorare in una Big Tech per lungo tempo.
Un software engineer che avanza nella sua carriera tende sempre di meno a scrivere codice per lasciare spazio a coordinare e comunicare lo stato di avanzamento e di piani futuri di un progetto.
4 — Voglia di imparare, mettersi in gioco e adattarsi
Sin da quando ho iniziato a lavorare, non ho smesso un singolo giorno di guardare e imparare dai miei colleghi. Tuttora, come tech lead di un team in Facebook, riesco ad imparare sia da chi ha più seniority sia da chi ha meno seniority di me. La seniority non importa, ci sarà sempre qualcosa da imparare dai tuoi colleghi, culturalmente e non. Se ti rendi conto che questo non è il tuo caso, la soluzione è semplice: cambia team o cambia azienda. Quel posto non ti farà crescere.
Come neo-laureato e studente, sii umile e disposto a fidarti e imparare dal tuo team o dal tuo mentore. Ho la fortuna di lavorare con principal/staff software engineer da cui ho imparato e continuo ad imparare. Direi che la migliore scuola per me viene dai tre anni in Amazon.
Indipendentemente da dove lavorerai, ti consiglio di leggere i leadership principles amazoniani. Se impari a metterli in pratica, non avrai grosse difficoltà nella tua carriera.
La migliore lezione che posso trasmettere è: non essere troppo convinta e gelosa delle tue idee; devi imparare ad essere disposta a cambiare idee e accettare di non avere sempre ragione.
5 — Non essere troppo affezionato al tuo paese
Per quanto mi riguarda, come Software Engineer puoi permetterti il lusso di affezionarti al tuo paese e vivere lì per sempre solo se sei nata negli Stati Uniti d’America. Sai benissimo che la maggior parte (se non tutte) delle Big Tech sono lì, così come le migliori università.
Da italiano, ho forse capito troppo tardi che dovevo lasciare il mio paese per diventare un vero software engineer. Tornassi indietro, avrei lasciato prima il mio paese per andare a studiare all’estero e fare più esperienza, soprattutto con l’inglese.
Infatti, l’inglese è uno dei motivi per cui non puoi affezionarti al tuo luogo d’origine. Che ti piaccia o no, la maggior parte del business avviene in lingua inglese. Se non sei capace di comunicare e comprendere in tale lingua, avrai probabilmente uno svantaggio rispetto ad altri.
Dal momento che questa nota è in italiano, e mi rivolgo a studenti/esse italiani/e, vorrei dirvi che in particolare l’Italia non è probabilmente il posto migliore per un Software Engineer. Ho già indirettamente spiegato il perchè nella sezione “Cosa significa lavorare in una big tech?” — l’Italia è un paese meraviglioso, ma lo è ancora di più se lo vivi da software engineer espatriato: guadagnerai molto di più e il tuo lavoro sarà molto più valorizzato. È la triste verità, e sarei molto contento se avessi torto.
La mia esperienza di lavoro in Italia è stata abbastanza triste: ho lavorato anche a Milano, la città più tecnologicamente avanzata in Italia, ma non è cambiato molto. Come consulente informatico, ho lavorato in ambienti di lavoro dove gente frustrata e appagata sentiva sempre il dovere di far notare la propria superiorità (che in realtà non esiste); alcuni di questi che lavoravano nella stessa azienda per tanti anni, vivevano il loro ruolo come padroni, trattando i neo arrivati con zero professionalità e zero leadership.
In Italia c’è molto micromanagement, molta invidia e poco spirito di collaborazione. Inevitabilmente ci sono meno risorse economiche, pertanto tutti sono più stressati e impauriti nel perdere la loro supremazia/importanza.
Conclusioni
Non essere un boss, sii un leader. Questo è un consiglio per quando diventerai anche tu un software engineer. È estremamente importante non trasmettere le tue frustrazioni agli altri, ma di rendere la vita dei tuoi colleghi più facile. La definizione migliore per un Tech Lead o per un manager è la seguente: complete and don’t compete.
Fai in modo che il tuo lavoro possa essere completato dal tuo team così che tu possa andare avanti e imparare nuove cose.
Grazie per aver letto.