Seguitemi sul fediverso @fedi@blog.robutti.me

Guida Anti-Inculata per laureandi in Informatica e Ingegneria Informatica

Più volte durante la vostra istruzione vi sarete imbattuti in guide, siti e materiale vario che vi hanno consigliato cosa studiare, come cercare lavoro, come farvi raggiungere dalle aziende. La maggior parte di questi contenuti vengono da organizzazioni o istituzioni che hanno come unico interesse quello di rendere appetibile il lavoratore e collegarlo ad aziende che stanno cercando personale. Talvolta provengono dalle aziende stesse, desiderose di incanalare quanta più forza lavoro acerba verso i propri uffici.

Nella mia esperienza però i laureandi hanno bisogno di altro. La logica malata per cui “in Italia è pieno di disoccupati, ringraziate che voi programmatori trovate facilmente lavoro” fa anche un po' schifo. Facciamo finta che non si debba prendere a schiaffi chi la propugna e passiamo oltre, cercando di ambire a qualcosa di più.

Ho quindi deciso di creare una guida, da lavoratore per futuri lavoratori, per raccogliere in una guida tutte queste esperienze, tutte queste storie, tutti i consigli dati e ricevuti. La speranza è di raggiungere un pubblico ampio col passaparola e salvare qualche anima innocente dalla dannazione di una vita fatta di PHP e gestionali in Java.

A chi è rivolta questa guida

Nel titolo ho specificato “laureandi” e non neo-laureati. In realtà questa guida va bene per entrambi. Tuttavia alcuni consigli che verranno elencati in seguito andrebbero applicati il prima possibile.

La guida non fa particolare differenza tra triennali e magistrali. Idealmente siete a 6-12 mesi dalla laurea, state per scegliere lo stage e l'argomento della tesi, avete magari qualche esame tosto che avete già steccato una volta o due e in generale il ritmo di studio sta iniziando a calare perché non frequentate più a tempo pieno. Avete così un pochino di tempo extra da investire.

I pericoli

Il mondo dell'IT è pieno di insidie. Girano tanti soldi e tutti vogliono sviluppare tutto al più presto possibile. Per fare questo sono anche disposti a pagare bene, ma in cambio vogliono la vostra anima. Se riescono, se la prendono anche senza pagarvi bene. Siccome poi l'informatico medio (sopratutto quello del passato) disdegna qualunque forma di impegno politico o sociale, ci ritroviamo in un settore dove la rappresentanza sindacale è quasi inesistente e quando c'è, è inefficace.

Perciò uno dei modi per difendervi è la cultura del lavoro: saper identificare i sintomi di problemi nella vostra futura azienda, capire le meccaniche con cui questi vi danneggiano, saperne limitare l'impatto, avere un'idea chiara di ciò che è tollerabile e di ciò che non dovrebbe esserlo.

Un altro modo di difendervi, una volta capito come funziona il mercato del lavoro, è posizionarvi all'interno di questo partendo da una posizione di forza. I cambiamenti tecnologici nell'IT arrivano a ondate e creano nuove professioni o specializzazioni nelle diverse fasi di queste ondate. Una teoria generale dei cambiamenti tecnologici è decisamente oltre gli obiettivi di questa guida ma, semplificando parecchio, possiamo individuare qualche pattern da sfruttare.

In un primo tempo, quando la tecnologia è acerba e poco diffusa, si cerca un numero ristretto di persone con una forte comprensione dell'argomento e la capacità di lavorare in un'ecosistema dove non esiste nulla di pronto.

Segue una fase di espansione dove sempre più aziende adottano queste tecnologie grazie ad una maturazione degli strumenti. Tuttavia ognuno usa queste tecnologie in modo diverso e gli strumenti tendono ad essere sufficientemente generici da supportare tutti questi casi d'uso. Questo richiede un grande numero di sviluppatori software per costruire sopra a queste tecnologie.

