Curriculum Vitae – Emanuele Peruffo

Sono un appassionato sviluppatore web full-stack che cerca di stare sempre al passo coi tempi nel campo IT.

Ho lavorato come libero professionista, creando software e siti web su misura. Questo mi permetteva di scegliere le tecnologie migliori per i progetti ai quali lavoravo, dandomi inoltre la possibilità di sperimentare.

Ho applicato le architetture JamSTACK e serverless programmando in TypeScript:

  • front-end statici e responsive basati su React e RxJS
  • back-end Node.js basati su ExpressJS che girano sulle piattaforme AWS Lambda e Google Cloud Functions

Esperienze di lavoro

Sviluppatore web full-stack, 2021

Klarna Italy, Milano, Italia

In Klarna ho approfondito la metodologia di sviluppo software Agile implementando Scrum.

Ho avuto l’opportunità di lavorare in team differenti che collaborano quotidianamente, grazie alla sua realtà strutturata da grande multinazionale.

Ho lavorato estensivamente su front-end React e microservizi Node.js.

Mansioni presso Klarna Italy
  • progettazione e sviluppo di un’estensione per il browser
  • progettazione e sviluppo di app iOS e Android
  • progettazione e sviluppo di microservizi

Sviluppatore web full-stack, 2014 – 2021

Libero Professionista, Vicenza, Italia

Ho iniziato lavorare come sviluppatore web libero professionista grazie a una rete di contatti che mi sono costruito durante un soggiorno di due anni a Melbourne, in Australia.

Il mio primo progetto, al quale sto lavorando tuttora, è basato sul framework PHP MVC Yii e gira su tre istanze AWS EC2 replicate affiancate a un database MongoDB, anch’esso replicato sui medesimi server. Ogni componente di questa applicazione è un container Docker creato da docker-compose.

Lavorando a questo primo progetto ho capito che la mia specializzazione necessitava di un upgrade.

Al tempo in cui Node.js stava diventando molto popolare e nuovi e interessanti framework come React, Angular e RxJS stavano emergendo, io facevo ancora affidamento a PHP e JQuery.

Per questa ragione ho investito parte del mio tempo per imparare a sviluppare secondo gli ultimi trend tecnologici.

Ho incontrato molti progetti interessanti lungo questo percorso, i quali mi hanno permesso di allargare la mia specializzazione e di aprire la mia mente.

Per questo considero fondamentale per uno sviluppatore software non smettere mai di imparare e di soddisfare le proprie curiosità, dedicando parte del proprio tempo allo studio.

Scala e il Play Framework

Sperimentare con Scala mi ha aiutato ad abbracciare la programmazione funzionale, evolvendo il mio stile di sviluppo basato sulla tradizionale programmazione OOP.

Scala mi ha permesso inoltre di approfondire la mia conoscenza di tutta la piattaforma JVM:

  • Java
  • Kotlin
  • Android
  • le tecnologie portate alla luce da Lightbend, prima conosciuta come Typesafe, come Akka, il Play Framework e il Lagom Framework
  • l’architettura Microservice
  • la sintassi MessageFormat per l’internazionalizzazione
Il framework front-end Cycle.js e RxJS

Amo Cycle.js in quanto mi ha permesso di sperimentare con l’Observable Pattern, i Reactive Streams, e di acquisire dimestichezza con la Reactive Functional Programming con JavaScript.

Grazie a Cycle.js ho scoperto RxJS, il quale ha cambiato il modo in cui gestisco le chiamate API REST e le comunicazioni real-time lato front-end.

Il pattern Mode-View-Intent che Cycle.js suggerisce di seguire è intuitivo e permette di scrivere codice pulito, leggibile, strutturato e manutenibile.

Cycle.js mi ha attirato fortemente, tanto da averlo preso in considerazione per lo sviluppo dei miei progetti front-end; purtroppo la scarsità della sua community mi fece desistere dall’adottarlo.

Serverless computing

Conosco profondamente Linux e FreeBSD; ciononostante considero la manutenzione di server inutilmente onerosa.

Il Serverless Framework mi permette invece di focalizzarmi maggiormente sullo sviluppo, delegando le attività di amministrazione di sistema ai cloud provider.

  • AWS Lambda con AWS RDS come database e AWS IoT per le comunicazioni real-time
  • Google Cloud Functions con Cloud SQL, Firebase or Firestore come database e Firebase Cloud Messaging per le comunicazioni real-time
Server in cloud

Pubblico progetti su server in cloud quando non è possibile fare affidamento sul serverless computing.

Impiego istanze AWS EC2, Vultr o DigitalOcean a seconda delle necessità.

La distribuzione Linux NixOS facilita la gestione dei miei server in cloud, i quali condividono una configurazione comune dichiarativa e funzionale.

Docker

Tutti sappiamo come Docker ci permetta di creare ambienti di esecuzione prevedibili.

Uso Docker e docker-compose quando pubblico su server in cloud.

React, Redux, RxJS and GatsbyJS

Ho scoperto GatsbyJS mentre ispezionavo vari generatori di siti statici, come Jekyll, Hugo, Hexo e Metalsmith.

GatsbyJS è esattamente ciò di cui ho bisogno in quanto crea applicazioni React ottimizzate.

React è il framework che ho scelto di adottare dopo aver valutato attentamente curve di apprendimento, dimensioni, prestazioni e grandezza delle community.

Lavorare con GatsbyJS mi ha permesso di approfondire la mia conoscenza con lo sviluppo React:

  • Redux per la gestione dello stato; lo trovo semplice e intuitivo considerando il mio approccio di Functional Reactive Programming appreso con Scala e Cycle.js
  • Emotion come libreria CSS-in-JS
  • react-intl e la sintassi MessageFormat per l’internazionalizzazione
  • RxJS per le chiamate API REST e per comunicazioni real-time
  • TypeScript
Node.js ed ExpressJS

Partendo da un background in PHP, ho trovato qualsiasi altra piattaforma di sviluppo molto attraente.

Ho sperimentato prima con Rails in Ruby, poi Play Framework e AKKA HTTP in Scala.

Ho infine scelto di adottare Node.js come piattaforma di sviluppo back-end per vari motivi:

  • community ampia
  • possibilità di programmare con un linguaggio tipizzato grazie a TypeScript
  • performance ottimali grazie a V8
  • supporto nelle principali piattaforme di serverless computing: AWS Lambda e Google Cloud Functions
  • codice riutilizzabile tra front-end e back-end
  • linguaggio di programmazione comune tra front-end e back-end

I back-end che sviluppo sono applicazioni ExpressJS:

  • codice TypeScript
  • compilazione in JavaScript con Webpack
  • autenticazione con Passport.js
  • autenticazione e autorizzazioni OAuth2 con oauth2orize
  • deploy con Serverless Framework
  • test con Jest

Sviluppatore web full-stack, 2012 – 2014

1form Online Pty Ltd, Melbourne, Australia

Ho contribuito al rifacimento e alla modernizzazione di 1form, l’applicazione web più usata in Australia e Nuova Zelanda per inoltrare domande di locazione online. 1form vantava più di tre milioni di utenti registrati nel 2018.

Ho lavorato per 1form prima come libero professionista, poi con un contratto a tempo pieno con un visto 457 Temporary Work (Skilled).

1form è nata come start-up, fondata da Chris Koch e Chad Stephens; due attenti imprenditori che hanno trovato fortuna nel lanciare velocemente questo importante servizio online.

REA Group, compagnia leader del settore immobiliare australiano, ha acquisito 1form nel 2014.

La grandezza del progetto ha richiesto un’attenta progettazione e strutturazione del codice per facilitare test e altre tecniche di agile development.

Dal secondo anno seguivo 1form quasi autonomamente:

  • sviluppo
  • test
  • beta test
  • deployment
  • amministrazione di server e database
Mansioni presso 1form Pty Ltd
  • rifacimento del vecchio 1form.com.au e lancio come 1form.com, con una base solida costruita sulla base del framework Yii
  • sviluppo con HTML 5, CSS, SASS, JavaScript, PHP e MySQL
  • project management, bug e time tracking con JIRA
  • analisi dei requisiti e progettazione
  • cooperazione con i reparti QA e servizio clienti per risolvere bug e migliorare funzionalità
  • amministrazione dei server e degli ambienti di sviluppo

Sviluppatore web, 2012

Univex, Melbourne, Australia

È stato il mio primo lavoro come libero professionista nel campo IT in Australia.

Ho lavorato a un’applicazione web preesistente, la quale visualizzava contenuti pubblicitari digitali su dispositivi remoti, comunicando con un server centralizzato scritto in Python.

Ho contribuito inoltre alla creazione di una nuova applicazione web gestionale per saloni di bellezza che accettava anche pagamenti POS; questa applicazione era basata sul framework PHP Yii.

Mansioni presso Univex
  • manutenzione di un’applicazione web preesistente scritta in Python
  • implementazione di una base solida per una nuova applicazione web estensibile
  • progettazione di un database SQL
  • project management, bug e time tracking con JIRA

Sviluppatore web full-stack, 2009 – 2011

E-side, Vicenza, Italia

Presso E-side ho affermato la mia esperienza come sviluppatore web.

Ho lavorato a molteplici siti web usando HTML, CSS, PHP, MySQL, JavaScript, JQuery, MooTools.

Considerando il periodo, ho dovuto sviluppare tecniche efficaci per implementare siti web cross-browser, focalizzandomi soprattutto sui problemi di Internet Explorer (v6 e successive).

Ho avuto l’opportunità di costruire siti web complessi basati su un’attenta progettazione del database attraverso l’implementazione di indici, trigger e funzioni personalizzate.

Ho approfondito la mia conoscenza di MySQL e imparato a scrivere query SQL avanzate e ottimizzate.

Mansioni presso E-side
  • sviluppo web
  • funzionalità avanzate di MySQL come trigger e stored procedure
  • sviluppo cross-browser

Sviluppatore web full-stack, 2007 – 2008

Studio Storti, Vicenza, Italia

Questa è stata la mia prima occupazione come sviluppatore web.

Sviluppavo applicazioni web open source per le pubbliche amministrazioni scritte in PHP, affiancato da uno sviluppatore senior.

Facevamo uso estensivo di ExtJS, una libreria JavaScript che facilitava lo sviluppo di front-end fornendo strumenti di GUI.

Mansioni presso Studio Storti
  • progettazione e sviluppo di applicazioni web con PHP, MySQL, HTML e JavaScript
  • progettazione e amministrazione di database SQL
  • esperienza pratica nel ciclo di sviluppo di software: definizione dei requisiti e analisi, progettazione, sviluppo, test e supporto

Stage come sviluppatore web full-stack, 2007

Stage presso Studio Storti, Vicenza, Italia

Ho iniziato la mia esperienza con Studio Storti con uno stage professionale di sei mesi, seguiti da un contratto a tempo indeterminato.

Leggi la sezione precedente per conoscere la mia esperienza lavorativa presso Studio Storti.

Istruzione

Perito informatico, 2001 – 2006

ITIS G. Chilesotti, Vicenza, Italia

Ho scelto questo istituto guidato dalla passione per l’IT.

Il piano di studi prevedeva due anni comuni a tutti gli istituti tecnici e tre anni di specializzazione in Informatica.

Toccava argomenti quali programmazione, database, sviluppo web, reti e amministrazione di sistema in ambienti Windows e Unix-like.

Il corso mi ha fornito le basi della programmazione procedurale e orientata agli oggetti con Pascal, Delphi con InterBase, C++ e Java.

Dedicava inoltre spazio alle tecnologie web, in particolare HTML, JavaScript, PHP e MySQL.