Come cambiare lavoro e diventare programmatore

Negli ultimi anni mi è capitato di essere contattato da diversi amici e chiedermi consigli su come fare per entrare nel mondo dell’informatica e lavorare come programmatore o sistemista. La spinta – di solito – è che l’attuale posizione di lavoro è diventata “stretta” e si cercano nuovi stimoli, oppure una vecchia passione, o semplicemente perchè si sente dire che c’è molto lavoro, o si pensa si possa avere stipendi “importanti”. Inoltre sono persone senza una laurea, o senza studi tecnici.

Come fare senza laurea?

Dalla mia esperienza posso dire che non serve essere laureati per poter lavorare nell’informatica, ma serve tanta passione, tanta curiosità e voglia di imparare. Nel curriculum mettete tutti i framework e librerie avete utilizzato, in quanto a chi vi assume interessa solo quello che sapete fare. Hai la terza media ma sei molto bravo in Angular, TypeScript, html, css e sei una persona indipendente e professionale? Ti stanno cercando! E lo dicono loro! Come è possibile? semplice, i programmatori si sono “dimenticati” di aggiornarsi e adesso sono rimasti indietro nelle tecnologie “che contano”.

Se siete disponibili a valutare di trasferirvi all’estero, da sapere che nei paesi con una sana economia (es. i paesi nordici) i tecnici sono molto ricercati, in pratica quasi impossibile essere disoccupati. Pre-requisito? Sapere altre lingue!

lavorare come programmatore

Ho pensato allora di scrivere questo post, per cercare di condividere le mie informazioni e il mio personale punto di vista. Personalmente quando sento di qualcuno che vuole iniziare l’avventura nel mondo dell’informatica, sono entusiasta e cerco di dargli più informazioni possibili, in modo che possa realizzare il suo sogno, perchè io ho realizzato il mio, e fare un lavoro che ami – secondo me – non ha prezzo!

Le varie professioni in ambito informatico

Andiamo direttamente al sodo e quindi iniziamo – generalizzando – a dividere l’informatica in diversi settori, ruoli, possiamo anche dire differenti mestieri:

  • sistemista: responsabile di gestire i server e la infrastruttura di rete. Si divide in ambito Linux o ambito Windows. Necessita di competente di networking, TCP-IP, router, firewall, ecc. Ultimamente questa figura diventerà sempre meno richiesta, in quanto le aziende stanno spostandosi sul cloud, come ad esempio Microsoft Azure, dove puoi avere servizi – a parità di funzionalità – a prezzi inferiori. Ad esempio Virtual Machine che possono scalare, compresi di sistemi di backup, VPN, Sql Servers, ecc ecc. Quindi nel lungo periodo il mercato si saturerà con i sistemisti già esistenti. 10 anni fa invece le aziende avevano tutto internamente: server, file server, backup, server mail, firewall, ecc e dovevano pagare anche il costo dell’elettricità consumata. Azure è molto più economico. Anche dal punto di vista della sicurezza sta diventando tutto molto più complesso, il cloud (blindatissimo) sta diventando la scelta più saggia.
  • sviluppatore Frontend (FE): responsabile di implementare le interfacce utente in ambito web. Sempre più richiesto dal mercato, richiede una grande passione e richiede parecchi anni per diventare esperti. Richiede senso estetico e basi di grafica digitale.
  • sviluppatore Backend (BE): implementa le funzionalità non direttamente visibili, ovvero la business logic. Accesso ai dati, salvare i dati nel database, recuperare le informazioni, fare in modo che le interazioni con componenti di terze parti (ad esempio servizi google, cloud, sistemi di pagamento, ecc) funzionino in modo efficiente e che eventuali condizioni di errore vengano gestite. In pratica una sorta di “boss” dell’applicazione. Gli piace automatizzare le procedure e creare programmi che risolvono problemi reali.
  • sviluppatore di applicazioni stand-alone: un ruolo che sta svanendo a favore dello sviluppatore Frontend, sviluppa i classici programmi gestionali che vengono eseguiti sul computer locale, non utilizza quindi tecnologie web, ma robuste applicazioni per la gestione della contabilità.
  • sviluppatore FullStack: ha almeno 5 anni di esperienza, ha utilizzato in modo professionale diverse tecnologie, è indipendente sia come Frontend che come Backend. Interessato a tutti gli ambiti, solitamente anche alla parte sistemistica e gli piace acquisire nuove competenze e le sfide.
  • Amministratore di database (DBA): ha specifiche competenze sui database, come ottimizzare le query e le risorse. Richiesto da grandi aziende. Richiede competenze specifiche.
  • Scrum Master: figura che sta iniziando a diffondersi sempre di più, specialmente nei paesi nordici, funge da “facilitatore” del lavoro di un Team Agile. Segue la metodologia Agile ed ha la abilità e responsabilità di seguire le best-practice Agile, quali daily stand-up, sprint retrospective, sprint review e segue il processo di implementazione del software in iterazioni (chiamate sprint) di 2/3/4 settimane. E’ un ruolo meno tecnico e più centrato sull’interazione tra i componenti del team. All’estero si trovano corsi con esame e certificazione di due giorni (costo circa 1.500 euro).  Tutti i ruoli sopra elencati, se lavorano in un team Agile, necessitano di uno Scrum Master. In Italia però è facile incontrare Team che applicano Agile solo parzialmente (ovvero di Agile usano solo il nome), in quanto purtroppo non sono ancora chiari i benefici delle best-practice Agile (che io ho trovato notevoli!)
  • Ce ne sono anche altre:
    il SEO specialist (Search Engine Optimization) si occupa di implementare un sito web secondo le best practice di google per avere un buon posizionamento nei motori di ricerca (ovvero far uscire il sito in prima pagina) e implementa compagnie web-social-marketing,
    il Webmaster gestisce i siti web, l’hosting, crea siti web con WordPress o altri cms, segue i proprietari da un punto di vista più “business”,
    il tecnico riparatore lavora con l’hardware, ripara e sostituisce componenti, installa i programmi, antivirus, e fa la prima formazione ai clienti.