Segue la fase di consolidamento e maturità, in cui gli strumenti sono sempre più commoditizzati e richiedono sempre meno programmatori per coprire i casi più comuni. Spesso per la customizzazione bastano persone non tecniche o programmatori poco formati. Questo permette di scalare le operazioni aziendali su un grande numero di clienti, perché i problemi sono noti, le soluzioni sono sempre le stesse e la complessità è già stata domata da altri.

Segue la fase di declino che qui ci interessa poco poiché pochi si sognano di assumere neolaureati in questa fase.

Ognuna di queste fasi ha diverse implicazioni per il lavoratore e impattano fortemente il suo potere contrattuale. In particolare la terza fase, la maturità, è quella che vorreste evitare ma è anche quella in cui avete più possibilità di ritrovarvi. Sebbene offra maggiore stabilità e richieda meno impegno individuale, espone il lavoratore a tutta una serie di ricatti e vulnerabilità in quanto facilmente sostituibile.

Il termine tecnico è “deskilling”: se la vostra azienda può permettersi di rimpiazzarvi con una persona con le stesse competenze, facilmente reperibile e col vostro stesso stipendio o inferiore, lo farà non appena gliene darete un motivo. Questo vi costringe ad accettare tutto ciò che la azienda vi impone, avendo come unica alternativa il tornare sul mercato solo per trovare posizioni offerte da aziende che operano nello stesso modo.

Il lato negativo delle prime due fasi è che per essere competitivi in quel mercato del lavoro, dovete spendere tempo in studio autonomo e letture dedicate, qualcosa che tuttavia molte persone sono giustamente non interessate a fare a prescindere dalle conseguenze.

Vediamo quindi quali sono i possibili danni concreti nel breve e nel lungo periodo.

Il crunching

Il crunching è la pratica di normalizzare ritmi di lavoro insostenibili, straordinari e weekend. Talvolta si viene ricompensati per questo lavoro extra ma più spesso non succede. Il problema non sono tanto i soldi, perché anche quando ci sono, il crunching rimane una pratica estremamente dannosa per il lavoratore e, nel lungo termine, per l'azienda.

In primis è problematica per l'equilibrio vita-lavoro, visto che se lavorate 12 ore al giorno tutti i giorni, difficilmente vi rimarrà tempo ed energie per altro. Poi è problematica a livello psicologico: la maggior parte delle persone non può sostenere questi ritmi all'infinito, portando a quello che in gergo tecnico è chiamato burnout e in linguaggio colloquiale viene chiamato “esaurimento nervoso”. Infine è problematica perché dopo 9 ore di programmazione non capite più un cazzo e scrivete codice di merda, che introdurrà facilmente debito tecnico nella vostra codebase con tutti i problemi che ne conseguono.

Le aziende spesso adottano strategie consapevoli per introdurre gradualmente i lavoratori all'idea e normalizzarla. Chiaramente se al vostro primo giorno, dopo che vi sono stati promessi ritmi rilassati, vi mettono subito su un progetto in ritardo rispetto alla pianificazione e vi costringono a stare in ufficio tutti i giorni fino alle 21, è molto probabile che vi troverete un altro lavoro senza pensarci troppo.

Discorso diverso invece è se venite introdotti all'idea gradualmente. Questo processo inizia dall'offerta di lavoro, dove spesso potete trovare frasi su orari di lavoro flessibili e capacità di lavorare sotto stress, spesso addolcite in vari modi con artifici di retorica o di marketing per renderle meno ovvie.

L'insidia del crunching è distinguere tra un'occasionale emergenza che richiede un paio di giorni di superlavoro e l'inizio del vostro indottrinamento. Il mio consiglio è di guardarvi intorno e vedere gli standard a cui sono sottoposti i vostri colleghi, ascoltare le loro lamentele e trarre le vostre conclusioni. Partite sempre dall'idea che se il vostro datore di lavoro dà per scontata la vostra disponibilità a fare straordinari, è probabilmente in malafede quando ve li chiede, perché probabilmente nella sua testa quella è la norma e voi dovete conformarvi.

