Ci vuole Stile

In Digistone, ma certamente in ogni azienda, capita spesso di leggere codice scritto da altri. Generalmente quando si legge codice scritto da estranei diventa molto complicato interpretarlo. In questi casi potrebbe essere molto utile un block notes, una penna multicolore e qualche bicchierino di grappa, per fare reverse engineering e tirar fuori le logiche pensate dall’anonimo programmatore. Quando invece si legge il codice di un collega è tutto diverso: innanzitutto si intuisce chi è l’autore del listato, non perché sia firmato o perché ci sia nella code documentation la chiave @author, ma semplicemente perché ogni programmatore ha il suo stile, e si impara a riconoscerlo, esattamente come quando si legge spesso uno stesso scrittore e  capita di trovare una citazione scritta sul muro del bagno dell’autogrill. Riconosciuti stile e autore, diventa molto più semplice estrapolare la logica sterigrafata nel codice.

Ma cos’è effettivamente uno stile di programmazione?

Formalmente, la definizione calza meglio per il topic di questo blog è la seguente:

Il complesso delle scelte e dei mezzi espressivi che costituiscono l’impronta peculiare di una scuola, di una tradizione letteraria, musicale o artistica, e spec. della personalità dell’autore.

Per intendere meglio: immaginiamo che il programmatore sia un pittore e che il software sia un’opera d’arte. Immaginiamo che a due pittori distinti sia affidato il compito di creare un affresco con lo stesso soggetto, con gli stessi strumenti e materiali, nelle stesse condizioni ambientali dello stesso giorno. Certamente i due pittori realizzeranno un affresco simile, ma le opere non saranno mai identiche: avranno stili differenti. Il software è identico, ma con una sfumatura diversa e un grado di libertà maggiore: lo stesso affresco può essere realizzato con una decina di stili e migliaia di logiche differenti. Per le migliaia di logiche possibili c’è poco da fare: ragioniamo tutti in modo diverso, abbiamo logiche deduttive e induttive differenti e pattern inferenziali che dipendono anche dal nostro stato d’animo. Un buon programmatore dovrebbe essere bravo a riconoscere la presenza di regole non facilmente intuibili nei propri algoritmi,  per prendersi la briga di  documentare meglio il codice e renderlo  più leggibile. Raramente però riconosceremo una personalità nelle logiche degli algoritmi, poiché le logiche possono cambiare molto a seconda dei temi, delle funzionalità, dei tempi di stesura imposti, dallo stato mentale del programmatore. Immaginiamo di dover stendere l’algoritmo che regoli l’animazione di un palloncino d’aria presente nell’intestazione di una pagina web. Poi immaginiamo di dover creare l’algoritmo del calcolo statistico della permanenza media di una macchina all’interno di alcune aree di un’azienda. Certamente gli algoritmi saranno differenti, le logiche ancora di più, ma lo stile sarà uguale. La firma è quindi nello stile! La firma è nella scelta degli spazi tra le righe, dei nomi scelti per le variabili, dei costrutti preferiti ad altri, della padronanza dell’uso di pattern e costrutti standard e conosciuti. Facciamo quindi un esempio pratico, il classico esempio di fondamenti di informatica 1: risolvere in un linguaggio di progammazione a scelta, utilizzando solo l’operatore di somma o di moltiplicazione,  il problema della successione di Fibonacci.

Un certo uomo mette una coppia di conigli in un posto circondato su tutti i lati da un muro. Quante coppie di conigli possono essere prodotte da quella coppia in un anno, se si suppone che ogni mese ogni coppia genera una nuova coppia, che dal secondo mese in avanti diventa produttiva?

Nel caso non si conosca il problema dei conigli di Fibonacci, è possibile approfondire al link: http://www.fibonacci.it/problemaconigli.html . Da una semplice ricerca in rete, si possono trovare infiniti stili di programmazione, vediamone alcuni:

Primo caso: scrittura completa con tutte le parentesi necessarie

public int fibonacci(int n)  {
    if(n == 0){
      return 0;
    }else if(n == 1){
      return 1;
    }else{
      return fibonacci(n - 1) + fibonacci(n - 2);
    }
}
Secondo caso: scrittura leggermente più leggera

public int fibonacci(int n)  {
    if(n == 0)
        return 0;
    else if(n == 1)
      return 1;
    else
      return fibonacci(n - 1) + fibonacci(n - 2);
}
Terzo caso: eliminazione degli if-else annidati
public int fibonacci(int n)  {
   switch(n){
       case 0:
          return 0;
       case 1:
          return 1;
       default:
          return fibonacci(n - 1) + fibonacci(n - 2);
   }
} 
Quarto caso: operatore ternario
public int fibonacci(int n)  {
    return n == 0 ? 0 : n == 1 ? 1 :fibonacci(n - 1) + fibonacci(n - 2);
}

E’ evidente che la stessa funzione java è stata scritta con 4 stili differenti, ognuno dei quali con differenti problemi di mantenibilità e revisione. Se gli autori dei quattro algoritmi fossero tutti differenti, certamente ritroveremmo lo stesso stile in altre sezioni di codice e riconosceremmo ovunque la bestia di satana che ha scritto fibonacci con l’uso dell’operatore ternario annidato.

Ma come si sceglie il proprio stile?

Per esperienza direi che è un processo naturale, ma va innescato, un po’ come imparare ad andare in bicicletta: bisogna imporsi di imparare, ma poi sarà naturale migliorare. Occorre leggere molto codice, per imparare quanti più modi possibili di scrivere la stessa cosa. Occorre soprattutto rileggere il proprio codice, per capire se lo stile utilizzato è leggibile, oppure c’è ancora un margine di miglioramento. Ci sono però degli studi che ci aiutano ad evitare errori comuni, banalmente evitabili. Occorre innanzitutto dire che non è possibile utilizzare lo stesso stile di programmazione per qualunque linguaggio, occorre sempre adattare il proprio stile, cercando il compromesso migliore. Alcuni ambienti di sviluppo aiutano a mantenere lo stesso stile, cercando di mantenere stesso spazio di identazione per gli annidamenti e stesso numero di righe tra corpi di codice semanticamente simili. Alcuni linguaggi di programmazione, ad esempio Python, sono molto restrittivi sullo stile, impongono un certo numero di spazio tra operatori, parametri  di ingresso e dichiarazione di classi. Vediamo però 6 regole generali, comuni a tutti i linguaggi:

 

  1. Variabili: devono sempre mantenere la stessa notazione. Se ad esempio usate il comelCase e poi passate al PascalCase, ad un certo punto non si distingueranno più oggetti da proprietà, funzioni da costruttori e sale da zucchero;
  2. Nomenclatura: chiamate le variabili, gli oggetti e le funzioni con un nome che faccia capire il suo significato intrinseco. Usate sempre una sola lingua, meglio l’inglese, perchè ha parole più brevi dell’italiano;
  3. Coesione: mantenete sempre alta la coesione della vostra funzione, della vostra classe, del vostro package. Immaginate di essere ad un pc nuovo e di dover debuggare il vostro software senza poter scaricare alcun IDE: dovete sapere sempre dove mettere mani;
  4. Lunghezza dei metodi: qualsiasi ragionamento è scomponibile in logiche deduttive/deduttive. Se il metodo di una classe diventa troppo lungo, scomponentelo sempre in logiche più piccole, anche a costo di  diminuire le performance dell’algoritmo;
  5. Commenti: commentate solo codice poco chiaro, eliminate sempre il codice commentato che non serve più;
  6. Identazione: quando l’IDE non aiuta, obbligatevi a identare il codice correttamente. L’identazione è il miglior amico dello stile.

Lascio che sia un grande esperto di stile a terminare per me questo blog:

 

Buon hack,

Sondavide

Grails plugins e submodules

Architetture Grails che prendono vita su più plugin contemporaneamente, ciascuno in un suo repository Git, senza rinunciare a comodità come “l’hot reload” per applicare immediatamente le modifiche al codice senza ricompilare tutto da capo, oppure il versioning per essere sicuri che le modifiche appena fatte a un plugin possano portare ad errori di regressione su altre applicazioni.

Metodologie così potenti richiedono solo uno “sforzo” iniziale per la comprensione e la configurazione, ma usarle alla fine è più semplice di quanto si pensi. Tutto si basa sui medesimi concetti di “commit”, “push” e “pull” che si usano nello sviluppo standard su un singolo repository Git.

Samsung per la digitalizzazione dei giovani e degli anziani di Matera

Samsung per la digitalizzazione dei giovani e degli anziani di Matera

Da giovedì 25 a sabato 27 luglio, la Capitale Europea della Cultura 2019, vedrà gli under 13 e gli over 55, protagonisti di corsi e laboratori legati all’innovazione digitale e all’utilizzo consapevole delle tecnologie connesse 

Samsung Electronics Italia annuncia oggi due iniziative volte all’educazione digitale per i cittadini più giovani e più anziani della città di Matera, in programma nella seconda metà di questa settimana.

Giovedì 25 e venerdì 26 luglio dalle 9.30 alle 12.30, presso L’Albero Azzurro in via Cappuccini 25, il team di Samsung Italia, in collaborazione con la società d’informatica materana Digistone Srl, darà vita al Coding Lab Matera 2019, uno speciale laboratorio multimediale, al quale parteciperanno circa 80 bambini materani di età compresa tra gli 8 e i 12 anni, pensato per trasmettere le nozioni basilari della programmazione informatica, utile ad avvicinare i più giovani al pensiero computazionale e a favorire lo sviluppo delle capacità di problem solving. 

Sperimentando i diversi tipi di programmazione (a blocchi, visuale, in codice), e combinando conoscenze elementari e avanzate, i giovani partecipanti del laboratorio potranno programmare dei veri e propri robot, con la possibilità di raggiungere un obiettivo finale comune. Il tutto, in un clima ludico e armonioso che, facendo leva sull’inclusività, punta a favorire la collaborazione, l’aiuto reciproco e il lavoro di gruppo.  

L’iniziativa di Samsung Electronics Italia ha trovato sponda nella disponibilità de “L’Albero Azzurro” – gestito dalla Cooperativa Il Puzzle, socia del Consorzio La Città Essenziale – che da sempre sviluppa percorsi educativi per bambini orientati al potenziamento delle competenze cognitive e comportamentali, anche attraverso l’utilizzo intelligente e consapevole delle nuove tecnologie, valorizzando la propensione naturale dei “nativi digitali” all’uso quotidiano degli strumenti e dei linguaggi della comunicazione moderna.

Invece, per sabato 27 luglio dalle ore 09:30 alle ore 12:30, presso la Sala Nelson Mandela (6° piano) del Comune di Matera in Via Aldo Moro, Samsung Italia, con la collaborazione del Comune di Matera, organizzerà l’edizione materana di SAVE for Seniors, il progetto di volontariato aziendale di Samsung, nato per offrire le competenze tecnologiche del team di Samsung Electronics Italia a favore dell’educazione digitale degli over 55, grazie a sessioni di training che spaziano dall’uso sicuro dello smartphone alla possibilità di sfruttare le potenzialità dei dispositivi connessi per migliorare la propria vita. 

Il programma dell’incontro di Matera di SAVE for Seniors è incentrato su specifiche tematiche: dall’utilizzo base di smartphone e tablet (come impostare la rete Wi-Fi e attivare una connessione dati, scegliere le modalità dello smartphone, salvare un sito tra i preferiti, creare un indirizzo email e scaricare le app) all’uso in sicurezza dei dispositivi (come impostare e scegliere la password migliore, avviare un blocco schermo sicuro). Infine, si darà voce alle passioni attraverso la spiegazione di come effettuare le ricerche online da diversi dispositivi connessi, la ricerca dei video, le chiamate con Skype, la creazione di un account su Facebook (e come gestire le impostazioni della privacy).

“Da oltre 25 anni, Samsung in Italia si contraddistingue per lo sviluppo di iniziative altamente innovative in diversi ambiti – dall’arte alla scuola, dalla sicurezza alla formazione professionale – tutte volte a valorizzare il digitale a supporto di specifiche esigenze locali. E la formazione dei più giovani, e la sensibilizzazione di tutte le generazioni di italiani ad un utilizzo consapevole della tecnologia, sono due tra le nostre principali prerogative. Per questo motivo, siamo lieti e orgogliosi di poter dare il nostro contributo attraverso questi due progetti speciali a Matera, per far sì che il maggior numero possibile di cittadini della Capitale Europea della Cultura 2019, possano riuscire ad utilizzare la tecnologia in maniera semplice e sicura, e arricchire di nuove opportunità la vita di ogni giorno” ha commentato Anastasia Buda, Corporate Citizenship ManagerdiSamsung Electronics Italia.

La vision di Samsung è di migliorare l’esperienza delle persone e dare vita a un orizzonte di nuove possibilità, attraverso soluzioni d’avanguardia capaci di ispirare il mondo. In quest’ottica si inserisce l’impegno di Samsung nel fornire il proprio contributo verso le comunità, promuovendo la crescita socio-economica tramite vari progetti di responsabilità sociale. Tra questi rientrano anche le attività di volontariato, che sono comprese nei programmi di sostenibilità dell’azienda.


Coding Lab Matera 2019

Giovedì 25 e venerdì 26 luglio dalle ore 9.30 alle ore 12.30,
presso L’Albero Azzurro in Via Cappuccini 25

SAVE for Seniors

Sabato 27 luglio dalle ore 09:30 alle ore 12:30,
presso la Sala Nelson Mandela (6° piano) del Comune di Matera in Via Aldo Moro

Samsung Italia a Matera, evento organizzato da AppForGood e Digistone

Samsung Italia a Matera, evento organizzato da AppForGood e Digistone

“Next Mobile Economy. Incontra il futuro del business”

Venerdì 17 maggio 2019, ore 10:00 – Casa Cava, Matera

Samsung Italia a Matera:

“Next Mobile Economy. Incontra il futuro del business”.

Evento dedicato all’innovazione digitale in ambito business, organizzato da AppForGood S.r.l., società italiana che opera nel campo della Digital Transformation, e da Digistone s.r.l., start up materana con competenze nello sviluppo di piattaforme Mobile, Web e IoT.

Il 17 maggio Matera, Capitale Europea della Cultura 2019, ospiterà Samsung Italia per parlare di futuro, delle innovazioni che attendono il settore business e di quelle che, invece, attendono le persone comuni.

Samsung Italia è una realtà altamente tecnologica specializzata nel trovare soluzioni innovative per soddisfare le richieste di grandi clienti che operano sul mercato globale. Stefano Perlino, IM Trainer B2B presso Samsung Italia, interverrà sul palco di Casa Cava per parlare delle tecnologie mobile più innovative nell’ambito della gestione dei processi lavorativi.

Il rapporto che unisce AppForGood e Digistone procede nel segno di una piena condivisione di visioni e progetti.

Digistone, acquisita da AppForGood nel corso del 2019, realizza prodotti e servizi tecnologici altamente innovativi.

È una realtà giovane in continua crescita, costituita da un gruppo di professionisti con competenze specifiche nella gestione e nello sviluppo di tecnologie importanti sia per la quotidianità delle persone che la gestione delle attività lavorative aziendali.   

Digistone è un’azienda innovativa nel contesto materano e meridionale che non nasconde l’ambizione di voler diventare un polo di attrazione per quanti vogliano vivere e lavorare nel luogo in cui sono nati ed hanno trascorso la propria infanzia.

AppForGood e Digistone operano a stretto contatto con il territorio materano e con questo incontro inaugurano una serie di eventi sul tema tecnologico e culturale.

Agenda

Ore 10:00

  • Ore 10:00
  • Welcome speech e introduzione
  • AppForGood SRL (Giuseppe Mola), Digistone SRL (Giuseppe Iacobucci)

Ore 10:30

  • Next Mobile Economy
  • Soluzioni SamsungMobile(S.Perlino)

Ore 11:15

  • Update Line up Samsung Business Mobile (S.Perlino)

Ore 12:00

  • Chiusura lavori

Ore 13:00

  • Partner’s Brunch