15 Anni di programmazione

Aneddoti e Codici di un inguaribile ottimista

novembre 2010 - Post

Giuseppe “Pino” Grella è Professore ordinario presso la Facoltà di Fisica dell’Università di Salerno. “Nato” come Fisico teorico, ha spostato i suoi campi di ricerca alla Fisica sperimentale delle particelle elementari. Assieme al Prof. Romano ha fondato un gruppo di ricerca che è sempre stato all’avanguardia nazionale e internazionale. Caratteristica peculiare del gruppo è l’aver adottato sin dall’inizio le tecnologie Microsoft, sia nella gestione degli apparati sperimentali che nell’analisi dati. Pino è una persona di straordinaria cultura e una vera enciclopedia vivente sulla storia dei linguaggi informatici. In questo primo incontro ci parlerà dei suoi esordi informatici mentre nel secondo incontro parleremo esclusivamente della sua grande passione, il Visual Basic.

/**********************************************************************************************/

P. - Il mio primo contatto con l’informatica è stata una lettura di un testo che acquistai presso le Edizioni Paoline…

S. Chi l’avrebbe mai detto!

P. ..sui computer. Stiamo parlando del 1966-1967 quando praticamente il calcolatore veniva chiamato Cervello Elettronico o Cervellone, termine che i giornalisti non hanno poi più smesso di usare. Era un approccio tipico di quel periodo: l’uso di schede perforate, etc. Poi quando ero studente  incontrai le schede perforate durante il corso di Sperimentazioni di Fisica. Si usava un PDP-11.

S. Quindi bisognava scrivere un programma in Fortran e…

image

 

P. Si! E usare la perforatrice. Si trattava di programmi molto semplici calcolo di medie e deviazioni standard. Ad essere onesti, trovavo più comodo lavorare a mano. Per esempio, ero più veloce io a calcolare a mano le radici quadrate.

S. Vero! Ricordo che alle Scuole Medie passavo ore a calcolare radici quadrate! Non credo che oggi venga più insegnato….

P. Alla fine c’era il solito traffico di schede già rodate. Certo, bastava un piccolo errore e dovevi punzonare tutto da capo. E te ne accorgevo solo a run time! Altro che debugger! Però sono esperienze che ti affinano l’attenzione. C’è un esempio clamoroso di errore... La sonda Mariner 1, stiamo parlando del 1962, ebbe un problema alla partenza e fu subito fatta esplodere in volo per evitare che causasse danni alla popolazione. Si dice che tutto nacque da un errore in una linea di codice Fortran. Come saprai, il Fortran ignora gli spazi: è un linguaggio che ricostruisce l’espressione dal contesto. Quindi, pensa all’istruzione DO 10 I=1,50 Se al posto della virgola metti un punto, crei una variabile dal nome DO10I con valore 1.50! Poiché non c’era ancora la dichiarazione obbligatoria delle variabili, si trattava di una istruzione lecita.

Continuando con la mia storia, ricordo che un amico mi portò da un suo conoscente che aveva comprato un Apple II. Rispetto ai calcolatori mostri che conoscevo si trattava sicuramente di una rivoluzione. Questa persona era un farmacista che aveva da poco subito un intervento cardiaco; quindi, aveva deciso di spendere tutti i suoi soldi togliendosi un po’ di sfizi! Pensava di creare un inventario di tutti i prodotti che vendeva ma ovviamente all’epoca non esistevano software gestionali!

Poi bisogna passare ai tempi in cui mi trasferii a Salerno. All’Università nel 1984 acquistarono il primo Mainframe, un VAX 11/750 di cui sono stato il System Manager per diversi anni. Io ero un fisico teorico ma proprio in quel periodo mi trovavo in una fase di transizione e quindi mi lanciai con entusiasmo su questa nuova esperienza, pur non avendo nessun background teorico. Appresi tutto sul campo e sui manuali splendidi della Digital: il sistema operativo VMS e una sfilza di compilatori che la Digital praticamente regalava.

 

 

