Introduzione alla programmazione – 2

Rieccoci qua per continuare questa introduzione all’arte della programmazione dei computer. Ora che sappiamo cosa sono i linguaggi cerchiamo di capire le differenze fra alcuni di loro e quali ci conviene usare. Probabilmente molti nomi li avete già sentiti tipo Basic, C++, Php, ma in questo blog ne farete la conoscenza anche di altri, poiché molto spessi quelli che ci servono non sempre sono quelli che conosciamo.

Già la volta scorsa avevamo accennato ai compilatori e agli interpreti. Bene, andiamo ora a vedere che differenza c’è quindi tra i linguaggi compilati e quelli interpretati.

Quando un linguaggio è compilato, il software che usiamo per programamre (il compilatore) esegue prima un controllo a monte di tutto il codice per verificare se vi siano errori o stranezze, e solo dopo aver giudicato che è tutto a posto, traduce il nostro codice in linguaggio binario per il computer. In questo modo il nostro programma girerà più velocemente perché una volta avviato vuol dire che il controllo è andato bene, e il computer può concentrarsi solamente nell’esecuzione del nostro programma. Per contro però c’è da dire che questo genere di linguaggio sono solitamente più prolissi, perché alcune cosa che faremo nel programma vanno “dichiarate” al computer prima di iniziare. Per capire bene questa cosa facciamo un esempio con l’algoritmo presentato nella lezione precedente, quello del nostro robot che deve andare a prendere la nutella per noi, lo ricordate?

Bene, immaginiamo che la nostra sequenza di passi gliela abbiamo tradotta in un linguaggio compilato, come si comporterà il nostro robot? Per prima cosa dobbiamo dichiarargli, cioè dirgli di preciso prima di dargli i passi da compiere, gli oggetti con cui avrà a che fare:

oggetto da cercare: barattolo di nutella color marrone da 250g con etichetta “Nutella”.
luoghi dove guardare: dispensa della cucina ubicata sopra i fornelli, cassetto della cucina ubicato sotto il tavolo al centro della cucina.

Se non facciamo questo, il robot, ancor prima di uscire dalla nostra camera restituirà un errore dicendo di non conoscere gli oggetti e i luoghi menzionati all’interno del nostro programma. Il vantaggio però di dirgli queste cose prima sta nel fatto che una volta che il robot parte, va diritto verso la dispensa sapendo già esattamente dove si trova, riconoscendo il barattolo di nutella più velocemente perché gli abbiamo dato una descrizione precisa all’inizio. Osservate però ora questo algoritmo:

oggetto da cercare: barattolo di nutella color marrone da 250g con etichetta “Nutella”.
luoghi dove guardare: dispensa della cucina ubicata sopra i fornelli, cassetto della cucina ubicato sotto il tavolo al centro della cucina.

1. andare in cucina
2. aprire la dispensa
3. indivudare il barattolo di nuttella
4. SE c’è il barattolo allora:

  • prendere il barattolo di nuttella
  • chiudere la dispensa

5. SE NON c’è il barattolo allora:

  • chiudere la dispensa
  • aprire il cassetto
  • prendere il barattolo di nuttella
  • chiudere il cassetto

6. tornare in camera da voi
7. consegnarvi il barattolo di nuttella

Se leggete attentamente l’algoritmo così scritto, noterete che nella dichiarazione ho scritto “nutella” mentre nei passi da seguire ho scritto “nuttella” con due T. In questo caso il compilatore, facendo come abbiamo detto un controllo prima di far partire il robot, ci restituirebbe un errore dicendoci di non sapere cosa sia la “nuttella”, perché per lui sono due oggetti diversi, e siccome noi gli abbiamo detto che l’oggetto da cercare si chiama “nutella” il robot non partirebbe proprio.

Nel caso in cui usassimo invece un linguaggio interpretato, per prima cosa non c’è il bisogno di dichiarare le cose con cui il robot avrà a che fare, con una riduzione del codice, poi il robot partirebbe comunque alla ricerca del nostro barattolo di nutella, ma nel momento in cui aprirebbe la dispensa, anche se l’oggetto da lui cercato fosse li, si fermerebbe andando in errore perchè lui leggerebbe “nutella” mentre noi gli abbiamo detto di cercare la “nuttella”.