Un trend che si è sviluppato nell'ultimo decennio per giustificare il crunching è l'utilizzo di vari micro-benefit e di una cultura aziendale volta ad annullare la vita esterna del lavoratore. Più popolare in America che in Italia, merita comunque una nota di attenzione: diffidate di chi parla di “ambiente familiare”, di chi parla di birrette al venerdì, di chi ha piscina, palestra e asilo in ufficio. Talvolta questi elementi sono semplicemente emulazione dello stile dei grandi campus americani senza la stessa malizia, ma più spesso sono scelte consapevoli del management per farvi spendere più tempo possibile in ufficio, spostare il vostro baricentro sociale sempre più all'interno dell'azienda e rendervi logisticamente e psicologicamente dipendenti dai benefit aziendali così da rendervi meno propensi a cambiare posto di lavoro.

La fossilizzazione

Un nemico subdolo, strisciante. Iniziate a programmare con una tecnologia non proprio recentissima, vi specializzate su una componente software, questa via via diventa sempre più matura ed importante per l'azienda e voi siete la persona più competente a cui regolarmente viene chiesto di metterci le mani. Questo occupa la quasi totalità del vostro tempo. Sempre la stessa tecnologia, sempre la stessa metodologia, sempre la stessa architettura.

Passa un anno, ne passano due, magari ne passano anche cinque. Sì, ogni tanto avete introdotto nuove librerie, rifatto un servizio con un approccio diverso, ma il cliente domanda e voi dovete consegnare. Vi ritrovate così sovraspecializzati su una tecnologia il cui mercato si è ristretto perché vetusta o perché lo stesso problema è ora risolto da software pienamente produttizzati che non richiedono continua manutenzione o customizzazione.

La vostra azienda vi sta stretta, volete cambiare per avere uno stipendio migliore, o magari andare all'estero. Dopotutto avete un profilo senior ormai. Eppure non trovate niente e quando trovate, non vi richiamano. Mentre voi eravate troppo concentrati sulle logiche aziendali e sul vostro specifico software, avete perso cambi di paradigma, cambi del mercato, nuove metodologie, rivoluzioni che hanno reso obsoleto il vostro skill set.

Ora l'unica opzione che avete è reinventarvi studiando o accettare una posizione per persone con meno seniority che probabilmente pagherà molto meno di ciò che vorreste. Per ovviare a questo problema ci si può premunire in diversi modi: studiare tecnologie, metodologie e teorie nuove, mantenersi aggiornati sull'evoluzione del vostro settore leggendo o andando alle conferenze e ascoltando come lavorano persone simili a voi. Inoltre in ambito aziendale bisogna chiedere di venir spostati su progetti diversi e quando non è possibile, ritagliarsi tempo extra per esplorare cose nuove. Se l'azienda non lo permette, mettete una data di scadenza alla vostra esperienza lavorativa: 2, 3 anni al massimo.

Il debito tecnico

Il concetto di debito tecnico non è semplicissimo da definire, men che meno da spiegare a chi non ha mai lavorato ad un progetto di sviluppo software.

Si parla di debito tecnico per raggruppare tutti quegli elementi esistenti in una codebase, in una struttura aziendale e nei suoi processi, che rallentano o rendono più dispendioso lo sviluppo e la manutenzione di un software.

In parole povere, peggiore è la qualità del tuo codice, della tua architettura e della tua organizzazione, più difficile diventerà continuare ad aggiungere feature e fixare bug, fino a che l'azienda non collasserà sotto il peso del caos incontrollato.

Ogni azienda o ogni team ha un livello di debito tecnico tollerato molto variabile. Se il business continua ad essere redditizio vuol dire che in qualche modo si è trovato un equilibrio tra costi di sviluppo ed entrate e quindi il debito tecnico è in qualche modo sotto controllo.