Le competenze necessarie

In particolare vorrei far capire quali sono alcune delle tecnologie richieste per ogni singolo ruolo, in modo da potervi orientare e focalizzare su un percorso di studi. Una persona motivata, con famiglia e che lavora, può – diciamo – raggiungere le competenze minime in circa un anno. In questo anno dovrà indipendentemente creare un progetto reale e funzionante (ideale è sviluppare un prodotto che vi risolva un problema reale). Ogni settimana – indicativamente – dovrebbe studiare/praticare per circa 30/40 ore, questo vorrà dire un impegno full-time. Se dopo un paio di settimane, o un paio di mesi, vi siete demoralizzati probabilmente avete puntato sul ruolo sbagliato (ad esempio Frontend) e magari dovreste provare un altro ruolo (ad esempio Backend). Quando troverete il ruolo che vi piace non vi stancherete mai di studiare e praticare!

Ci sono molti ambiti specifici che richiedono ulteriori competenze, quindi questa vuole essere solo una guida, e principalmente su tecnologie Microsoft, in cui ho più conoscenza.

  • sistemista: TCP-IP e networking in generale, mail servers, Windows Servers o Linux, tecnologie cloud (es. Microsoft Azure), Virtual Machine, amministrazione di database, regular expressions. Ambienti di sviluppo: console windows o Linux, powershell, editor di testo come notepad++, Eclipse.
  • sviluppatore Frontend (FE): Html 5, css 3, sass (css con i superpoteri), Bootstrap o Foundation, Angular o React o Vue, Javascript, Typescript, Gulp, Node, Jquery, Promises, Observables, Redux, Json, Xml. Basi di PHP o ASP. Non ultima ma anzi sempre più importante, la sicurezza (vedi OWASP). Ambienti di sviluppo: Visual Studio o il gratuito Visual Studio Code. Gestione delle revisione del codice con Git (o svn).
    Le basi di grafica riguardano i concetti di pixel/punti, RGB vs CMYK, base di editing grafico (es. Adobe Photoshop, Gimp, Adobe Ilustrator), formati raster bmp/jpeg/gif/png, formati vettoriali pdf/svg/eps, concetti di ottimizzazione delle immagini e per i tempi di caricamento delle pagine
  • sviluppatore Backend (BE): i principali linguaggi sono C#, Java, Python, PHP e altri. Alcune tecnologie/pattern per ambiente Microsoft: ASP.NET, Entity framework, MVC, WebApi, REST Api,Linq, SQL, TSql, Json, Xml, regular expressions, database relazionali (Sql Server, Oracle, PostgreSql, ecc), database documentali (RavenDb, MongoDb, ecc). Alcune tecnologie che si stanno diffondendo ultimamente (anche se già utilizzate da 20 anni) sono i broker di messaggistica (come RabbitMQ), Command Query Responsibility Segregation (CQRS), Event Sourcing (ES), Domain Driven Design (DDD). Inoltre si vedono le prime applicazioni di machine learning e l’intelligenza artificiale. Molto importante anche la sicurezza (vedi OWASP). Ambiente di sviluppo: Visual Studio o Eclipse. Gestione delle revisione del codice con Git (o svn).
  • sviluppatore di applicazioni stand-alone: Java, VB6, VBA, C#, Visual Basic.Net, Windows Forms, Window Presentation Foundation (WPF), Silverlight, Windows Communication Foundation (WCF)
  • sviluppatore FullStack: in pratica tutte le tecnologie elencate sopra!
  • Amministratore di database (DBA): Alcuni tra i DBMS relazionali più utilizzati sono Microsoft sql Server, Oracle, PostgreSql, MySql. Gestione di cluster e sistemi di replica. Negli ultimi anni sono emersi anche i database documentali come RavenDb, MongoDb, Azure Cosmos Db.
  • SEO specialist, webmastertecnico riparatore non hanno speciali competenze tecniche, sono forse sono le posizioni più semplici, ma anche quelle che hanno il mercato più saturato. Ma se avete la passione in una di queste posizioni, potrete comunque trovare il vostro spazio.