S. – Cosa ricordi di questi compilatori?

P. I compilatori Digital a mio parere erano quelli più chiari in fase di diagnostica. Scovare un errore era facilissimo perché il traceback ti portava direttamente nel punto dove avevi sbagliato e ti dava tutti i dettagli dell’errore. Cosa, che a mio a parere, è scomparsa nei compilatori successivi che sono diventati sempre più criptici.

P. Installammo di tutto a partire dal Pascal. Devo dire che all’epoca portavo con me un ricordo negativo del FORTRAN per colpa di quelle schede ma poi, col tempo, mi sono reso conto che si tratta di un linguaggio di tutto rispetto per quando riguarda le applicazioni matematiche dove, a mio parere, rimane insuperato. Si dice che è un linguaggio poco sicuro ma in realtà lo sono i programmatori! E’ chiaro che se si comincia ad usare notazioni sbagliate (variabili chiamate ii oppure iii oppure iiii tutte nello stesso pezzo di codice ) prima o poi si commette la porcheria.

S, Quindi tu all’epoca scrivevi programmi in Pascal.

P. Si. L’estensione prodotta dalla Digital del Pascal era potentissima. Del Pascal vero e proprio c’era solo la sintassi. Ricordo che nell’estensione era possibile usare array di dimensione variabile, cosa che nel linguaggio ufficiale non esisteva.

Poi venne il momento di ADA. Mi incapricciai di questo linguaggio perché avevo trovato un manuale della Zanichelli dove veniva spiegata la sua nascita. Trovai interessante i motivi che portarono a creare il linguaggio allontanandosi dal Pascal. Certo, per sua natura, è un linguaggio molto rigido… però (soprattutto con la sua estensione ADA-95) consentiva la programmazione orientata ad oggetti. Non sono gli oggetti del C++, sono oggetti un po’ più seri! ADA è un linguaggio che garantisce una solidità eccezionale: anche se al solite dipende dal back-end….Ah ecco, ho dimenticato di citare poi i miei trascorsi con Eiffel!

S.- Caspita! Il progenitore dei linguaggi ad oggetti!

P. Si. Sotto Windows se ne trova una versione gratuita. Devo dire però che può dare fastidio il fatto che tutto sia un oggetto, anche un numero! Bertrand Meyer, l’inventore del linguaggio, ha aggiustato un po’ le cose consentendoti di calcolare semplicemente 3+2 ma devi sempre ricorrere alle classi. D’altra parte, però, a ben pensarci è un linguaggio più coerente: i cosiddetti linguaggi ad oggetti dove tutto è un oggetto tranne quelle cose che devono rispettare la vecchia notazione e che poi, sotto sotto, sono ancora oggetti….insomma!

 

S. Torniamo un attimo ad ADA. Linguaggio che nasce per..

P. ADA nasce per l’esigenza del Dipartimento della Difesa degli Stati Uniti di unificare tutti i compartimenti sotto il suo controllo che usavano ciascuno un proprio linguaggio di programmazione, ad esempio lo SmallTalk. Era sicuramente un problema di non facile soluzione. Fu indetta una fase di selezione alla fine della quale rimasero solo 4 aziende, il cui nome rimase strettamente riservato. A ciascuna di esse fu assegnato il nome in codice di un colore! Vinse questo team capeggiato dal francese Jean Ichbiah che, come ho detto prima, prese spunto dal Pascal estendendolo. In definitiva un linguaggio potente e solido: ciò che serviva esattamente agli Americani. Negli Anni 90 venni convocato dal Ministero della Difesa per tenere un corso rivolto al personale che doveva passare da CORAL per il controllo del traffico aereo ad ADA. Recentemente, ho incontrato per caso uno dei miei allievi che mi ha confessato come quel passaggio li avesse salvati! ADA era una soluzione quasi naturale per scrivere programmi di controllo sicuri. Non potevi permetterti di avere thread che girassero inutilmente in programmi real-time.