Tuttavia c'è una profonda differenza per il singolo programmatore: lavorare in un'azienda con basso debito tecnico significa che buona parte del vostro tempo sarà speso a sviluppare codice di qualità, fare design di nuove feature, fare ottimizzazioni. Se invece un'azienda lavora con un debito tecnico maggiore, frazioni via via crescenti del vostro tempo saranno spese a contenere il debito tecnico stesso o ad aggirarlo.

Questo si traduce nella pratica in lavoro manuale e tedioso, si traduce nell'invio di infinite mail per sopperire alla mancanza di documentazione, si traduce in riscrivere parti di codice incomprensibile, se siete fortunati. Se non lo siete, si traduce nello scrivere codice di bassa qualità per cercare di andar d'accordo con i moduli che sono troppo importanti e complessi per essere riscritti e troppo malfatti per offrire interfacce sensate.

Il risultato sarà che il vostro lavoro sarà molto più frustrante e il vostro skill set verrà irrimediabilmente contagiato dal debito tecnico: tre anni di esperienza a cercare di far quadrare file di configurazione e fare deploy a mano non valgono come tre anni di esperienza con un team di veterani in cui potrete concentrarvi esclusivamente nel produrre codice di alta qualità.

I vostri nemici

Quali sono le aziende da cui dovete guardarvi? Tutte quelle che hanno la struttura e i mezzi per incorporare grandi quantità di manodopera poco qualificata e inesperta, o tutte quelle abbastanza disperate da assumere un neolaureando a fare il lavoro di una persona esperta.

Tracciamo tre profili-tipo giusto per capire come appaia il peggio che può capitarvi.

Il tritacarne

Il Tritacarne è quell'azienda di grandi o grandissime dimensioni, multinazionale o locale, che pratica body rental in maniera sistematica. Cos'è il body rental? Approfondimento. Fanno principalmente consulenza ad aziende non-tech di grandi dimensioni o talvolta lavorano con istituzioni pubbliche.

Perché volete evitarla?

La startup campata in aria

AAA Cercasi: Blockchain developer per applicazioni di Machine Learning in Go. Anche senza esperienza.

Spesso le startup nascono da persone senza competenze tecniche e sebbene esistano aziende che forniscano consulenza tecnica per lo sviluppo delle loro idee, molte startup preferiscono formare un team tecnico interno sin dall'inizio. A seconda delle competenze dei primi membri del team, dei finanziamenti disponibili e della comprensione delle problematiche tecniche da parte dei founder, lavorare per queste realtà può spaziare dall'esperienza illuminante e formativa, fino ad una battaglia contro i mulini a vento in cui, dopo due anni di sviluppo totalmente inconcludenti, finiscono i fondi e i programmatori vengono mandati a casa.

Perché volete evitarle?

L'azienda familiare

Beppe, 54 anni, indossa un golfino nero e due paia di occhiali: un paio normali e un paio da lettura. Si è laureato in Ingegneria Elettronica 25 anni fa e ha scritto un po' di C e un po' di FORTRAN. Legge Wired, compra ogni prodotto Apple e per questo si sente al passo coi tempi.

Di giorno gestisce un'azienda di consulenza che realizza gestionali custom, siti aziendali e se gli gira, fornisce pure un pacchetto di marketing, coi volantini fatti con le stock photo coi watermark rimossi da suo figlio, neodiplomato all'ITIS e subito assunto.

I suoi clienti: PMI e istituzioni locali.

Perché volete evitarla?

Le soluzioni

Finora abbiamo parlato esclusivamente di cosa evitare e di come orientarvi, ma cosa potete fare sin da subito per rafforzare la vostra posizione?

Studio autonomo

Lo studio continuo è una realtà di numerose professioni. Questo è ancor più vero per gli informatici e i programmatori. Ignorare questo aspetto significa essere sempre un passo indietro a chi non lo fa. Potete scegliere di non investire tempo extra e imparare solo ciò che l'università o il vostro lavoro vi insegnano, ma non è quello che una buona fetta delle persone fa. Queste persone avranno sempre un CV più robusto del vostro.

La quantità di studio ottimale è molto soggettiva e vi consiglio di evitare eccessi che minaccino il vostro equilibrio vita-lavoro. Tuttavia spesso investimenti molto limitati in termini di tempo portano a risultati decisamente migliori rispetto ad una passività totale.

Cosa studiare quindi? Il mio consiglio è di studiare ciò che vi interessa di più tra le nuove tecnologie e i nuovi strumenti che emergono in un determinato periodo o in un determinato ecosistema. La fortuna di molti è che più lavorano su uno stesso problema o su uno stesso strumento/linguaggio/framework più ci si appassionano. Lo studio di numerosi argomenti che prima sarebbero stati troppo di nicchia per essere interessanti, diventano improvvisamente qualcosa in cui spendere con entusiasmo decine di ore. Non è un meccanismo che funziona per tutti, ma quando funziona spesso permette di collegare gli argomenti di studio in maniera organica. Questo chiaramente aumenta le probabilità che quanto appreso sia spendibile anche in ambito lavorativo.

Capire l'Agile

La metodologia Agile è un modo di sviluppare software ormai abbastanza comune e spesso insegnato anche in università. L'agile però è anche un modo con cui gli informatici si sono storicamente difesi dal controllo da parte dei manager e si sono ricavati uno spazio per lavorare con più autonomia e secondo i propri termini.

Chiaramente nel corso del tempo questa indipendenza è stata attaccata in tutti i modi e il risultato è stato la nascita di metodologie alternative o di versioni storpiate dell'Agile. Capire cos'è l'Agile è importante. L'Agile è vostra amica e va promossa e difesa per il vostro stesso interesse.

Colloqui

Troppo spesso ai neolaureati viene spiegato come rispondere alle domande degli intervistatori ma raramente viene spiegato che le domande che voi ponete a loro sono altrettanto importanti.

Bombardateli di domande, arrivate con un taccuino pieno di domande. Giudicate loro come loro giudicano voi. Se cercano persone competenti guadagnerete rispetto perché mostrerete che siete consapevoli della vostra professionalità e non ragazzini allo sbaraglio. Se invece cercano carne da cannone da mettere su una sedia del cliente, queste domande li metteranno in difficoltà e sarete in grado di tutelarvi.

Cosa chiedere quindi? Su questo tema si potrebbe scrivere un libro. Mi limito a darvi un po' di indicazioni generali. In primis chiedete ad amici o persone che lavorano nello stesso ruolo o campo in cui volete lavorare voi quali siano le migliori domande da porre e i dettagli a cui stare attenti. Ogni settore ha tratti differenti e in questo caso scendere nello specifico paga.

Però alcune domande generali possono, ad esempio, essere: come è organizzato il vostro workflow? Come sono composti i Team? Come si viene assegnati ad un progetto/divisione/team e come si ruota, se si ruota? Come testate il codice? Come viene deployato? Che software usate per coordinarvi (Jira, Confluence, Trello ecc ecc)? Avete meeting regolari (settimanali, mensili) e se sì, quali? Come gestite il lavoro da remoto? Come gestite la negoziazione delle ferie?

Networking

Networking è tante cose. Networking è conoscere persone. Networking è conoscere aziende. Networking è conoscere comunità. Networking è trovare lavoro con logiche che si muovono al di sotto del mercato e nella dimensione delle relazioni umane.

Se siete studenti e contate di lavorare nella città dove state studiando, potete e dovete iniziare ancora prima di laurearvi. Andate ai meetup, andate alle conferenze (che per gli studenti spesso sono scontate), approcciate persone, aggiungete profili su Linkedin, scoprite se ci sono comunità attorno alle cose che volete fare, chiedete ai vostri professori cosa succede in giro, buttatevi ad organizzare cose ogni volta che potete. Le opportunità verranno fuori da sole.

Letture

Prima abbiamo menzionato come la cultura sia un potente strumento di difesa. Il semplice studio tecnico vi aiuterà ma senza una comprensione più ampia del mondo in cui siete immersi, sarete sempre alla mercé degli eventi. Inoltre, come succede in ogni comunità, esiste uno strato di cultura condivisa dagli informatici necessaria per integrarsi veramente. Se non cogliete i riferimenti ad XKCD o al GEB potreste venire giudicati come esterni e trattati come tali.

Leggete HackerNews, Lobste.rs, reddit, Slashdot. Leggete i grandi classici: “Hackers & Painters”, “The Hacker Manifesto”, “Godel Escher e Bach”. Leggete cose nuove. Leggete notizie. Leggete critiche che arrivano da altri campi. Leggete di argomenti correlati alla tecnologia. Su questo tema spammo senza vergogna la mia reading list su tecnologia, società, politica ed etica.

Comunità

Abbiamo già parlato di comunità quando abbiamo parlato di networking, ma il valore delle comunità in ambito tecnologico va ben oltre la mera creazione di contatti. Online e offline esistono innumerevoli occasioni di aggregazione con i più svariati obiettivi. Trovare un gruppo con cui condividere un interesse o un obiettivo può aiutarvi a crescere su molti fronti.

Il consiglio più ovvio è quello di entrare in un progetto open-source e contribuire. Apprenderete a lavorare in un team, acquisirete competenze tecniche, imparerete i fondamenti politici dietro a questa enorme impresa collettiva e come navigare questa enorme e complessa comunità globale.

Ma non esiste solo questo: esistono innumerevoli chat, gruppi e forum dove confrontarsi con persone con background ed esperienze diverse dai vostri, opportunità che senza l'uso di internet vi sarebbero spesso precluse. Questo vi aiuterà, tra le altre cose, a mettere in prospettiva l'azienda in cui lavorate, paragonandola a ciò che è l'esperienza quotidiana di altri lavoratori. Cercate questi gruppi e unitevici: Reddit, Telegram, Discord, Facebook e quasi ogni altra piattaforma offre spazi di discussione per informatici.

Infine esiste tutto il mondo dell'attivismo: sia con obiettivi politici, sia come forma di volontariato, innumerevoli programmatori militano in organizzazioni che possono fare uso delle loro competenze. Queste esperienze sono particolarmente formative perché il contatto con problemi reali è spesso molto più diretto che nel mondo del lavoro. Tra il bisogno dell'utente e l'attività dello sviluppatore si frappongono gli interessi di vari intermediari che porteranno la vostra soluzione in direzioni molto diverse da quelle ideali. Nel mondo dell'attivismo invece questi intermediari spesso non sono presenti e vi sarà consentito di concentrarvi su ciò che le persone hanno bisogno.

Conclusioni

Spero di aver toccato tutti i punti importanti e avervi fornito un'intuizione di come sia possibile resistere a tutte le pessime pratiche e i tentativi di sfruttamento che ammorbano il mercato del lavoro odierno, in particolare quello italiano e in particolare quello dell'IT.

L'ultimo consiglio che vi do è di discutere tutti questi argomenti con le persone che vi circondano: fate gruppo, cercate di assorbire da loro ciò che hanno imparato per difendersi. E quando trovate uno spunto nuovo o avete un'epifania, scrivete, condividete, criticate, create.

Se qualcosa non funziona nella vostra azienda e i manager non sono disposti ad intervenire, parlatene coi colleghi. Organizzatevi. E se qualche collega fa proposte su temi che assomigliano a quelli trattati in questa guida, supportatelo.

Ah, e ovviamente fate girare questa guida.