Jacopo Farina e Marco Longhitano, due dei nostri back-end developer, raccontano i trucchi di una professione fatta di pochi ninnoli e molta sostanza.

Back-end developer: sono gli uomini e le donne dietro le quinte, quelli che fanno il lavoro sporco. In una squadra di rugby giocherebbero sicuramente in mischia, sotto a prender (e a tirare) botte e a macinare metri. Ma sono anche quelli con le mani buone. Perché ci vuole una certa eleganza, una certa tecnica per scrivere bene, soprattutto quando si tratta di una prosa composta da stringhe di codice e non da semplici parole.

Cosa fa un back-end developer?

Jacopo: “Il mio lavoro come sviluppatore back-end coinvolge diverse aree dell’informatica. Non è solo sviluppo puro ma anche attenzione all’architettura, utilizzo di database e di sistemi operativi. Mi occupo poi del deployment (dell’installazione e messa in servizio) delle applicazioni e del loro monitoraggio. È un lavoro abbastanza poliedrico dal punto di vista tecnico.”

Marco: “Sono uno sviluppatore software, in particolare mi occupo del back-end, quindi di tutto quello che c’è dietro le quinte del software e che non ha un impatto visivo diretto con l’utente finale. Si tratta di integrare servizi di terze parti, di elaborare dati, immagazzinarli, impacchettarli e poi fornirli nel miglior modo possibile al front-end, lo sviluppatore che si occuperà in seguito di presentarli all’utente sotto forma di interfacce grafiche intuitive e funzionali.”

Come nasce un software? Come si arriva dal foglio bianco col cursore che lampeggia al prodotto fatto e finito? Con chi devi interagire per poter effettivamente portare a termine l’idea iniziale?

Jacopo: “Si parte sempre dalle specifiche dettate dal cliente. Dopo una prima fase di analisi che porta alla definizione più o meno formale di ciò che si vuole ottenere, si cerca subito di proporre al cliente un prototipo del progetto, utilissimo per avere un’idea concreta; utilissimo soprattutto come strumento di misura, controllo e comparazione, specialmente  all’inizio, quando nessuno ha ancora ben chiaro il risultato finale. Dopodiché, essendo sviluppatore back-end, ho a che fare con gli sviluppatori front-end, che si occupano della parte di interfaccia (ciò che l’utente vede); con gli esperti di cl­oud, che si occupano dell’infrastruttura su cui gira l’applicazione; e ovviamente ho a che fare col cliente e con gli analisti, che raccolgono le specifiche e le formalizzano in documenti funzionali.”

Marco: “C’è una prima fase in cui si raccolgono i requisiti– che cosa vuole veramente l’utente. E qui è importante che, insieme agli analisti, partecipino anche gli sviluppatori. Loro hanno le competenze tecniche per capire se una determinata soluzione è implementabile o meno. Poi si incomincia a sviluppare. Adesso le nuove metodologie “agile” accorciano i tempi del rilascio. Questo significa che dall’analisi dei requisiti alla prima cosa che vede l’utente, i tempi si restringono sempre di più. Solitamente, piuttosto che finire il software e  consegnarlo a pacchetto chiuso, si preferisce procedere per gradi e far vedere man mano l’applicazione che cresce, far seguire quasi in diretta il corso d’opera del progetto. In questo modo il cliente può indirizzarci e farci capire se siamo sulla strada giusta.”

Tu alla fine sei una specie di scrittore, uno scrittore informatico. Che cosa serve per padroneggiare questo mondo? Sono più importanti competenze di tipo logico-matematico o intuizione e estro creativo?

Jacopo: “Ciò che conta è l’esperienza: più software si scrive, più tipi di strumenti si utilizzano e più si diventa bravi ed efficienti e si evitano gli errori più comuni. Studiando – nel mio caso all’università, che forse è la strada più semplice, più diretta, ma certamente non l’unico percorso formativo che si può intraprendere– ho anche una base teorica che mi permette di andare quasi a colpo sicuro sui problemi già noti e affrontati dall’ingegneria. Questo però, lo ripeto, lo considero un valore aggiunto, non una condizione necessaria, men che meno sufficiente.”

Marco: “È un lavoro creativo, perché trovare una soluzione a un problema,  sempre nuovo, sempre diverso, implica creatività. Alla fine si tratta di scrivere una storia, un racconto utilizzando un particolare tipo di linguaggio: che ha la sua sintassi, il suo lessico, la sua grammatica. E se scrivere è una professione creativa, allora non vedo perché non possa esserlo anche programmare. Loro (gli scrittori) scrivono libri, noi scriviamo codici.

È poi un lavoro che richiede una forte passione. Tutti i lavori richiedono una forte passione, ma questo in particolar modo. Perché è talmente tecnico che è difficile impararlo in maniera forzata e soprattutto svolgerlo in maniera meccanica. Io ero uno di quei classici bambini un po’ autistici che si divertivano a smontare i computer e a smanettare con la componentistica. Attraverso l’università, quindi attraverso un percorso di formazione accademico, questa passione si è tradotta in un lavoro. Ho studiato veterinaria, che ti da quella forma mentis da…ok, va beh, era scontato: sono un ingegnere informatico, creo algoritmi.”

Prendiamo un genio del coding, una persona tecnicamente ineccepibile ma che sa fare solo quello, che ha solo quel grande talento. Se potessi instillare in questo genio una qualità, il valore in più che lo renderebbe il programmatore perfetto, cosa faresti?

Marco: “Il vero problema degli sviluppatori è che rischiano di essere un po’ autistici. E quindi non basta solo la forma mentis da…

…da veterinario?

“Esatto, da ingegnere. Bisogna anche saper interagire con le persone; la componente umana è sempre fondamentale – sembra una frase fatta, è la sacrosanta verità. Spesso si pensa troppo, se non solo, alla tecnica e non al cliente, a chi ti sta di fronte, a come l’applicazione o il software verranno utilizzati. Perché anche alla base del più asettico e impersonale dei programmi c’è un’intenzione, una volontà di potenza. Il nostro(degli sviluppatori) è un mondo un po’ chiuso. Uno sviluppatore bravo allora è uno sviluppatore che riesce a essere sempre ricettivo anche nei confronti del mondo esterno, del mondo reale.”

Come sei arrivato a fare quello che fai?

Jacopo: “Inizialmente la mia idea era di iscrivermi a fisica, per motivi molto terra a terra: pensavo che così avrei trovato più facilmente lavoro. Ma la mia passione era ed è l’informatica, quindi alla fine mi iscrissi a ingegneria informatica. Dopo la laurea ho lavorato per un anno e mezzo in una grossa azienda di consulenza, prima di passare a Spindox. Qui faccio un lavoro che è più vicino a ciò per cui ho studiato –all’atto pratico, sviluppo software. Mi è sempre piaciuto farlo, anche a livello di hobby. Adesso ho l’opportunità di monetizzare questa passione.”

Marco: “Ho studiato ingegneria informatica al Politecnico di Milano. Dopo la laurea ho voluto sperimentare un po’. Ho lavorato in diversi tipi di aziende: dalla start-up, all’azienda media, a quella di consulenza. Qui (nell’azienda di consulenza) ho avuto la possibilità di occuparmi di una grande varietà di progetti per una grande varietà di clienti di alto livello. Ho imparato tanto.”

Com’è stato il passaggio dalle precedenti esperienze lavorative a Spindox?

Jacopo: “Ho lavorato per un anno e mezzo circa in una delle più grosse società di consulenza in Italia. Rispetto alla realtà di Spindox si sentiva di più la dimensione d’azienda, quindi un’organizzazione molto più presente, molto più capillare. Il lavoro però era molto meno creativo di quello che svolgo adesso. Era un lavoro tecnico – non era neanche uno sviluppatore; era un lavoro molto più  a contatto con il cliente, che ora vedo nelle riunioni ma non quotidianamente. Sembra una risposta paracula ma, al netto di tutto, devo dire che mi trovo meglio qui in Spindox, se non altro perché, rispetto a quasi tutte le altre aziende di consulenza che conosco, si fa molta più innovazione, si ha molto più coraggio a sperimentare. E poi abbiamo – e quindi utilizziamo – uno stack di tecnologie all’avanguardia.”

Marco: “Arrivato qui in Spindox mi aspettavo la classica società di consulenza con un ambiente molto formale. Invece sono stato colpito positivamente dal clima cordiale, molto umano, che ho subito trovato in ufficio – perlomeno nell’open space dove lavoro insieme agli altri sviluppatori e ad altri colleghi; e poi anche dal punto di vista professionale ho trovato persone tecnicamente molto valide.”

È un percorso formativo che consiglieresti a un aspirante programmatore oppure ci sono valide alternative, altre vie attraverso cui accedere al ruolo di sviluppatore?

Marco: “Per fare lo sviluppatore non è necessaria una laurea. Una delle cose fondamentali dello sviluppare è rimanere aggiornati. Il mio consiglio comunque è quello di avere una formazione perché questo ti aiuta, in generale, nel lavoro di tutti i giorni, anche se, ripeto, non è necessario avere una formazione prettamente accademica.”

Cosa significa essere innovativi in un periodo in cui tutti dicono di essere innovativi perché essere innovativi ormai è un must – non si è alla moda se non si è innovativi.

Marco: “Essere innovativi secondo me significa non sedersi mai, ricercare sempre l’ottimalità con soluzioni e tecnologie sempre diverse, e non accontentarsi mai. L’innovazione è un approccio, un metodo che ti porta a trovare nuove soluzioni per problemi comuni, soluzioni semplici, apparentemente banali, per problemi complessi.”

Se avessi la bacchetta magica, quali aspetti dell’azienda miglioreresti?

Jacopo: “L’ubicazione: per quanto strategica, Bisceglie non è proprio il luogo più comodo e gioioso di Milano.”

Marco:”A volte succede che delle figure non tecniche prendano decisioni tecniche. Questo in generale non va bene. Se ci sono le figure tecniche è proprio per prendere questo tipo di decisioni.”

Mettiamo che domani mi prende il pallino della programmazione. Vengo da te e ti dico: Jacopo, voglio imparare a scrivere software. Che cosa devo fare per arrivare a padroneggiare le basi di un linguaggio di programmazione?

Jacopo: “Dipende tutto dallo scopo per cui si vuole imparare a programmare: se per mestiere o per interesse intellettuale. Come dicevo prima, la maggior parte dei problemi nell’informatica si risolvono con l’esperienza. Da qui l’importanza della pratica: bisogna fare molti esercizi, scrivere decine e decine di piccoli programmi di prova. È il metodo di apprendimento sperimentale: si impara per errori, per tentativi. Siccome però si tratta di lavorare su concetti molto astratti, su simboli – la sintassi è quella algebrica – è anche utile costruirsi una buona base teorica. In fin dei conti la programmazione è afferente alla matematica (gli studi di Turing e di Godel si rifanno alla logica, all’algebra). Poi chiaramente, nel momento in cui si deve trasformare l’algoritmo in qualcosa che funzioni, con vincoli di costo ed efficienza, si entra nell’ambito dell’ingegneria, quindi dell’esperienza, sia propria sia della comunità.”

Quindi io un domani, volendo, potrei mettermi lì e, armato di tanta pazienza e buona volontà, arrivare a capirci qualcosa pur non avendo una base teorica forte come la tua?

Jacopo: “Ho un’amica che sta imparando il linguaggio di programmazione python. Lavora in un’azienda di informatica ma non è una sviluppatrice, non ha fatto studi tecnici né ha esperienza in materia. Eppure le sta piacendo e non sta avendo grossi problemi. Quindi sì, si può sicuramente imparare anche senza avere fatto studi teorici – chiaramente si avranno maggiori difficoltà nel momento in cui si affronteranno problemi più astratti.”

Cosa significa sperimentare?

Jacopo: “Ci sono svariate componenti che concorrono allo sviluppo di un’applicazione. C’è il sistema operativo, ci sono gli strumenti per il deployment e per il monitoraggio, un motore che esegua l’applicazione – una macchina virtuale  o un interprete, se è un linguaggio compilato – e poi delle librerie e un linguaggio di scrittura (nel mio team utilizziamo soprattutto nodejs, quindi javascript, sia per il front-end sia per il back-end). Per ognuna di queste componenti ci sono tante opzioni possibili. Spesso si cerca un trade off tra strumenti consolidati ma vecchi, tendenzialmente pachidermici,  e strumenti moderni ma potenzialmente rischiosi – perché meno conosciuti. L’importante è avere un’attitudine alla sperimentazione, all’innovazione, al rischio di imbattersi in nuove complicazioni e magari anche di preferire la sfida dell’ignoto piuttosto che rimanere attaccati alle vecchie certezze, in una comoda ma mortifera comfort zone (Ken Robinson ci direbbe di prendere esempio dai bambini, che non hanno paura di sbagliare e sono sempre pronti a mettersi in gioco, n.d.a.). Anche perché poi alla fine si riesce sia a risolvere i nuovi problemi, le nuove complicazioni sia a proporre alla comunità una correzione di uno strumento – nel caso si utilizzino software open source – che noi solitamente prediligiamo.”

E i clienti come la prendono? Sono restii quando gli proponete un cambiamento in senso innovativo perché lo vedono come una cosa rischiosa oppure in media sono ben disposti, sono curiosi?

Jacopo: “Dipende. In molti casi i tecnici del cliente sono contenti di poter far evolvere la loro infrastruttura preesistente e vedono nei progetti di Spindox la possibilità di fare questo passo avanti. Il cliente poi può essere convinto semplicemente mostrandogli i risultati dei lavori precedenti di Spindox, che ormai ha un’enorme portafoglio di progetti di successo per dimostrare l’efficacia del proprio metodo.”

A proposito di progetti, quello più tosto a cui hai mai lavorato?

Jacopo: “Il progetto di adesso è abbastanza tosto. Si tratta di copiare un intero CRM, o perlomeno la porzione visibile a un utente, su mobile – un dispositivo che normalmente non è in grado di trattare una mole così importante di dati  – e di tenerlo aggiornato. Questo presenta anche dei problemi di sicurezza perché se il cellulare viene in qualche modo smarrito c’è il rischio di disperdere dati sensibili. È un progetto molto sfidante, affrontato tra l’altro con una tecnologia opens ource: Couchbase, un database che ha valore non transazionale, quindi eventually consistent.”