1. LA STORIA E L’EVOLUZIONE DEI LINGUAGGI DI PROGRAMMAZIONE
gennaio 19th, 2009
Icefox Software
Tutto ciò che ti serve per l'informatica. Facile!








Nel capitolo precedente abbiamo parlato dei livelli dei linguaggi di programmazione. Si è visto come la suddivisione in livelli avviene. Infatti quando parliamo di alto o basso livello non parliamo delle caratteristiche tecniche di un linguaggio ma, invece, della sua distanza dalla macchina. Per distanza non indichiamo i centimetri che ci distano dal computer. Immaginavo già qualcuno che andava a prendere il metro per vedere a che livello era. Risate a parte, per distanza si intende la distanza di semantica dal linguaggio che capisce il computer: il linguaggio binario. Nel corso di questo capitolo parleremo del rapporto che c’è tra software e hardware, toccheremo le definizioni di compilatore ed interprete, definizioni necessarie per proseguire in questo cammino verso la programmazione.
Bene o male, sappiamo tutti la differenza che occorre tra l’hardware e sotware. Nonostante ciò è bene ripetere questa definizione che spesso da nascita alle confusioni più disparate:
Hardware: Tradotto in inglese significa ferraglia. L’hardware rappresenta lo scheletro della macchina, tutti i componenti fisici che materialmente si possono toccare sono i componenti hardware. Un hardware può essere una memoria RAM, un Processore, ma anche la USB Pen è un dispositivo hardware.
Software: Il software rappresenta i programmi, ovvero quell’insieme di programmi che sono in grado di far funzionare una macchina programmabile (il pc, un cellulare ecc..).
Potrebbe essere spontanea la domanda: a me programmatore cosa può interessare il rapporto che intercorre tra il software e l’hardware di una macchina? Alla domanda si può rispondere in modo molto semplice. Se nel capitolo precedente abbiamo detto che la prima cosa che un programmatore deve sapere è il cosa programmare, al secondo posto deve sicuramente mettere in conto le potenzialità che il suo programma ha bisogno per funzionare. Un programma occupa dello spazio sull’hard disk, e per funzionare utilizza la memoria RAM.
Sapere quindi che un programma andrà su un computer che non riuscirà ad eseguire quelle istruzioni è obbligatorio, perchè si potrà distribuire un programma che occupi meno risorse, oppure nel peggiore dei casi, si avvisa l’utente che quel programma non è designato per quel determinato computer. Ecco perchè è stato reso obbligatorio specificare le caratteristiche di un programma, mettendone in evidenzia sopratutto le risorse che richiede per un corretto funzionamento.
Smentiamo poi chi vuole mettere su piani diversi queste due componenti che caratterizzano un compuer funzionante. Dire che l’hardware ha una valenza maggiore del software o viceversa è poco corretto. È come dire che il binario sinistro di un treno è più importante di quello destro. Hardware e Software camminano in modo parallelo, poichè se uno manca, l’altro automaticamente non serve a niente. Provate voi ad utilizzare un computer senza il sistema operativo e senza il BIOS, oppure prendetevi in mano un cd. A cosa serve? Diventano, l’uno senza l’altro, un insieme di cose inutili, buone solo ad essere cestinate.
Più volte nel corso dei capitoli precedenti abbiamo parlato del codice binario. Il computer è in grado, infatti di comprendere solamente questo codice formato da numeri, da 2 numeri: lo zero e l’uno. Lo zero indica un segnale OFF, FALSO, NO mentre la cifra uno indica segnali come ON, VERO, SI. Al computer quindi non potremo mai parlare in inglese, state sicuri che non ci degnerà neanche della sua attenzione. Tuttavia imparare il linguaggio binario è davvero molto difficile. Ed è proprio per l’esigenza di scrivere semplicemente i programmi che nascono due strumenti che fanno si che oggi programmare sia molto semplice: i compilatori e gli interpreti. Diamone la definizione:
Compilatore: Si definisce compilatore quel programma che traduce simultaneamente tutte le righe di un codice, in istruzioni binarie, che possono essere comprese dal computer. Si definiscono poi linguaggi compilati, quei linguaggi che utilizzano questa tecnica.
Anche se non informatica, un esempio di compilazione è una traduzione. Infatti il compilatore non fa altro che tradurre le istruzioni di un linguaggio di programmazione in istruzioni del linguaggio macchina.
Interprete: Si definisce interprete quel programma che traduce un’istruzione alla volta dal linguaggio di programmazione al codice binario. Si definiscono linguaggi interpretati quei linguaggi che lavorano in questa logica.
Anche qui possiamo fare un esempio per capire questa logica. Immaginate un convegno ed un interprete che fa la traduzione parola per parola di quello che dice un’altra persona. Questa logica lavora, su grandi linee, in questo modo.
Chiudiamo qui questo quarto capitolo. Dal prossimo capitolo inizieremo ad entrare nell’ottica del problema, guardando la struttura di esso, delle risoluzioni. In particolare inizieremo a parlare dell’algoritmo, che sta alla base di tutta la programmazione. Come al solito se avete problemi non esitate a commentare.
Nel capitolo precedente si è parlato, in forma tuttavia molto generica, dei paradigmi di programmazione. Si è detto cosa erano, a che servivano e come classificano il linguaggio di programmazione. Scegliere un paradigma piuttosto che un altro non dipende dal programmatore e dal paradigma che ci sta più simpatico. Bensì il paradigma è scelto in base al programma che dobbiamo portare a termine. Se sarà un programma semplice ci basterà anche solo il paradigma imperativo, se lo vogliamo fare con un taglio più reale ci serviremo del paradigma ad oggetti. Insomma, se credete che la cosa più difficile per la creazione di un software sia la scrittura vi sbagliate di grosso. Il lavoro di progettazione è quello che determinerà il successo o meno di un software.
Ancora per un capitolo, questo, parleremo dei linguaggi di programmazione. Concluso questo capitolo i linguaggi di programmazione non saranno più il centro dei nostri studi, ma solamente un punto di riferimento. Nel corso del terzo capitolo parleremo della suddivisione dei linguaggi di programmazione non per paradigma, ma per lontananza dalla macchina.
I linguaggi di programmazione possono essere suddivisi in categorie che vengono chiamati livelli. Esistono vari modi di classificare un linguaggio di programmazione. Il primo è, come detto nel precedente capitolo, per paradigma, l’altro è per distanza dalla macchina. Preferendo la seconda scelta si ha una visione generale di tutti i tipi di linguaggi, poichè generalmente quelli meno user-friendly sono quelli che stanno ai livelli più bassi, mentre quelli che hanno un interfacciamento verso l’utente più gradevole e curato sono quelli che stanno ai livelli più alti.
Dividiamo i linguaggi di programmazione in ben 5 classi definite livelli. I livelli partono dal livello 0 (che indica il livello fisico della macchina, e in programmazione indica il livello del codice binario) al livello 4, dove troviamo i fogli elettronici che non sono dei veri linguaggi di programmazione ma hanno il pregio di poterci introdurre alla programmazione.
Entriamo ora nella descrizione dei livelli:
LIVELLO BASSO: è il livello della macchina. Per natura una macchina digitale importa i segnali in un sistema binario, ovvero usa solo le cifre 0 e 1; 0 sta per spento, 1 per acceso. Il codice binario è molto difficile da imparare e in pochi lo sanno.
LINGUAGGIO ASSEMBLER: questo linguaggio varia da macchina a macchina e da le istruzioni al microprocessore. È indispensabile utilizzare questo linguaggio per la progettazione dei sistemi operativi. Questo linguaggio si discosta dalla logica binaria avvicinandosi a quella umana, ma è ancora molto lontana dalla logica dell’uomo.
LINGUAGGIO AD ALTO LIVELLO: linguaggio che si discosta dalla logica assembler, e si avvicina molto alla logica umana, e si avvicina molto anche per sintassi, poiché molti comandi assomigliano alla nostra lingua parlata. Esempi di questi tipi di linguaggi sono: C e PASCAL.
LINGUAGGI AD ALTISSIMO LIVELLO: sono i linguaggi che sono molto molto lontani dalla logica della macchina avvicinandosi molto di più alla logica dell’utente. Molte volte le parole chiavi del linguaggio sono molto simili alla parlata di tutti i giorni. A questa categoria appartengono anche i linguaggi visuali; questi permettono una costruzione semplificata dell’interfaccia. A questa categoria di linguaggi appartiene il Visual Basic. Altri linguaggi come C++ è lo stesso orientato alla costruzione di interfacce, ma mediante codici sorgenti. Ci sono tuttavia dei programmi che semplificano questa cosa, rendendo il c++ creatore di interfacce.
FOGLI ELETTRONICI: non sono dei veri e propri linguaggi di programmazione, anzi, non lo sono per niente. Però se prima di iniziare con la programmazione ci dedicassimo qualche mese ai fogli elettronici vedremo che hanno molto in comune con i linguaggi veri e propri. In particolare questi programmi imparano a scrivere le istruzioni, in particolare quelle matematiche.
Chiudiamo questo articolo con il livello dei fogli elettronici. Se avete dubbi o consigli da dare commentate pure l’articolo. Nel prossimo capitolo parleremo del rapporto che esiste tra la macchina ed il software.