Come potete vedere lo stack di tecnologie da conoscere è incrementato notevolmente negli ultimi 15 anni, quindi essere motivati e appassionati è una cosa moto importante. Inoltre alcune tecnologie famose, come ad esempio Adobe Flash per il Frontend, o Xml per il backend, sono andate in disuso (obsolete) e sostituite da altre (per fortuna per buoni motivi!). Sembra che ogni 2/3 anni ci sia un ricambio di tecnologie, quindi il mio consiglio è di rimanere costantemente formati, almeno a grandi linee, sulle tecnologie più in voga, e di essere quindi pronti a cogliere eventuali nuove occasioni lavorative.

Vi consiglio anche questo articolo (in inglese) che schematizza le dipendenze tra le varie tecnologie con dei grafici (e devo dire molto ben fatti!).

Come fare per imparare

Il vantaggio di questa professione è che la maggior parte delle informazioni le potete trovare gratuitamente su internet, principalmente in lingua inglese, inglese tecnico che è più semplice e che quindi non richiede una grande padronanza della lingua, e inoltre Google Translator aiuta! Mi sento di consigliare i video su Pluralsight che ho trovato di buona qualità e hanno anche i sottotitoli in italiano (potete leggere un mio articolo qui).

Per quanto riguarda il Frontend, in particolare Angular + TypeScript + Redux e la gestione dello stato dell’applicazione, potete leggere questo mio articolo.

Azione chiave: Mettere in pratica

Ricordo inoltre che queste competenze si acquisiscono praticamente solo con progetti reali (ma che possiamo fare anche indipendentemente e comodamente a casa), quindi fare un percorso di studi all’università (specie in Italia), leggere dei libri, dei post sui blog o vedere dei video non è sufficiente, diciamo è solo il 5/10% di quanto serve per poter iniziare a essere produttivi (da un punto di vista di produttività aziendale).

Le curve di apprendimento sono all’inizio molto lente, ma poi diventano esponenziali e si raccolgono grandi soddisfazioni. Di sicuro non è un settore in cui si entra perchè non si sa cosa altro fare. Attenzione a non fare questo errore! sprechereste molto tempo ed energie, oltre ad avere un bella frustrazione alla fine! E si, il contatto con le altre persone è abbastanza limitato, quindi se non vi piace stare davanti al monitor tutto il giorno, potresti valutare altre posizioni con meno competenze tecniche, ma con più interazioni personali, come l’emergente ruolo di Scrum Master.

Un consiglio che posso dare è di provare un po’ di tutti i ruoli e trovare quello che vi appassiona di più.

Spero di esservi stato utile e mi piacerebbe avere un vostro parere, esperienza, o se avete qualche tecnologia che secondo voi andrebbe messa in lista!

Risorse utili

Leggi qui > I libri che consiglio

One Comment

  1. Fernanda 3 Febbraio 2018 Reply

Add a Comment

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *