CoffeeBreak#11: Sulla programmazione dei computer

Data pubblicazione: 16-ott-2015 15.35.52

La capacità dei computer di ESSERE PROGRAMMATI è alla base della loro potenza e del fatto che vengono tanto usati nella vita di ogni giorno.

Ma cosa vuol dire "programmare"?

Vuol dire essere in grado di far fare qualcosa di ripetitivo e, appunto, di programmato. La definizione va al di là del concetto matematico.

Noi siamo naturalmente programmati (credo che questa sia filosofia). Infatti prima di uscire di casa guardiamo fuori se sta piovendo, e se è in atto una precipitazione prendiamo l'ombrello per non bagnarci. Probabilmente i nostri educatori ci avranno programmati da piccoli, insegnandoci che se piove ci si bagna e se si ha un ombrello no, oppure lo avremo appreso con l'esperienza bagnandoci quella volta che, piovendo, uscimmo senza protezione.

Merita osservare come la programmazione sia richiesta ed applicata in più campi, non solo quelli matematici. Così, ad esempio, un computer sarà in grado di trarci d'impaccio quando gli chiediamo di elaborare le nostre osservazioni topografiche, ma lo stesso computer, con un opportuno programma inserito, sarà in grado anche di gestire la nostra agenda o la nostra rubrica (che di matematico non hanno quasi niente), potrà scrivere una lettera eccetera.

Per tornare nel campo del calcolo diremo che scrivere una formula generale, come la si trova nei libri, è un po' programmare: alle lettere sarà sufficiente sostituire dei numeri e poi, grazie ad apposite convenzioni (ad esempio "prima le potenze, poi moltiplicazioni e divisioni ed infine somme e sottrazioni") sarà possibile risolvere QUEL PROBLEMA PER QUALSIVOGLIA VALORE.

A questo punto, e rimanendo nel campo della topografia, mi sia permesso un piccolo ricordo storico.

Fino agli anni '70 del secolo scorso le operazioni topografiche venivano condotte con strumenti meccanici (teodoliti o tacheometri), mentre si cominciavano a vedere i distanziometri (che però erano apparecchi aggiunti). I dati osservati venivano trascritti nei brogliacci di campagna e poi elaborati in vari modi. Inizialmente si usavano i logaritmi, i più fortunati avevano a disposizione delle normali calcolatrici (e le tabelle dei valori naturali delle funzioni trigonometriche), poi cominciarono a diffondersi le calcolatrici elettroniche cosiddette "scientifiche" e, quasi contemporaneamente, i computer. (Mi riferisco all'utente medio perché grosse organizzazioni ne disponevano già da tempo).

Il passo successivo sarebbe stato quello di non dover scrivere i dati osservati, ma di memorizzarli in appositi registratori (oggi inseriti nello strumento).

Credo che sia evidente che i programmi vengono scritti in funzione della potenziale clientela, e quindi programmi generici furono sviluppati prima di quelli destinati ad una nicchia di utenti e a limitate applicazioni.

Fu il caso delle topografia (fortunatamente oggi ce ne sono molti).

In quelli anni non c'erano software topografici per i nostri problemi e, men che meno, era facile gestire un plotter.

Di fronte alla grande richiesta di poter disporre di applicazioni dedicate ai campi più disparati le case costruttrici diffusero la possibilità di programmare i propri apparecchi. Addirittura (è il caso del famoso Apple) i componenti necessari per la programmazione erano inseriti in memorie non volatili (le ROM) e così vivevano assieme allo strumento. In altri casi per programmare bisognava caricare (da disco) appositi software (interpreti) o, ed era un sogno dei più esperti, tradurre il codice (ovvero le istruzioni) in linguaggio macchina (più veloce), e perciò esse andavano interpretate.

Intanto siamo alla fine degli anni '70. Un certo Dan Bricklin segue una lezione in cui l'insegnante riempie una lavagna con una tabella di numeri, tutti dipendenti uno dall'altro. Ma commette un errore. Ed è costretto a rifare tutto il procedimento. Dan ha la folgorazione: se si riesce a scrivere un programma che mostra in forma tabellare i numeri (siano essi immessi dall'utente o dipendenti dai valori presenti in altre celle), sarà possibile eseguire il ricalcolo ad ogni minimo cambiamento: nasce VisiCalc. Ovvero i fogli elettronici. Ne seguiranno altri, fra cui il famoso Lotus e l'attuale Excel. Si tratta di applicazioni che si basano su un programma, ma in un certo senso sono dei generatori di programmi loro stessi. Solo che parte del codice viene scritto (magari inconsapevolmente) dall'utente.

Facciamo un esempio (che non sia quello solito che vi fa apparire "Hello word!" sullo schermo come vostra prima applicazione): sia da calcolare la superficie di un cerchio dato il raggio. Tutti sappiamo che essa vale raggio x raggio x 3.14 (mi scusino i puristi se semplifico il Pi Greco). Un classico programma richiederebbe (dopo aver pulito lo schermo per liberarlo da operazioni precedenti) che si immetta il valore di 'r' e quindi, all'interno del programma, dovrà contenere la formula superficie = raggio x raggio x 3.14. La parte finale del programma dovrebbe dire "mostra il valore "superficie" che hai calcolato". In un foglio elettronico il procedimento non è molto differente. Solo che l'immissione del valore viene fatto in una cella (poniamo la A1, dò per scontato che sapete giocare a battaglia navale). Nella cella A2 sarà cura dell'utente scrivere la formula r x r x 3.14. Solo che dovrà farlo in una maniera comprensibile alla macchina e quindi sarà necessario rispettare certe convenzioni. Ad esempio per avvertire il computer che si tratta di un'operazione della quale si vuole vedere il risultato (e non la formula stessa) bisognerà cominciare con il segno "=" (uguale) e poi al posto di 'r' andrà scritto A1, a significare "il valore contenuto nella cella A1". Quindi scriveremo (in A2): "=A1*A1*3.14". Penserà il programma ad eseguire il calcolo ogni volta che varieremo qualche cosa (ad esempio immetteremo un nuovo raggio) e a mostrarci il risultato.

Come già detto è importante osservare che un foglio elettronico non è solo in grado di gestire numeri e concetti matematici, ma addirittura parole, stringhe e altre cose del genere.

Inoltre al suo interno è possibile utilizzare delle funzioni, che altro non sono che dei mini-programmi che risolvono problemi ripetitivi e comuni. Ad esempio si consideri che i computer, e anche i fogli elettronici, ragionano esclusivamente con gli angoli in radianti. Perciò, dal momento che il topografo italiano usa i gradi centesimali, sarà necessario convertire le osservazioni originali. Tutti sappiamo che la formula prevede la moltiplicazione per l'angolo giro (2*PiGreco) e la successiva divisione per 400, però esiste una comoda funzione che ci permette di usufruire di questo calcolo senza doverlo scrivere. Esistono funzioni per (quasi) tutte le necessità.

Facciamo una piccola disgressione e diciamo che anche altri programmi, insospettabili, possono trarre vantaggio dalle funzioni programmate che hanno al loro interno.

Ad esempio parliamo di Word, il notissimo programma di videoscrittura. E' possibile creare un agenda di nomi e indirizzi e poi generare automaticamente delle lettere (e delle buste) personalizzate. Siccome l'agenda (ovvero i valori di riferimento) possono essere contenuti in un foglio di calcolo si può anche ipotizzare di stampare delle tabelle o dei semplici disegni con i numeri personalizzati. Il limite, come sempre accade in questi casi, è la fantasia.

Anche Access (il Data Base che fa parte del pacchetto Office) è un... programma programmabile. Infatti si possono creare maschere (di immissione guidata dei dati), gestori (dei dati che sono stati immagazzinati) e report in uscita.

Il principale programma alla portata del non esperto è il BASIC.

E' un programma generale e di facile apprendimento. E' disponibile in vari dialetti. Oggi segnalo una versione gratuita "non Windows" (ovvero testuale) che si chiama FreeBasic ed una altrettanto gratuita ma "Windows orientata" che si chiama VisualBasic Community.

La programmazione delle due possibilità è molto differente: nella prima si interagisce con la tastiera, nella seconda con il mouse.

Esiste inoltre una possibilità "nascosta" all'interno dei programmi del pacchetto Office, ed è il VBA (Visual Basic for Applications). La si raggiunge con il menù "Strumenti/Macro/Visual Basic Editor". In pratica si riesce a progettare un'interfaccia che collega i moduli (form) con la "retrostante" tabella di Excel.

Un'altra possibilità molto importante, ma poco nota e ancor meno usata, è quella del registratore di Macro. In pratica il foglio è in grado di ricordare i movimenti che avete fatto con il mouse, e replicarli. E' utile per scorrere e modificare tabelle di dati.

A questo punto vediamo di rispondere alla domanda "oggi conviene saper programmare?".

Diamo per scontato la risposta affermativa basata su una maggior conoscenza del mezzo, una miglior apertura mentale eccetera.

Buona parte della programmazione topografica richiede formule troppo complesse per essere gestita da un foglio elettronico. Mentre per i calcoli più semplici esso può essere sufficiente e, anzi, raccomandabile grazie all'uso delle tabelle che rendono immediate le correzioni. Programmarle, nel sensso di scriverle, è semplice e veloce soprattutto in considerazione della possibilità di copiare e replicare le celle in maniera intelligente.

Del resto alcuni problemi (soprattutto quelli molto ripetitivi) saranno meglio risolti (meglio non è la parola rigorosamente giusta perché le potenzialità del foglio elettronico sono, in termini di precisione, le stesse ottenibili dai programmi standard) con Excel. Ad esempio si pensi alla enorme facilità di leggere ed esportare dati in formato ASCII con i campi separati da virgole (il formato *.CSV), cosa che ci permette di colloquiare con i programmi topografici e di disegno.

Ed ecco quindi la risposta: prima imparate bene i segreti del foglio elettronico, ad esempio le funzioni, l'interazione fra le schede, alcune possibilità avanzate come i filtri e gli ordinamenti alfabetici, entrate nella mentalità di chi li usa (ad esempio immettete un numero di riga univoco prima di iniziare a lavorare in modo di poter sempre ripristinare l'ordine iniziale) e poi affrontate lo studio della programmazione nel senso vero del termine.

Non esitate ad iniziare con umiltà dal sistema testuale, per passare poi, ben presto, a quello "per eventi" previsto dai sistemi "Windows orientati".