Spero di esser stato chiaro nella differenza tra le due tipologie di linguaggio, ma a questo punto voi vi chiederete: quale usare dei due? E se i linguaggi compilati sono più veloci perché esistono anche quelli interpretati?

Beh, i linguaggi compilati come ho già detto hanno lo svantaggio di essere molto più lunghi e di richiedere un lavoro di progettazione dietro non indifferente. Inoltre funzionano bene per un programma che deve fare sempre le stesse cose o che richiedono grosse mole di calcolo, ad esempio programmi di videoscrittura o videogiochi.

Invece i linguaggi interpretati, sebbene siano più lenti nell’esecuzione, ci sono alcuni casi in cui si rivelano più efficaci, ad esempio quando il computer deve capire in tempo reale che genere di dati deve elaborare, e quindi non si possono dichiarare a monte non sapendo le cose di andrà a fare. In questo caso il programma deve comunque partire e permettere all’utilizzatore di usare il programma e poi regolarsi in base a cosa fare. Ovviamente ci mette più tempo a capire cosa fare prima di farlo per cui non va bene per un videogioco, ma ad esempio, questo genere di linguaggi sono molto usati per creare programmi sul web.

Ora possiamo entrare po’ meglio nello specifiche ed iniziare a conoscere i nomi di questi linguaggi. I più famosi sono:

  • compilati: C++, Pascal, Objective-C, Cobol
  • interpretati: Basic, Php, Asp

Inoltre ci sono una serie di linguaggi di nuova generazione, chiamati ibridi, cioè sono sia interpretati che compilati, e sono: Java, Ruby e Python. Questi possono essere usati per creare agevolmente sia programmi sul web che videogiochi ad esempio, ma raccolgono anche i difetti di entrambe le categorie; ad esempio sono più lenti nell’eseguire il codice rispetto ai linguaggi compilati puri, oppure in alcuni casi bisogna dichiarare per forza i dati su cui si lavorerà aumentando di conseguenza la quantità di codice da scrivere rispetto ai linguaggi interpretati puri. Il loro punto di forza è però la flessibilità di adeguarsi a qualunque situazione, cioè un programma scritto in questi linguaggi può essere usato sul web, e poi si può farne una versione da usare in locale sul proprio computer senza bisogno di cambiare linguaggio.

Un esempio lampante sono le applicazioni Google come Google documents. Esso è scritto in python, e se non lo conoscete permette di fare videoscrittura direttamente sul web collegandosi al suo sito senza bisogno di avere installato Office (o programmi similari) sul proprio computer, pur mantenendone tutte le caratteristiche. Al bisogno però, tramite un’applicazione chiamata Google gears, si può usare anche sul proprio computer senza bisogno di connessione internet. In questo modo si può usare lo stesso programma sia dal nostro computer in locale, che da qualunque altro computer collegato ad internet.

Se una soluzione del genere si fosse adottata in Php ad esempio, non sarebbe stato poi possibile riportare l’applicazione anche sul computer in locale, a meno che di non riscriverla tutta da capo in altro linguaggio. Al contrario un videogioco non avrebbe senso scriverlo in un linguaggio ibrido (seppure sia possibile), poiché prima cosa la sua esecuzione sarebbe molto più lenta, e seconda cosa il videogioco deve poter sfruttare le peculiarità della macchina su cui viene eseguito (tipo di scheda grafica presente nel computer) e quindi deve essere per forza installato e funzionare esclusivamente su quel computer per garantire il massimo delle prestazioni. Inutile dire che in questo caso la scelta migliore cade su un linguaggio compilato.

Nella prossima lezione vedremo più in dettaglio le differenze tra i vari linguaggi per capire in quali situazioni usare l’uno o l’altro.

Lascia un Commento

Fill in your details below or click an icon to log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Log Out / Modifica )

Foto Twitter

You are commenting using your Twitter account. Log Out / Modifica )

Foto di Facebook

You are commenting using your Facebook account. Log Out / Modifica )

Connecting to %s

Follow

Get every new post delivered to your Inbox.