Fino ad oggi ci siamo sempre limitati ad utilizzare il computer per quello che è e per quello che fa, ma mai ci hanno detto che il computer è in grado di fare molto ma molto di più. Quello che cercheremo di fare nel corso di queste guide è di farvi abbandonare la concezione utentistica del computer, per farvi avvicinare a quella che è la programmazione di base.
Giorno per giorno utilizziamo il computer per andare su internet, per scrivere documenti, per ascoltare musica e quant’altro. Ma rimaniamo sempre semplici utenti. La nostra ambizione non sarà farvi programmatori, poichè per diventare programmatori ci vogliono studi più approfonditi che tratteremo su questo sito con il passare del tempo. Quello che ci proponiamo di fare subito, invece, è quello di farvi entrare nell’ottica di un programma. Cioè non esserne più semplici utilizzatori, ma capirne anche i meccanismi che ne sono all’interno, utilizzando semplicemente la logica del problema.
Ad esempio: consideriamo il semplice programma calcolatrice. Questo è stato creato per risolvere i problemi elementari legati alla somma, sottrazione, moltiplicazione e divisione, se vogliamo considerare una calcolatrice semplice. Nel corso di questa guida, che sarà pubblicata a capitoli, vi faremo arrivare alla logica di base che sta nella creazione di un programma.
Nel corso della nostra guida toccheremo questi aspetti:
Potrete notare che non è stato fatto riferimento a nessun linguaggio di programmazione. Ebbene per ora vogliamo solamente darvi l’idea della programmazione. Molti siti partono direttamente con l’insegnamento di un linguaggio di programmazione, ma spesso si ci dimentica che alla base di un linguaggio di programmazione c’è la programmazione!
Chiudo qui questa introduzione alla guida. Vi do appuntamento al primo capitolo. Se avete consigli o dubbi commentate pure.