ITALIANO ENGLISH Contatti

È sempre molto difficile riassumere in poche parole il risultato di due-tre decadi di studio e di pratica continua.

Entrare in un nuovo settore è una forma di investimento personale. Occorre apprendere nuove problematiche, nuovi concetti, nuove prospettive. Tuttavia, l'arricchimento professionale è enorme, e non solo perchè ci consente di essere più efficaci in quello specifico settore. Ci permette anche di guardare ad altri problemi, passati e futuri, con un bagaglio di conoscenze e di strategie più ricco ed articolato.

Allo stesso modo, lavorare su sistemi di scala diversa (da piccoli sistemi embedded con microcontrollore a programmi da diversi milioni di righe) aiuta a valutare ed a specializzare le diverse tecniche, evitando la visione a tunnel e trovando in modo contingente gli approcci migliori.

Quanto segue riassume quindi per sommi capi alcuni approcci, principi, tecniche, linguaggi, tecnologie, stili architetturali, settori applicativi che ho approfondito nel corso del tempo. In molti casi ho contribuito con pubblicazioni e lavori originali, altrettanto spesso ho distillato in alcuni corsi specialistici i risultati più importanti.

Medico:
progettazione architetturale e di dettaglio di una piattaforma estendibile per l'acquisizione, processing e visualizzazione real-time di dati fisiologici. Ho curato anche una buona parte dell'implementazione (in C++), sia del core applicativo che di moduli di analisi dedicati per manometria esofagea e cardiologia. L'azienda (un leader mondiale del settore) produceva anche l'hardware di acquisizione, ed in quella occasione abbiamo sperimentato varie attività di hardware-software codesign.

Automazione industriale e sistemi embedded/real-time:
Ho partecipato come software architect ad una quantità di progetti, spesso mirati a risolvere con un framework il problema ricorrente delle product family - applicazioni hw/sw simili fra loro, ma con significative variazioni o personalizzazioni sui diversi impianti. Alcuni esempi: un framework per la creazione di banchi di misura e test per apparati industriali, un framework per realizzazione di supervisori in ambiente lavorazione legno, un framework per sensori in ambiente di acciaieria.
Naturalmente, ho partecipato anche alla creazione di prodotti completi, ad es. un sistema embedded per la verifica delle sicurezze elettriche in apparati consumer ed industriali, vari misuratori ottici ed elettromagnetici per le acciaierie, e così via. Nel tempo, ho creato delle architetture di riferimento per alcuni problemi ricorrenti nei sistemi reattivi, come la virtualizzazione dell'I/O piuttosto che la gestione eventi, le problematiche di DB real-time distribuiti o la gestione centralizzata e gerarchica degli allarmi, adottate poi con successo in numerosi progetti.

Bancario:
Nel corso degli anni, ho lavorato con i maggiori gruppi bancari italiani, su una varietà di progetti che vanno dai sistemi di corporate banking (client-server e web) allo smistamento flussi CBI/CBI2, dal design di un framework per i mercati finanziari ai gateway di pagamento, sino ad applicazioni back-end molto specifiche (procedura elettronica e gestione spese pratica di fido, gestione delle garanzie per la compliance alle normative Basilea 2, ecc).

Anche in questo caso, l'ampia esperienza mi ha permesso di creare alcune architetture di riferimento (ad es. per lo strato di accesso ai dati), ma anche di risolvere in modo innovativo alcuni problemi (ad esempio creando un framework per il multithreading cooperativo sfruttando l'I/O asincrono su Tandem/Guardian).

Gestionali verticali:
Ho partecipato al design di gestionali specializzati per l'ambiente di accieria piuttosto che per le catene fitness, così come per i sistemi paghe/contributi per la pubblica amministrazione. Anche qui, il riuso di architetture sperimentate per l'accesso ai dati è stato particolarmente vincente.

Fitness / wellness:
Settore che mi vede coinvolto da molti anni, sia nel design architetturale sul versante dei sistemi embedded (equipment) che di software server-based (inizialmente client/server, ormai web) di prescrizione, monitoraggio, ecc. Per il mio cliente di riferimento (leader mondiale) ho svolto un ruolo essenziale, portandoli già nell'anno 2000 ad utilizzare tecnologie touch, definendo architetture embedded che hanno superato molti salti di sistema operativo, ed in tempi recenti passando ad una versione di android custom, che per le problematiche specifiche del settore abbiamo di fatto reso multi-user / cloud-based con numerose modifiche al core. Anche sul versante server, nel tempo abbiamo spostato il sistema legacy (C++/VB6) ad una versione .NET, per poi migrare definitivamente ad un applicativo web su private cloud.

