La vita di un Programmatore in formato GIF – Parte 2

Poche settimane fa ho raccolto alcune gif, con l’intento di raccontare la vita quotidiana di uno sviluppatore, l’articolo ha riscosso un discreto successo, così ho deciso di farne un secondo.
Se non l’hai ancora fatto dovresti controllare la parte 1 altrimenti guarda questa raccolta epica di GIF..

La vita di uno Sviluppatore in formato GIF – Parte 1

In questo nuovo articolo ho inserito un altro elenco epico di GIF che raffigurano il giorno tipo dei programmatori.

Dopo la compilazione di parecchie nuove classi senza un warning

La mia reazione quando il mio capo mi da alcuni compiti nel Venerdì pomeriggio

Quando il problema peggiora dopo il mio bugfix

Questo sono io, che lascio l’ufficio prima di tutti gli altri

Un sviluppatore senior vs uno sviluppatore junior durante un’errore di sistema

La mia reazione quando un collega confessa di usare ancora IE

Quando uno sviluppatore senior viene a risolvere un problema

Quando un bug appare di nuovo dopo una notte intera cercando di risolvere il problema

La mia espressione quando mi chiamano durante una riunione per chiedere spiegazioni su del codice che non ho mai scritto

Quando l’amministratore fornisce accesso completo ad Internet

Quando torno dalle vacanze

Appena mi rendo conto, che stavo per eliminare il database di produzione

Questo è il mio modo di andare a lavorare il Lunedi mattina

Quando uno sviluppatore senior risolve un bug

Se ti è piaciuto l’articolo ti invito a condividerlo con amici e colleghi.
Se non lo hai ancora fatto, dai un’occhiata alla parte 1 😉

Gif prese da Coding Love e Web

La vita di uno Sviluppatore in formato GIF

Questo post contiene gli eventi quotidiani nella vita di uno sviluppatore. Mi sono trovato molte volte in queste situazioni, e tu?

Quando vado fuori per il fine settimana mentre tutti gli altri stanno ancora cercando di correggere i bug

Quando una cosa che ha funzionato il Venerdì non funziona più il Lunedi

Quando il project manager entra in ufficio

Quando la mia espressione regolare restituisce esattamente quello che mi aspettavo

Quando scrivo del codice CSS per la prima volta

Quando il codice che non ho ancora testato su dev funziona perfettamente in produzione

Quando sto distribuendo codice per la produzione

Quando rileggo il mio vecchio codice con commenti obsoleti

Quando mi chiedono se l’hai testato

Quando mostro al capo che ho finalmente risolto questo bug

Modalità-Ninja per fixare un bug 10 minuti prima della demo per il cliente

In quali di queste situazioni ti sei trovato più volte?

Se ti piacciono queste GIF dai un’occhiata anche alla la seconda parte di questa serie.

Gif prese da: Coding Love

Ada per il Boeing, Ada per l’hobbista

Sul sito Tiobe.com è possibile vedere una classifica di popolarità dei linguaggi di programmazione.  Secondo tale classifica, Java è in prima posizione, seguito a ruota da C e C++. Più giù, alla 35-sima posizione, a metà strada tra LISP e PROLOG, c’è Ada, un linguaggio general purpose che, nonostante la sua scarsa popolarità, ha delle caratteristiche molto interessanti, sia per l’azienda che per l’hobbista, sia per progetti di grandi dimensioni (è molto usato in avionica) che per piccoli sistemi quali l’STM32. (Qualche anno fa al FOSDEM è stato presentato un “micro-segway” fatto con il Lego Mindstorm e programmato in multitasking con Ada.)

Con Ada si può scrivere codice sia per grandi sistemi (come il 747) che per piccoli dispositivi quali l'STM32
Con Ada si può scrivere codice sia per grandi sistemi (come il 747) che per piccoli dispositivi quali l’STM32

Lo scopo di questo breve articolo è di far conoscere Ada ad un pubblico più ampio, descrivendo brevemente lo spirito del linguaggio, alcune delle sue caratteristiche più peculiari e le risorse a disposizione del programmatore che desideri provare questo linguaggio.




Un po’ di storia.

La storia della nascita di Ada è interessante, ma troppo lunga per essere raccontata qui. Ci limitiamo soltanto a ricordare che la prima versione di Ada (nota come Ada83) risale al 1983 e che da allora sono state prodotte revisioni ogni 10 anni circa, dando origine a Ada95, Ada 2005 e Ada 2012. L’ultima revisione è un linguaggio completo, molto potente e con alcune caratteristiche  che non si trovano comunemente in altri linguaggi.

Una curiosità a proposito del nome: il linguaggio prende il nome da Ada Lovelace, figlia di Bayron (sì, il poeta) e prima programmatrice della storia. La scrittura corretta è quindi Ada e non ADA: è un nome, non un acronimo. Scrivete “ADA” in un forum e qualcuno vi correggerà in men che non si dica…

ada_lovelace_portrait
Ada Byron, contessa di Lovelace. È considerata la prima programmatrice della storia per via del suo articolo sulla macchina analitica di Babbage (una specie di calcolatore ottocentesco alimentato a vapore e con i registri fatti con ingranaggi) in cui mostra come usare la macchina per calcolare i numeri di Bernoulli

Perché Ada?

Ada nasce con l’idea di creare un linguaggio che favorisca la scrittura di codice robusto, leggibile e facile da mantenere. Mentre linguaggi come il C enfatizzano una certa semplicità (e, perché no, eleganza), cercando di fare tutto partendo da pochi concetti base e lasciando al programmatore la responsabilità di scrivere codice corretto, in Ada il programmatore è considerato un essere umano fallibile che il linguaggio deve proteggere da se stesso. Il linguaggio ha quindi una sintassi molto stringente ed una serie di strumenti che fanno sì che un programma sintatticamente corretto abbia una tale “coerenza interna” da rendere impossibili molti errori. Non è raro che un programma di media complessità funzioni perfettamente al primo tentativo o dopo un debug minimo. In un certo senso, programmare in Ada è come fare pair programming, con la differenza che il ruolo del partner è svolto dal compilatore.

Il mitico "hello world" in Ada. Ada è relativamente verboso e come sintassi ricorda il Pascal (per chi se lo ricorda). L'ambiente di sviluppo è GPS di AdaCore.
Il mitico “hello world” in Ada. Ada è relativamente verboso e come sintassi ricorda il Pascal (per chi se lo ricorda), ma è anche molto leggibile. L’ambiente di sviluppo in figura è il GPS di AdaCore.

Peculiarità di Ada

 

Poiché una descrizione di tutte le caratteristiche del linguaggio richiederebbe molto spazio e poiché molte caratteristiche di Ada (modularità, programmazione ad oggetti, numeri complessi, librerie di vario tipo) si ritrovano in altri linguaggi, qui ci limitiamo a due soli aspetti peculiari (e molto apprezzati) di Ada: la gestione del multitasking e l’uso dei contratti.

Multitasking in Ada

In Ada i task (più noti come thread al giorno d’oggi) sono oggetti nativi, con una sintassi speciale per la loro definizione e strumenti di comunicazione (rendez-vous e oggetti protetti) built-in nel linguaggio, rendendo la programmazione multitask molto “naturale.” In Ada è inoltre possibile specificare molti dettagli di basso livello quali le politiche di dispatching o le CPU sulle quali deve girare un certo task.I task non devono necessariamente essere tutti sulla stessa macchina. Ada definisce infatti strumenti che permettono la programmazione distribuita, con task che girano su macchine diverse e che comunicano tramite semplici chiamate a procedura.

Contratti, invarianti di tipo e verifica formale

A partire da Ada 2005 è possibile assegnare a funzioni e procedure dei contratti sotto forma di pre- e/o post-condizioni che sono delle espressioni booleane che devono risultare vere al momento della chiamata (pre-condizioni) e al ritorno della procedura (post-condizioni). Una cosa simile alle pre- e post-condizioni sono gli invarianti di tipo che sono espressioni booleane associate ad un tipo definito dal programmatore e che (tipicamente) vengono usate per garantirsi la “coerenza interna” di tipi complessi. Il compilatore, se richiesto, inserirà del codice per verificare che contratti ed invarianti siano sempre soddisfatti e sollevare un’eccezione nel caso contrario. Questo meccanismo riduce notevolmente i tempi di debug poiché ferma l’esecuzione alla prima manifestazione di un errore.

Il contratto di una funzione è come un contratto tra persone: la funzione promette che farà qualcosa se rispetti le sue condizioni

In Ada è anche possibile fare una verifica formale del codice, ossia, dimostrare matematicamente che il programma funziona come desiderato (es. i contratti sono sempre rispettati), evitando sessioni di test intensive. A tale scopo il codice scritto deve essere compatibile con un sotto-linguaggio di Ada (detto SPARK) che impone ulteriori restrizioni (es. l’allocazione dinamica è proibita) necessarie per la verifica formale.

ho-dimostratoOK, mi hai incuriosito. Come comincio?

Fai un salto su LibreAda da cui potrai scaricare il compilatore GNAT (basato su gcc) e il sistema di sviluppo GPS. Il sito di LibreAda è inoltre un ottimo punto di partenza per cercare informazioni e documentazione. Se cerchi librerie e tool, puoi consultare sia il sito di LibreAda  che l’Ada Information Clearinghouse (un’altra importante fonte di informazioni)  che elenca anche alcuni progetti Open Source che usano Ada.

Se sei un principiante, potrebbe interessarti l’AdaCore University un sito di e-learning gratuito dedicato ad Ada. Al momento forse non è completissimo, ma è certamente sufficiente per bootstrappare un principiante. Un’altra risorsa molto utile è il wikibook Non è completissimo al 100%, ma la maggior parte del linguaggio è coperta.

Una volta che hai passato la fase del principiante e ti senti un adaista maturo, puoi passare alla documentazione suprema: l’amato/odiato Reference Manual (RM) Si tratta dello standard ISO che descrive il linguaggio: è certamente completo (per definizione), ma è scritto in “legalese informatico” e non è la lettura più facile che ci sia. Il mio consiglio è comunque di imparare a digerirlo. Di interessante lettura sono anche i rationale che sono documenti che descrivono la differenza tra due versioni successive. Essendo più informali i rationale tendono ad essere più comprensibili. Per esempio, il rationale di Ada 2012 è http://www.ada-auth.org/standards/rationale12.html

Per parlare con altri sviluppatori Ada puoi usare il gruppo Usenet (sì, funzionano ancora) comp.lang.ada. Il rapporto segnale/rumore è decisamente buono, i troll sono pochi e i partecipanti sono (in linea di massima) gentili e pazienti con i principianti. C’è anche un gruppo LinkedIn su Ada in cui però è più facile che girino annunci (es. nuovi tool, conferenze, …) che dubbi da parte di principianti.C’è anche un gruppo reddit.