(Nota:  Esiste A# per .NET, un port di ADA per il framework .NET. Lo potrete trovare al seguente indirizzo)

All’epoca in cui a Salerno si trasferì il Prof. G. Romano, si pensava di realizzare un telescopio per l’osservazione di neutrini . Era appena uscito sul mercato l’Intel 286 e lo acquistammo subito perché ci serviva potenza di calcolo per Simulazioni Montecarlo! E si pensò di utilizzare Occam, un linguaggio di programmazione nato per architetture parallele. Volendo anche ADA consentiva una programmazione multi-tasking, comunque allora c’era qualcuno che usava questo Occam, un linguaggio bizzarro a dire il vero. Fortunatamente la cosa morì lì ma almeno mi convinsi che qualche tentativo per entrare nel mondo dei PC andava fatto. Infatti acquistati un piccolo portatile che poi cambia subito con uno a colori della Toshiba che mi costò un occhio della testa: 5 – 6 milioni e stiamo parlando del 1989…

S. – Prima abbiamo parlato del VAX. Tu sei passato dal VAX a Windows senza mai lavorare su un sistema Unix o Linux…

P. - Mai! Invece i miei colleghi della facoltà di Informatica, che lavoravano anch’essi con il VMS, passarono poi a Linux. Però avevano i loro motivi: c’era l’idea di avviare un filone di ricerca dedicato ai Sistemi Operativi. Il progetto si arenò perché essenzialmente stavano riscrivendo Unix. Inventare un sistema operativo non è qualcosa di banale. La stessa Microsoft, sotto sotto, ha ancora il nucleo originale. Mi è difficile pensare a un Windows XP o Vista o 7 che funzionasse cancellando kernel32. Secondo me non funzionerebbe più nulla! Alla fine, si arriva sempre là. A mio parere, più strati metti più la questione diventa complicata. Nel mio studio ho un Windows 7 che provvederò ben presto a formattare per mettere di nuovo Windows XP.

S.- Come mai?

P. - Windows Vista è un sistema operativo che gira per sé stesso. E’ autoreferenziato! A confronto, il vecchio e tanto vituperato XP è molto più leggero e, soprattutto, rodato. Non ho mai avuto problemi con Windows XP, eseguendo gli aggiornamenti costantemente. E’ chiaro che se invece l’abbandoni a se stesso, il sistema si deteriora rapidamente. Tornando a Vista, è inammissibile che un sistema operativo richieda 1,4 Gb solo per lui, accendendo una serie pressocché infinita di servizi essenziali solo per i programmatori della Microsoft e che non ci è dato di conoscere! Sul mio XP ho un bel po’ di roba e il sistema gira occupando 400 Mb di memoria, su una macchina con 2 Gb di RAM. Il vecchio VAX aveva 40 MB di memoria e serviva più di 100 utenti. E’ vero che non era appesantito dalla grafica. Proprio la grafica ha giocato a svantaggio della Microsoft: non vedo il motivo per l’esistenza di Aero. Avere il bordo della finestra semitrasparente? Qual è il motivo? Esiste una casa di software che ti consente di simulare sotto XP la grafica di Vista. Funziona benissimo ed occupa poca memoria. L’ho comprato per sfizio personale: 25 dollari!

 

S. Torniamo al periodo in cui è stata portata la Rete nel dipartimento.

P. Si. Fu il prof. Romano, che al tempo era la nostra interfaccia con la sede di Napoli dell’Istituto Nazionale di Fisica Nucleare, a farci capire che eravamo molto arretrati da questo punto di vista. E quindi portammo la rete DECNET a Salerno che consentiva di collegarci al resto del mondo. E da lì cominciò il tormentone della posta elettronica! Tutto era gestito da una sola macchina. La DECNET era una buona rete proprietaria. La DECNET fu poi soppiantata dal protocollo TCP/IP che divenne uno standard a cui non potevi più sottrarti…

S. Cosa c’era sul DECNET? Posta elettronica, talk…

O. Si, c’era il Phone che era un programma di talk, Posta elettronica, Telnet, FTP…C’era tutto quello che si trovava in TCP/IP ma non era TCP/IP. Aveva delle buone interfacce, però, che ti consentivano molto semplicemente di colloquiare con macchine Unix, Ciò era possibile installando degli appositi moduli addizionali. Col DECNET quindi non eri isolato. Alla fine migrammo anche noi comunque al TCP/IP. Fortunatamente la Digital aveva allestito già tutto per il porting. Abbandonammo DECNET non senza qualche dispiacere. Se ricordi, la macchina VAX di Napoli si chiamava VAXNA1: se dal tuo terminale a Salerno digitavi VAXNA1:: potevi, dopo aver inserito username e password, direttamente collegarti a quella macchina senza bisogno del Telnet . Quindi DECNET aveva un suo Telnet che probabilmente era molto più sicuro del suo concorrente. Sotto DECNET si accedeva alla posta mediante il comando mail…Se poi vai a vedere, la struttura di Outlook è stata copiata pari pari da quella di DECMAIL.

S. Se non sbaglio uno dei progettisti della DIGITAL è finito alla Microsoft…

P. Non un progettista qualsiasi, ma il progettista più importante della Digital: David Cutler che abbandonò polemicamente l’azienda per andare a creare Windows NT alla Microsoft. Già scrivere un sistema operativo è un’avventura, ma scriverne addirittura 3 come ha fatto lui è qualcosa di eccezionale. Lui partì con il sistema operativo che girava sulle macchine precedenti il PDP, poi ideò il VMS per i PDP e infine Windows NT. Le malelingue dicono che la sigla WNT soddisfi l ‘equazione: WNT=VMS+1. Ovviamente Cutler portò con sé tutto il know-how della Digital e le fondamenta di Windows 2000 nascono proprio da quel mondo.

S. Vogliamo ricordare che fine ha fatto la Digital?

P. La Digital è declinata rapidamente… che peccato! Prima fui acquisita dalla Compaq che a suo volta è sparita nella HP. Una fine ingloriosa dovuta all’ostinazione di non mettersi al passo coi tempi e dei Personal Computer. E’ un vero peccato perché i prodotti della Digital erano prodotti solidi che raramente davano problemi.

S. Cosa ricordi del periodo in cui esplose Internet?

P. - Le novità si susseguivano giorno dopo giorno. Ricordo che installammo qui a Salerno la prima versione di Mosaic su diversi personal computer. Certo, poi, con Netscape la nostra vita cambiò da così a così. Per la prima volta avevi a portata di mano tutto le informazioni di cui avevi bisogno! Spuntarono fuori i primi motori di Ricerca: Altavista, sviluppato dalla Digital, che girava sul Mosaic per VAX. Una novità essenziale fu che potevi scaricare software dalla rete in maniera molto semplice. E inevitabilmente i mainframe andarono decadendo: le richieste dei clienti andarono aumentando molto rapidamente e quelle macchine grosse non furono più in grado di soddisfarle. Fui veramente dispiaciuto quando spegnemmo il VAX: ma oramai la spesa di manutenzione era diventata inaccettabile.

S. Ma nel dipartimento di Fisica quanti utenti c’erano su queste macchine ( a parte gli studenti smanettoni)?

P. Prima dell’avvento della posta elettronica davvero pochi: solo quelli che facevano calcolo numerico. E ben pochi erano esperti di compilatori. Quasi nessuno sapeva dell’esistenza di f2c o dei compilatori GNU.

Poi non c’erano i print server: i plotter e le stampanti risiedevano nel centro di calcolo dove spesso c’erano file di persone che dovevano stampare file. Poi, cambiò tutto con i personal computer…e fu subito chiaro qual era la tendenza generale: se potevi copiare un software era molto meglio che acquistarlo. Anzi, il loro rammarico era che non si potesse copiare l’hardware! Io sono sempre stato dell’avviso contrario: i software vanno acquistati. Innanzitutto c’è gente che ci lavora sopra e che di deve mangiare e pagare i conti. Certe volte, sicuramente, i prezzi sono eccessivi ma quando parliamo di piccoli programmi di utility non capisco perché uno non debba comprarli. Cosa accadrebbe se in generale nel mondo la gente non venisse pagata per il lavoro che fa?

S. io non ho mai capito perché c’è gente che per fare grafica semplice ha bisogno di scaricare l’ultima versione craccata di Photoshop o altri software sofisticatissimi

P. Sicuramente. Molte volte la scelta di un software non è commensurata all’uso che se ne vuole fare. Si finisce quindi per usare solo una minima parte delle funzionalità di un programma. Quante persone sono a conoscenza del fatto che Word sia programmabile? Si usa quel software come se fosse Notepad, ne più ne meno.

S. Una curiosità…Se tu fossi responsabile in una sede di una pubblica amministrazione della scelta dell’hardware e del software come spenderesti i soldi del tuo budget? Compreresti licenze Microsoft o opteresti per software e sistema operativo libero?

P. Mi sono già trovato in una situazione del genere. In una commissione per la digitalizzazione della Provincia di Avellino. Lì optammo per una soluzione economica. Un po’ perché come dicevamo prima si tratta di prodotti sprecati per personale che non è disposto ad imparare. La soluzione ideale, per me, sarebbe predisporre un mainframe a cui accedere via terminale per un numero limitato di operazioni. Fornire al personale una macchina potente che costi 500-600 € è per me è un grande spreco. Credo che basti un editor ragionevole, ad esempio Notepad++. Ripeto: anche un prodotto come Open Office sarebbe sprecato in mondo dove i corsi di aggiornamento professionale non sortiscono alcun effetto. In definitiva, spenderei i soldi del budget per l’acquisto di una buona macchina server (5000-6000 €). Gli utenti si collegherebbero via terminale al server accedendo a pochi programmi di utility gratuiti. Open Office si può tranquillamente usare in multi-utenza. Poi completerei l’infrastruttura con una macchina di backup e, tornando agli utenti, eliminerei ogni browser…

S. (Risata)

P. Se volete navigare, installate una ADSL a casa vostra!

 

S. Tu hai anche avuto a che fare con i linguaggi LISP

P. Si. Sempre ai tempi del VAX, acquistammo per una cifra astronomica Maxima. Maxima era un software per la manipolazione di espressioni numeriche e simboliche, interamente scritto in LISP. Pensa che oggi è distribuito gratuitamente! Te lo consiglio perché non ha nulla da invidiare a MATHEMATICA.  Ho installato e lavorato con un compilatore LISP ma l’ho trovato molto….ispido. Non è una cosa che impari velocemente. A cominciare dalla struttura sintattica che è davvero fuori dal comune: tutte quelle parentesi ti fanno impazzire! E’ un altro mondo di programmazione: c’è chi separa l’universo della Programmazione in linguaggi LISP e non LISP!

(N.B. Maxima si può scaricare al seguente indirizzo)

 

S. – Che percorso formativo suggerisci a chi si avvicina al mondo della programmazione…

P. - Comincerei col Fortran, come primo impatto. E’ un come il Bridge. C’è gente che vuole subito imparare il sistema artificiale. Finché non comprendi i limiti del sistema naturale, non puoi apprendere qualcosa che nasce per superarlo. Non puoi onestamente iniziare con un sofisticato linguaggio ad oggetti sotto .NET. L’ambiente di lavoro è complesso e occorre un corso solo per apprenderlo. Non sai come aprire o creare un file, non sai come viene prodotto un eseguibile. Invece, devi avere un editor, scrivere il sorgente, aprire una linea di comando, compilare il codice sorgente e linkarlo allo opportune librerie. Non bisogna cedere alle finezze estetiche: se devi scrivere un programma che esegue un calcolo o una simulazione Montecarlo, non c’è necessità di utilizzare un linguaggio ad oggetti. Meglio il Fortran. Il motivo? Velocità e semplicità.

 

S. Ok, direi che possiamo fermarci qui. Nel prossimo incontro parleremo della tua grande passione, il VB6! Grazie e alla prossima!

P. Certo! Grazie a te e alla prossima!

Il Progetto Colt mette a disposizione dei suoi utenti un insieme di Librerie Open Source per il calcolo numerico. Il codice è scritto in Java e l’ultima release risale ad Agosto 2010. I campi di interesse sono i seguenti:

· Templated Lists and Maps

· Templated Multi-dimensional matrices

· Linear Algebra

· Histogramming

· Mathematics

· Statistics

· Random Numbers and Random Sampling

· Parallel & Concurrent programming

Navigando su Internet, ho scoperto che gran parte del codice sorgente Java è stato tradotto in C# sotto il framework .NET.

Purtroppo non esiste un sito web di riferimento e tutto questo codice è inserito in package più “generale” che ho scaricato al seguente indirizzo . Spero di non aver commesso alcun crimine per aver raccolto tutta la sezione scientifica in un unico progetto .NET che ho allegato all’articolo.

Vediamo un semplice utilizzo di questa libreria.

In teoria della probabilità la distribuzione di Poisson (o Poissoniana) è una distribuzione di probabilità discreta che esprime le probabilità per il numero di eventi che si verificano successivamente ed indipendentemente in un dato intervallo di tempo, sapendo che mediamente se ne verifica un numero Lambda.

La distribuzione di Poisson trova applicazione nello studio dei cosiddetti processi di Poisson, rappresentabili come eventi casuali, indipendenti tra loro e distribuiti uniformemente nel tempo.

Un'applicazione pratica famosa nella storia è quella connessa agli studi del dott. von Bortkewitsch sulle morti per calci di cavalli nell'esercito prussiano alla fine del XIX secolo! Esempi più concreti possono essere il numero di telefonate in arrivo ad un centralino, i guasti che si verificano in un apparato complesso formato da molti componenti indipendenti, i difetti in una striscia di materiale, etc.

Per definizione,

Dove Lambda è il numero medio di eventi per intervallo di tempo. Tornando ai nostri esempi, se in un’ora il centralino riceve in media 8 telefonate, la probabilità di riceverne 4 nello stesso intervallo di tempo è data dal valore P(4), dove Lambda = 8.

 

Supponiamo di aver importato la libreria in un nostro progetto. Il codice mostrato in figura mostra come calcolare la probabilità richiesta. L’istanza dell’oggetto Poisson viene inizializzata col valore medio noto, dopodiché il metodo pdf restituisce per un argomento x il valore della distribuzione di probabilità associata. Qualora siate interessati alla funzione cumulativa, basta invece utilizzare il metodo cdf.

La libreria contiene anche distribuzioni molto complesse come la temibile funzione Zeta, la Breit Wigner, la funzione Gamma e molte altre. Per gli appassionati della generazione di numeri random (ricordiamo la spinosa questione dell’assegnazione del premio agli incontri del gruppo DOTNETCAMPANIA!), la libreria offre generatori molto sofisticati quali DRAND e MersenneTwister. Leggete però attentamente la documentazione per essere sicuri di utlizzarli correttamente.

A tutti coloro che invece sono solo interessati al linguaggio C#, segnalo tutto il codice accessorio utilizzato nella libreria, ad esempio la costruzione dei Comparatori specializzati per i diversi tipi.

Concludo riportando le condizioni di utilizzo del codice contenuto nella libreria.

Ecco il rar della soluzione: