Jul 10, 2022

Ordine, semplicità e autonomia: intervista a Diego, lo sviluppatore web

Ordine, semplicità e autonomia: intervista a Diego, lo sviluppatore web

Oggi parliamo con Diego, il pilastro dello sviluppo codice di Fiberdroid. Laureando in informatica e programmatore esperto ispirato all’ordine e alla semplicità: le soluzioni migliori sono quelle progettate bene sin dall’inizio. Partire da zero è la rincorsa che alla fine paga. È la passione la spinta che ci vuole per correre: se hai quella, vai dappertutto.

Ciao Diego, Come sei entrato in Fiberdroid?

Ho conosciuto André, il fondatore di Fiberdroid, tramite un mio amico, che in Fiberdroid stava facendo uno stage. Ha sentito che cercavano un programmatore che conoscesse Php.

Da quanti anni lavori in Fiberdroid?

ormai quasi tre anni. Dopo un primo periodo di prova sono entrato a far parte della squadra.

Anche tu collabori in telelavoro?

Sì.

Di cosa ti occupi in Fiberdroid?

Sono web developer: curo la programmazione per l’azienda. Quando sono arrivato in Fiberdroid ero l’unico a occuparmene. E lì ho fatto davvero di tutto: dai siti web fino all’area clienti.

È complicato programmare tutto da zero?

Direi di sì, abbastanza. Ci sono tanti concetti: non c’è un unico standard da seguire; non ho un decalogo di regole a cui affidarmi. È tutto molto libero. Sta al programmatore non fare danni. Secondo me è quella la difficoltà: creare qualcosa che continui a funzionare nel tempo. Non può accadere che arrivi un dato sbagliato e si rompa per sempre.

Stiamo parlando di evitare bug e garantire che i programmi gestiscano un numero crescente di clienti?

Esatto. Un’altra cosa tanto importante quanto difficile è scrivere un codice su cui si possa intervenire in modo relativamente semplice in caso di problemi. Per ottenere al meglio questo risultato è necessario che il codice sia ordinato e sintetico.

Quanti linguaggi di programmazione si utilizzano per un compito del genere?

Alla fine, gli elementi principali sono due: c’è la visualizzazione dei dati e c’è la logica. Nel web tradizionalmente si usano due o tre linguaggi: per mostrare i dati si usano Javascript e html; per la logica si può usare Java, Php, Python... etc.

E tu sei perfettamente fluente in tutti questi?

Si, direi di sì. Non li uso solo perché ci lavoro, ma li ho studiati anche alla Facoltà di informatica. Anche se, come tutti, anche io cerco ogni tanto su Google come si crea una data in Python e cose simili.

Studi informatica?

Sono all’ultimo anno. Informatica pura. ho iniziato a studiarla alle medie e alle superiori ma l’interesse che mi ci faceva dedicare oltre la scuola era tutto mio. La programmazione è una disciplina che si presta a questo. La riesci a studiare anche da solo se ti ci metti: se hai la passione, hai tutto. Trovi tantissimo di materiale per approfondire le tue conoscenze su internet; puoi esercitarti e fare qualche progetto. Puoi partire e provare a fare qualcosa in completa autonomia. Certo, se vuoi partire e programmare i router da solo, beh, quello è un altro discorso.

Una mente analitica!

A me ha sempre affascinato la matematica. Le due passioni sono nate insieme. Ecco, se tornassi indietro forse farei la facoltà di matematica. Proprio perché si possono raggiungere competenze informatiche di alto livello con la sola pratica: diversi concetti di informazione che si studiano in università, io li applicavo già nel mio lavoro e ancora prima, quando mi ci dedicavo per passione.

Quindi anche tu, come molti informatici, sei arrivato all’università già con una tua preparazione.

Sì, esatto. molte cose le avevo già viste. Programmare è quello che mi piace fare. Già prima di essere in Fiberdroid facevo le stesse cose e sono sicuro che se non fossi stato nel team di Fiberdroid le avrei fatte comunque. Avevo iniziato alla fine delle superiori: assieme a dei compagni di classe avevamo iniziato a lavorare in WordPress per un cliente. e questa esperienza è stata illuminante: avevo capito che a me non piaceva lavorare in WordPress; quindi, mi sono ripromisi che se avessi dovuto usare un Content Management System (CMS) ne avrei programmato uno dalle basi.

Perché WordPress non ti piace?

WordPress in sé va anche bene: ci puoi fare il tuo sito senza troppe difficoltà. Per la maggior parte degli usi di base è una scelta che può andare bene. Il problema è quando devi fare qualcosa di un po’ più avanzato, che magari WordPress non prevede. Lì si inizia a faticare: non puoi proprio farlo, a meno di non doverti inventare delle scappatoie improbabili. Quindi, finché devi fare un sito che sai non dovrai modificare più di tanto, WordPress ti andrà benissimo, ma se sai già che a un certo punto dovrai aggiungere delle funzioni complesse e su misura, allora è meglio partire dalle basi per poi costruirci sopra.

Quindi meglio partire da zero e costruire qualcosa di ordinato dalle fondamenta?

Per come la vedo io, decisamente sì: molto meglio investire tempo e risorse per programmare un codice fatto bene dall’inizio.

Un approccio molto ordinato.

Lo è. Senza contare che a fare le cose da zero, non ci metti necessariamente di più che a farle con un tema di WordPress, se sai come lavorare. Questo non sempre lo si comprende bene: se sai quello che fai, il tempo che impieghi non è tanto diverso. Spesso si parte a creare siti senza sapere bene cosa si sta cercando di fare; e questo può creare danni: se si decide di aggiunge una nuova funzionalità senza occuparsi della sicurezza si rischia di ottiene una maggiore vulnerabilità, magari senza nemmeno accorgersene. Spesso si fanno danni per la mancanza di solide basi: noi tutt’ora abbiamo a che fare con siti in WordPress che erano stati creati con qualche lacuna. Ci capita spesso di dover “entrare a sistemarli” perché si rompono o potrebbero tentare di hackerarli.

Quello che ho capito è che quando si programma, è necessario pensare contemporaneamente a più aspetti: prevenire i bug nel codice, ottenere un codice che possa “scalare” e gestire richieste maggiori, garantire la sicurezza dagli attacchi informatici, tutelare la privacy, ecc.

È corretto. Poi quando lo si fa è meno complicato di quanto sembri. Il problema è - anche qui -, che se uno sa cosa sta facendo, seguire queste priorità non è complicato. Se invece il programmatore è agli inizi o non ha competenze solide, potrebbe non dare la giusta importanza a tutte queste esigenze, o non dare la giusta priorità tra loro. Questo succede davvero spesso.

Come si fa a vedere se un codice è fatto bene o dovrebbe essere rifatto?

Su due piedi è piuttosto difficile: quello che si vede da fuori è l’interfaccia. Di solito il problema non sta in superficie ma è molto più a fondo, nella logica con cui si gestiscono i dati. Quando apri un’applicazione vedi principalmente l’interfaccia. non so se ci avete mai fatto caso, ma ci sono due grossi tipi di siti web: quelli che si ricaricano quando si compie un’azione, come se gli si desse il refresh di pagina, col tasto F5; e siti più moderni, dove questo non si verifica, perché viene fatto tutto dietro le quinte. La pagina rimane quella, e il lavoro che fa non lo si percepisce. Oggi, se trovi un sito che ricarica l’intera pagina, puoi tranquillamente pensare di farlo rifare. Però, come dicevo, non lo si può capire senza vedere il codice.

Ultimo anno di università…una tesi sulle telecomunicazioni, magari?

Mi interessa osservare la tecnologia Blockchain. Nello specifico, mi interessa osservare i database lato client ed esplorare come passare dalla configurazione Client-Server in favore di una configurazione di solo client. Ci sono delle applicazioni che si prestano a seguire la filosofia dei dati distribuiti su registri diffusi tra i membri di una rete, mentre in altri casi questo non avrebbe senso. L’idea è quella di riuscire a risolvere questo limite e riuscire a rendere anche queste ultime in grado di lavorare con i dati distribuiti, sempre per il solito fine: eliminare un server centrale a cui mandare tutte le informazioni e tutto questo per una questione di sicurezza. Ben inteso, poi c’è la questione dei dati ridondanti, che in linea di principio vogliono anche dire duplicazioni superflue in termini di potenza di calcolo. Ma quello che interessa a me è valutare piccole applicazioni tradizionali che si condividono i dati su più client, garantendo comunque la privacy e la sicurezza: una cosa più semplice e di basso livello rispetto a una Blockchain.

Potrebbe avere ricadute anche per Fiberdroid?

Per ora non c’è la necessità di farlo. Con l’impostazione Client server di ora riusciamo a fare praticamente tutto. Tutto quello che si potrebbe fare con una Blockchain si può fare tranquillamente in questa configurazione. Abbandonare l’impostazione Client-Server è sicuramente un bel concetto, proprio per il fatto di non dover spedire online tutti i dati verso un’unica destinazione.

Ci sono due grandi aspetti della sicurezza: la sicurezza a livello di applicazione, che garantisce che non ci sia una fuga di dati, e quella di rete, che trascura le impostazioni di un’applicazione ed è connessa a come è configurata un’infrastruttura di rete: parliamo di router, firewall, ecc. Io mi occupo in particolare di prevenire un utilizzo malevolo dei dati a chi vi accede interagendo con l’applicazione: cioè che nessuno rubi i dati, li danneggi o li modifichi. Altro discorso è prevenire l’accesso alle reti, e questo è compito dei sistemisti. Sono due diversi aspetti del tema generale della sicurezza.

Quali possono essere questi utilizzi malevoli?

Sono gli attacchi ai database. Ti faccio un esempio semplice: ci sono quegli url che hanno un punto di domanda seguito da “id = 1” oppure “punto di domanda, qualcosa uguale a qualcosa”, in genere questo implica dal lato della logica dei dati che venga eseguita un’operazione in base alle richieste immesse dall’utente.

Ecco, nel linguaggio Sql, un database è interrogato con una stringa tipo “select, asterisco, da utente, …” Una cosa che un utente malintenzionato potrebbe fare è, in un Url che ha un nome, è impostare “nome; cancella utenti”, scritto proprio nell’Url. quando questa stringa arriva, io faccio la query costruendo “seleziona tutti gli utenti dove il nome è uguale al nome che mi è arrivato nell’Url” e lì può esserci un bel problema: se io nell’Url non ho solo il nome ma “nome; cancella il database”, io lì lo sto facendo. Questo sarebbe un grave problema ma è facilmente risolvibile. Però, a tutt’oggi ci sono applicazioni vulnerabili a questo problema.

Un altro esempio molto semplice è quando ti inviano un form, magari con nome, cognome e la mail. potrebbe accadere che al posto del nome ti mettano uno script html, che - per esempio - ti rende tutta la pagina bianca: nel momento in cui l’utente lo carica, non succede nulla. Ma quando io vado a mostrare il nome sulla pagina, lo script si aziona e a me si cancella la pagina.

Quindi, tu hai programmato il codice per l’app di Fiberdroid e ti occupi della sicurezza: come si svolge la tua giornata tipica?

Da qualche tempo siamo in due a collaborare allo sviluppo, quindi riusciamo a dividerci i compiti. in linea di massima, ci spartiamo i compiti tra front-end e back-end, anche se la distinzione non è così netta. Ci sono giornate in cui testiamo e basta; altre in cui facciamo il fix dei bug; e altre ancora in cui sviluppiamo le nuove funzioni. In queste ultime ci organizziamo noi due sviluppatori e definiamo la procedura: per prima cosa, come faremmo la struttura del nuovo database, se servono nuove tabelle, ecc. Poi pensiamo all’implementazione. Ogni modifica ha almeno due ore di discussione, prima di iniziare a scrivere il codice.


Alla fine, per fare una applicazione nella maniera corretta, la parte di scrittura del codice è solo il dieci percento finale; la maggior parte del lavoro è pensare a come farlo bene.


Quindi, dopo una fase di test si passa al fix dei bug, difficile da terminare ma forse facile da fare: è quella più semplice?

Noi cerchiamo di accontentare tutti. Nella nostra Area Clienti, ciascuno di loro può creare più utenti. Un’azienda potrebbe avere più sedi, ciascuna con la sua connessione a internet: è importante, per loro e per noi, che possano comparire come diversi utenti. In questo modo, tanto il cliente quanto noi in Fiberdroid riusciamo a gestire la normale routine e le emergenze in maniera capillare. Bene, il problema è che noi serviamo clienti anche molto diversi tra loro. Per chi si rivolge alle famiglie, alla fine la tipologia di clienti è più o meno la stessa. Ma quando hai a che fare con imprese, strutture alberghiere, concessionarie, ecc., ognuna di queste ha la sua organizzazione, i suoi responsabili o delle filiali.

Immagino sia anche importante guidare le scelte dei clienti per minimizzare gli errori: dare loro troppa autonomia può avere l’effetto di farli sentire disorientati e incerti su quali impostazioni scegliere, col risultato di aumentare gli errori per loro e per voi.

Sì, certo: è il nostro compito quello di rendere facile e veloce per i clienti tanto l’inserimento dei loro dati, quanto la gestione delle procedure. Abbiamo creato un’interfaccia cliente per questo. e ne siamo orgogliosi. C’è tutto a portata di mano: innanzitutto c’è una Dashboard, dove in un colpo d’occhio si può verificare il riepilogo della situazione, senza doversi perdere tra le diverse aree, che invece permettono di andare nel dettaglio quando serva. Impostata l’anagrafica cliente, si possono creare gli utenti e definire le diverse sedi. L’area utente è importantissima perché permette un contatto continuo tra Fiberdroid e i nostri clienti: c’è la possibilità di creare e tenere aggiornata la lista dei prodotti per la connettività: gli apparati per il Network, per le reti wireless, per il centralino VoIP, ecc. Possiamo organizzare in tempi rapidissimi la spedizione di questi prodotti. Poi è possibile tenere traccia dei contratti in essere e del riepilogo dei consumi: per un’azienda è molto importante. E poi c’è l’area del supporto tecnico, che permette di aprire ticket di diversa natura, per incanalare velocemente le richieste: distinguiamo il supporto amministrativo, per i contratti e le fatture, da quello tecnico, per la configurazione dei servizi; abbiamo il supporto per il portale e quello per le attivazioni, per garantire al cliente di avere una linea attiva in brevissimo tempo dalla firma del contratto; e poi distinguiamo il supporto per i guasti ai servizi come la connettività, da quello agli apparati, che possono eventualmente essere sostituiti.

Come funzionano le riunioni che fate per decidere quali funzioni sviluppare?

Noi sviluppatori abbiamo la grandissima fortuna di avere una grande autonomia in questo ambito. E questo, credimi, è una cosa straordinaria. Ho amici e compagni di studi che lavorano in aziende anche grandi e loro mi confermano che sono davvero limitati nelle scelte che possono compiere: ci sono due o anche tre livelli decisionali sopra di loro, col risultato che non possono spostare una virgola senza autorizzazione. Noi invece siamo liberissimi. Se qualche funzione ci sembra implementata in maniera migliore con una certa configurazione, abbiamo tutta la libertà di cambiarla. Ben inteso: con buon senso! ci sono migliaia di clienti che usano tutti i giorni la piattaforma. Non possiamo cambiargli il terreno sotto i piedi all’improvviso. Se decidiamo di apportare una modifica di rilievo, ne discutiamo comunque con André. In generale, le scelte le prendiamo io e il mio collega: André ci dice cosa si vuole ottenere e noi ci occupiamo di come raggiungere l’obiettivo.

Addirittura, siamo noi sviluppatori che di solito pensiamo al flusso del lavoro: quello che un utente vede nella sua area clienti siamo noi sviluppatori a pensarlo. Abbiamo il nostro sandbox, un banco prova dove possiamo provare le modifiche prima di metterle online a disposizione dei clienti. Con questa impostazione siamo liberi di provare eventuali modifiche, testarle e sceglierle cosa tenere o scartare, perché potrebbero generare qualche bug o altro problema che non avevamo previsto. Tutto ciò senza che i nostri clienti abbiano dei malfunzionamenti o ritardi nel servizio che eroghiamo.

Avete una buona autonomia nelle decisioni ma anche nelle proposte. Questo perché parlate una lingua comune in azienda?

C’è chi come noi sviluppatori è competente nei linguaggi di programmazione, chi, come André è competente nella gestione delle reti, come router, modem, ecc. La cosa che potrebbe sembrare strana è che non è detto che ognuno abbia conoscenze approfondite nel campo altrui: i programmatori tendono a trascurare il funzionamento delle macchine nel dettaglio. In generale un programmatore non si occupa dell’hardware. Quello è un lavoro dei sistemisti, nelle aziende più grandi. Poi, in Fiberdroid siamo un team di minori dimensioni e ci capita di occuparci un po’ di tutto, e questo è anche una buona cosa perché ci permette di parlare una lingua comune e capirci meglio.

Quindi, in un’azienda di telefonia, avere in un gruppo abbastanza ristretto, con flessibilità operativa e autonomia decisionale permette di fornire un servizio rapido.

Il nostro segreto è che riusciamo a capirci anche - soprattutto! - avendo specializzazioni diverse. riusciamo davvero a collaborare come un sistema. Abbiamo visto e rivisto un sacco di moduli; corretti, cambiati. A volte anche del tutto. siamo particolarmente orgogliosi di come siamo riusciti a impostare il portale di Fiberdroid. È veloce e reattivo; non ricarica la pagina e non perde le ricerche già effettuate. Cerchiamo di rapportarci a quello che è lo standard di mercato e ti posso dire che il nostro portale è fatto davvero bene. Quando un cliente ha bisogno di assistenza si rivolge a figure come quella di Massimo, che prendono in carico il ticket del cliente e sono fulminei nel trovare una soluzione. A noi arrivano invece tutti i problemi che possono sorgere circa il portale e il suo funzionamento; noi ci occupiamo di migliorare tutti quegli elementi che permettono di rispondere più velocemente ai clienti.

Quanto si riescono a prevedere le esigenze dei diversi clienti e quante invece emergono col tempo?

Noi crediamo che avere uno standard universale per tutti sia importante: siamo fortemente orientati verso la semplicità gestionale. Il che non vuol dire facilità, anzi: spesso rendere le cose semplici richiede uno studio più approfondito delle singole peculiarità. Con una programmazione che premia la semplicità del risultato siamo sicuri di avere un codice affidabile e un’interfaccia chiara; e siamo anche sicuri che in futuro saremo in grado di maneggiare il codice nel migliore dei modi: dovesse arrivare un nuovo programmatore sarà più facile essere tutti sullo stesso piano operativo. La semplicità è ordine, e l’ordine è funzionalità. Non è una cosa banale. Se invece, per ogni cliente adottassimo delle specifiche differenti, in breve tempo la complessità gestionale esploderebbe e non saremmo in grado di essere efficienti: in queste condizioni, un cliente in più porterebbe molti più problemi.

Stiamo dicendo che la semplicità è la miglior scelta per l’affidabilità?

Decisamente sì. questa è la nostra filosofia.

Anche tu operi da remoto, ma il tuo lavoro è un po’ diverso rispetto alla routine in Fiberdroid.

Vero! collaboro a stretto contatto con il collega che si occupa anche lui di programmazione, ma spesso lavoro in autonomia totale. Nel primo periodo lavoravo di notte! questo mi ha permesso di seguire i corsi universitari con più facilità. Ho sempre avuto la possibilità di organizzare il mio lavoro in questo modo: l’autonomia è il più grande stimolo. Certo, devo rispettare le scadenze e programmare un codice che funzioni bene, ma così posso organizzarmi nel migliore dei modi. E non parlo semplicemente di orari, quello è il meno: avere la possibilità di decidere la strada migliore per ottenere un risultato è il migliore stimolo, perché ci rende responsabili del proprio lavoro. e questo permette di farlo al meglio. se faccio una cosa è perché deve funzionare: non la faccio tanto per farla. per noi programmatori soprattutto, le cose devono funzionare bene. altrimenti non servono. Poi, questo mi piace perché mi fa sentire apprezzato: se io non svolgo un compito che spetta a me non lo farà nessun altro. e questo mi stimola a dare il massimo.

Quello che vi basta è un pc, una connessione a internet e potete lavorare da tutto il mondo.

Certo, e non crediate nemmeno che ci serva tanta banda! Noi programmatori lavoriamo completamente in locale quando sviluppiamo: pubblichiamo solo una volta che abbiamo finito di scrivere il codice.

Voi sviluppatori siete al centro di un’attività che si occupa di telefonia, ma a voi non serve la banda larga: è quasi un paradosso!

Esatto. Ci connettiamo solo quando dobbiamo rilasciare un aggiornamento. Potremmo essere in un posto sperduto e avremmo meno problemi di altre professioni.

Altri articoli
creati dal nostro team

Logo Fiberdroid

Iscriviti per ricevere
i nuovi articoli al volo

Qualche argomento da suggerire? Siamo a tutt'orecchi!

Iscrivendoti, sei soggetto ad accettare la nostra Informativa sulla privacy.
Puoi annullare l'iscrizione in qualsiasi momento.