CAD/PLM:
Refactoring di sistemi CAD large-scale, sia 2D che 3D, sia per sistemi general-purpose che per CAD specializzati (settore legno e vetro/marmo). Sempre nel settore manufacturing, ho progettato un PLM molto innovativo, con architettura web, integrazione con editor sul lato client, ed interfaccia task-driven particolarmente semplice da utilizzare. In seguito ho realizzato un PLM ancora più sofisticato e flessibile in ambiente cloud / multitenant.

Militare:
Mi sono occupato di problematiche di efficienza in sistemi GIS per uso militare, in particolare della gestione di grandi immagini sonar, di animazione hypertime di grandi quantità di contatti su scala globale, di pianificazione delle missioni.

Varie:
Per concludere la panoramica, seppure non esaustiva, posso citare il design di un sistema di comunicazione Radio/GPRS per flotte di veicoli (radiotaxi) ed un sistema per ottimizzare la rete di distribuzione/vendita in settori ad alta capillarità. In quest'ultimo caso, si trattava in particolare di uno studio di algoritmi greedy per evitare l'esplosione combinatoria. In molti altri casi mi sono occupato di tematiche analoghe, realizzando anche algoritmi specializzati su architetture parallele, piuttosto che modelli di previsione (ad es. un modello di stima del traffico telefonico ed internet per il cablaggio di aree industriali).


Naturalmente, non tutti i miei interventi sono stati design-centrici. In alcuni casi, si è trattato di analizzare la qualità del codice (ad esempio, circa 6 milioni di righe COBOL nel settore assicurativo) attraverso metriche mirate, per pianificare al meglio alcune attività di manutenzione. In altri, si trattava di valutare le architetture proposte da fornitori, e di correggere eventuali divergenze rispetto alle necessità aziendali. In altri ancora, si è trattato di consulenze mirate sul process improvement, sulla gestione dei progetti o dei requisiti, e così via.

In tutti questi casi, i clienti si sono rivolti a me per la grande conoscenza ed esperienza nel settore, ma soprattutto per la comprovata capacità di portarli al risultato migliore, superando insieme ogni difficoltà, senza affiliazioni con alcun vendor e quindi con assoluta imparzialità di giudizio.

android in embedded devices
Importanti esperienze nella customizzazione di android su dispositivi embedded, con modifiche anche radicali al core del sistema (sia parte nativa C++ che Java). Alcune realizzazioni hanno portato alla richiesta di brevetti da parte dei clienti committenti. In aspectroid episode 2 sto esplorando le modifiche al core di android in chiave aspect-oriented tramite AspectJ.

android apps / systems of apps
Tutti sanno scrivere app android; meno frequente è trovare esperienze nella progettazione di sistemi di app, ovvero la creazione di una vera e propria piattaforma su cui cooperano un numero importante di applicazioni custom.
Grande esperienza nella connessione di device esterni (es. USB) a dispositivi android commerciali.

web applications / cloud-based multitenant applications
Grande esperienza nel design architetturale e di dettaglio di applicazioni web mission-critical (bancarie, monitoraggio industriale, ecc) anche di larga scala (cloud-based), principalmente su stack Microsoft. Prediligo ove possibile un approccio basato su web API e single page apps (cum grano salis).

IoT (Internet of Things)
Lungi dall'inserire questa voce solo come moda del momento, negli ultimi anni ho capitalizzato la grande esperienza sia in ambiente industriale ed embedded/RT che di sviluppo web per progettare (e seguire nello sviluppo) una delle prime piattaforme commerciali (non dimostrative - ovvero usata da aziende reali :-) per la creazione di applicazioni business connesse a dispositivi sul campo. Anche in questo caso, alcune delle innovazioni introdotte hanno portato alla richiesta di brevetti da parte del cliente committente.

server side / system windows programming
Grande esperienza nella creazione di sistemi basati su server windows, in ambito industriale (es. supervisione di processo), bancario (gestione terminali pagamento), ecc. La programmazione "di sistema" in windows e' stata a lungo un tema su cui ho svolto attività di formazione, e che ho esplorato dal livello kernel driver alle API di sistema, principalmente attraverso l'uso del C++.

embedded / real-time programming
Lunga esperienza di sviluppo in assembly / C / C++ su piattaforme embedded di varia caratura, prive di sistema operativo o con vari sistemi RT (QNX, Windows CE, Windows Embedded, Linux, FreeRTOS, ecc). Altrettanto lunga esperienza nello sviluppo di applicazioni di acquisizione e processing dati in Windows, sia in C/C++ che in C#/.NET. In questo ambito ho da tempo disegnato alcune architetture di riferimento per la gestione dell'I/O piuttosto che il dispatching estendibile di messaggi e comandi.

vertical rich clients
Nel corso degli anni ho collaborato allo sviluppo di una varietà di rich client verticali, nei più disparati settori applicativi (CAD, GIS, PLM, Manufacturing, Automazione, ecc), spesso su stack Microsoft.

Grande esperienza nel refactoring incrementale di applicazioni legacy, con cambiamenti anche radicali di tecnologie (linguaggi, migrazione da rich client a web app, ecc) e integrazione continua delle modifiche / migliorie apportate.

Analisi dei Requisiti:
conosco tutti i metodi di maggior rilievo, nonchè molte tecniche avanzate e quindi meno conosciute. Dall'UML al SysML e BPML, dall'approccio basato su Use Case piuttosto che sui Problem Frames di Jackson o le Task Description di Lauesen, da KAOS alle tecniche basate su Goal e SoftGoal, ho avuto modo di sperimentare, adattare, fondere i diversi approcci per gestire al meglio le specificità di ogni settore. Al di là della mia personale esperienza, ho trovato utile lo studio degli Analysis Pattern per arricchire la batteria di mental plan con cui affrontare nuovi progetti.

Design Architetturale e di dettaglio:
questa è in fondo la mia principale passione, e conosco quindi a fondo non solo gli strumenti e le tecniche mainstream (structured design, object oriented design, aspect oriented design, test-driven, domain-driven), le fondamentali architetture applicative (rich client, client/server, web-based, event driven, service oriented, database centered, workflow centered, ecc), i design pattern ed i pattern architetturali, ma più che in ogni altro settore ho contribuito con idee ed approcci innovativi. Sin dagli anni 90 ho ideato il Systematic Object Oriented Design, un approccio sistematico per il raffinamento incrementale dei sistemi orientati agli oggetti. In tempi più recenti, sto dedicando grande attenzione allo studio delle Forze e delle Proprietà nei sistemi software, come elementi di base per la costruzione di sistemi software-intensive.

Codifica:
anche qui, non avendo mai abbandonato la programmazione, ho grande confidenza con tutti i linguaggi mainstream (C++, Java, C#, Javascript) e con una moltitudine di linguaggi di nicchia, tecnologie, librerie e tool, il cui elenco sarebbe sin troppo lungo da stilare. La mia esperienza non si limita alla programmazione di alto livello, ma include lo sviluppo di software di sistema, incluso lo sviluppo di Kernel Driver per hardware custom e la programmazione embedded/real-time con microcontrollori. Ho avuto modo di approfondire lo sviluppo Android non solo a livello di app (e sistemi di app) ma spendendo molto tempo nel customizzarne il core stesso, come parte del porting su hardware dedicato e sistemi embedded. Alcune di queste esperienze sono descritte tra le mie pubblicazioni.

Project & Process Management:
Oltre ai consueti concetti di project management (Pianificazione, Monitoraggio, Earned Value, Steering, Risk Management, Net Present Value, Real Options, ecc) e strumenti più o meno diffusi (WBS, Gantt, PERT, Slip/Lead Charts, Burn Down Charts, ecc), ho approfondito molti lavori specifici per sistemi software intensive (Weinberg, DeMarco, Constantine, Armour, Little, ecc), nonchè una grande quantità di bibliografia su tematiche di business development (dai classici di Harvard Business Review ai lavori di Tom Peters). Naturalmente, non ho trascurato le tecniche agili, puntando tuttavia a destrutturarne la visione spesso un po' integralista, reintegrandone i metodi in un approccio contingency-based. Ad esempio, non rifiuto le tecniche di stima (dove ho anche sviluppato nuovi strumenti ed approcci) ne' l'utilizzo mirato di metriche per valutare la qualità dei sistemi, così come per identificare situazioni problematiche in modo automatico. Sul versante del test, oltre ad una approfondita conoscenza delle tecniche sistematiche white-box e black-box, ho utilizzato con eccellenti risultati le tecniche di predizione dei bug latenti (modelli Goel-Okumoto e successivi). Su questi argomenti ho create nel tempo materiale formativo specialistico.

Dott. Carlo Pescio - Via Bernardo Forte 2-3 - 17100 Savona ITALY - Tel 019-9246391 - Fax 019-854761 - P.I. 01098560095