La rappresentazione dei numeri Bits e bytes La digitalizzazione della materia Il computer, in breve Hardware Software 3. Il mondo digitale Il termine digitale dervia dall’inglese dove digit significa cifra, numero. Il termine deriva dal latino digitus che indica il dito della mano, poichè le dita sono spesso utilizzate per contare. Quando si parla di dati digitali quindi ci si riferisce alla rappresentazione numerica di una foto, una musica o un documento; quando sentiamo un CD, vediamo un DVD o accediamo ad una pagina internet stiamo accedendo a questo tipo di dati. In un CD audio ad esempio, sono registrati dei numeri da 0 a 65535 ognuno dei quali rappresenta il “volume” di una canzone in un preciso istante di tempo. E’ importante notare come in questo tipo di dati i valori siano discreti ovvero non possono assumere qualunque valore ma solo un valore preso da un insieme specifico di valori possibili (in questo caso un numero tra 0 e 65535). Di contro, parliamo di dati analogici quando la loro rappresentazione è in forma continua, come avviene ad esempio per la musica registrata su dischi di vinile o per una vecchia foto stampata su carta. Alcuni dati sono per loro natura discreti, ad esempio i caratteri dell’alfabeto. Quindi digitalizzare un libro consiste concettualmente nel mappare tutti i caratteri dell’alfabeto in numeri. Le grandezze fisiche come ad esempio i colori, i suoni o la temperatura di una stanza, sono per loro natura continue e vanno quindi rese discrete attraverso delle tecniche che verranno descritte più avanti in modo da poterle mappare anche esse su un insieme finito di numeri. Ma perchè esiste questa necessità di convertire tutto in digitale? Le informazioni digitali hanno diverse caratteristiche che le rendono interessanti tra cui una implicita resistenza agli errori. Proviamo ad esempio a fare un disegno su carta e quindi chiediamo a una persona di ricopiarlo su un altro foglio. Quindi diamo la copia ad un’altra persona ancora e gli chiediamo di fare la copia della copia e così via. Dopo un certo numero di copie, il disegno sarà sempre più lontano dall’originale dato che ogni copia, per quanto sia fatta bene, introduce inevitabilmente degli errori. Questo non succede se i nostri dati sono digitali. Infatti se facciamo lo stesso esperimento scrivendo una serie di numeri su un foglio, anche se i partecipanti dell’esperimento avranno grafie diverse, i numeri rimarranno gli stessi anche dopo 100 copie, a meno di errori così grandi da far scambiare un numero per un altro. Questo è quello che succede anche per l’esempio della musica. Effettuare la copia di un disco di vinile introduce degli errori e questo è il motivo per cui tra gli audiofili valutano in modo diverso i vinili creati come copie dell’originale (master disc) e quelli creati dalle copie Chapter 3. Il mondo digitale 28 delle copie. I CD audio invece, contenendo numeri, non subiscono questo deterioramento ed una copia suonerà esattamente come l’originale. Quando inviamo una foto come allegato di una e-mail ad esempio, anche se non ce ne accorgiamo, stiamo effettuando numerose copie attraverso i vari computer di Internet che attraversiamo. E’ quindi fondamentale non introdurre errori. Un altro motivo fondamentale per cui è importante rappresentare tutto come un numero è che così abbiamo una rappresentazione comune per tutti i tipi di dati. Ci basterà infatti saper memorizzare o trasmettre un solo numero per poter memorizzare/trasferire idealmente un immagine, una canzone o un libro. 3.1 La rappresentazione dei numeri Spesso il temine dato digitale viene (impropriamente) utilizzato come sinonimo di dato binario, a significare la grande importanza che ha la rapprestazione binaria dei numeri all’interno dell’informatica e delle reti. Partiamo dalla base e prendiamo un numero a caso: 1234. La rappresentazione dei numeri a cui siamo abituati è detta “in base 10” ovvero con una singola cifra riusciamo a rappresentare 10 numeri diversi (da 0 a 9). Con riferimento al nostro esempio, il numero risultante lo possiamo pensare così: 1234 = 1 ⇥ 1 + 2 ⇥ 10 + 3 ⇥ 100 + 4 ⇥ 1000 Alternativamente, utilizzando l’esponenziale con base 10: 1234 = 1 ⇥ 100 + 2 ⇥ 101 + 3 ⇥ 102 + 4 ⇥ 103 A noi esseri umani viene comoda la rappresentazione dei numeri in decimale (ovvero in base 10) perchè abbiamo 10 dita, ma i computer, notoriamente non provvisti di dita, trovano più comoda la rappresentazione binaria, ovvero “in base 2”, che meglio si mappa allo stato di molti componenti elettronici di acceso/spento 1 . Non cambia assolutamente niente rispetto al caso precendente, a parte la base. Con ogni cifra pertanto riusciremo a rappresentare al massimo due numero, 0 e 1. Prendiamo il solito numero a caso che questa volta è 10011010010. 10011010010 = 0⇥20 +1⇥21 +0⇥22 +0⇥23 +1⇥24 +0⇥25 +1⇥26 +1⇥27 +0⇥28 +0⇥29 +0⇥210 Il risultato, in decimale, è 1234. Obbiamo appena capito come convertire un numero da binario in decimale. Il viceversa, ovvero da decimale a binario, si può fare prendendo il numero e dividendo tante volte per 2, andandoci a segnare il resto della divisione intera. Facciamo un esempio: 1234 / 2 = 617 con resto 0. 617 / 2 = 308 con il resto di 1, 308 /2 = 154 con resto 0 ecc. Continuamo fino a che non arriviamo a 0. La colonna di destra dei resti ci darà il nostro numero in binario, da leggere dal basso (bit più significativo) all’alto (bit meno significativo). Come abbiamo visto la conversione decimale/binario è facile ma non immediata, per questo nell’informatica spesso si usa un altro tipo di base che è molto più facile da convertire in binario, ma allo stesso tempo permette una rappresentazione più sintetica dei numeri. Stiamo parlando della codifica esadecimale, ovvero in base 16. Ogni cifra questa volta piu’ assumero i valori 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f . Essendo 16 una potenza di 2, possiamo converire istantaneamente ogni numero binario in un numero esadecimale e viceversa grazie a questa tabella: Quindi converire il numero binario 10011010010 in esadecimale è facilissimo, basta dividerlo in blocchi da 4 cifre e utilizzare la tabella: 3.2 Bits e bytes 29 divisione risultato resto 1234/2 617/2 308/2 154/2 77/2 38/2 19/2 9/2 4/2 2/2 1/2 = 617 = 308 = 154 = 77 = 38 = 19 =9 =4 =2 =1 =0 0 1 0 0 1 0 1 1 0 0 1 Table 3.1: Conversione di da decimale a binario di un numero Il risultato è 4d2. I numeri espressi in esadecimale sono molto usati e li incontreremo spesso. Di solito vengono scritti con il prefisso 0x per distingueri dai decimali, ad esempio 0x4d2. Difficilmente nella vita dovrete convertire manualmente dei numeri binari in decimale o esadecimale, tuttavia è importante capire che stiamo sempre parlando di numeri e stiamo discutendo solo sulla sua rappresentazione. Esistono inoltre tantissimi tools per la conversione dei numeri, ad esempio si puo’ usare direttamente Google e scrivere nella nella barra di ricerca 0b10101inhex o 12inbinary per fare la conversione qualora ci servisse. Sicuramente vi sarà pero’ capitato di vedere un messaggio di errore di Windows come quello in figura 3.1 (il famoso “blue screen of death”) dove sono espressi, in esadecimale, dei numeri relativi alla parte di memoria ed ai registri che in cui si è verificato l’errore “mortale” con lo scopo di fornire informazioni ai tecnici in modo da capire il problema. Un altro esempio è l’indirizzo di rete (MAC address, che vedremo nel prossimo capitolo) scritto spesso sotto i computer portatili come in figura 3.2 come 6 coppie di caratteri esadecimali. 3.2 Bits e bytes Bit vuol dire binary digit ovvero cifra binaria, che quindi puo’ essere 0 o 1, e rappresenta l’unità di base di ogni sistema informatico e di comunicazione digitale. Spesso viene usato attraverso i suoi multipli: Se con un bit riusciamo a memorizzare solo 0 o 1, con due bit riusciamo a memorizzare un valore tra 00 , 01, 10, 10 (4 possibili valori, o alternativamente un numero tra 0 e 3). Con tre bit riusciamo a rappresentare un numero tra 0 e 7, con quattro bit un numero tra 0 e 15 e cosi’ via. La regola è che con x bit riusciamo a rappresentare un numero tra 0 e 2x 1. Exercise 3.1 Quanti bit ci servono per rappresentare 2646000 numeri tra 0 e 65535? ⌅ Soluzione: per rappresentare un numero tra 0 e 65535 servono 16 bit, infatti 21 6 1 = 65535. Quindi basta fare 2646000 ⇥ 16 per ottenere 42336000 bit ovvero 42.336 megabit. Questa è la memoria che serve per memorizzare un minuto di musica utilizzando il campionamento standard dei cd musicali (sarà più chiaro in seguito). Un gruppo di 8 bit si chiama byte ed è la quantità di informazione utilizzata storicamente per codificare un carattere. Con un byte riusciamo a rappresentare 28 = 256 numeri diversi che è più che sufficiente per codificare tutti i caratteri dell’alfabeto inglese/americano. Oggi i caratteri 1 In realtà sono gli arabi Chapter 3. Il mondo digitale 30 Esadecimale Binario 0 1 2 3 4 5 6 7 8 9 a b c d e f 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Table 3.2: Conversione da esadecimale a binario 0100 1101 0010 = = = 4 d 2 necessari sono molti di più (pensiamo agli ideogrammi cinesi o ai caratteri arabi e cirillici), tuttavia il byte è rimasta l’unità di misura delle memorie. Ai bytes si applicano gli stessi prefissi visti in tabella 3.2 con la differenza che se si parla di byte, la sigla contiene la B maiuscola (ad es. la sigla corrispondente a un megabit è Mb, mentre per un megabyte è MB). Nei negozi di informatica ad esempio si vengono gli hard disk da un terabyte (TB) che permettono di memorizzare 1012 bytes ovvero 8 ⇥ 1012 bits. Le memorie RAM invece hanno di solito capacità più ridotte dell’ordine di qualche gigabyte (GB). I vecchi floppy disk contenevano di solito 1.44 Mbyte. La figura 3.3 mostra le grandezze in gioco per le memorie più comuni. Exercise 3.2 Quanti floppy disk da 1.44MB servono per copiare il contenuto di un DVD da 4.7GB? ⌅ Soluzione: 4700/1.44 ovvero 3264 floppy disks! Exercise 3.3 Quanti DVD da 4.7GB mi servono per fare una copia di backup del mio hard disk da 1TB? ⌅ Soluzione: 1000/4.7 = 213 DVD Per le capacità trasmissive invece si utilizzano i bit. Ad esempio una linea “ADSL 20Mega” (nome commerciale per indicare una linea ADSL con 20 megabit per secondo di banda di download) sarà quindi una linea in grado di ricevere 20 milioni di di bit per secondo. 3.3 La digitalizzazione della materia Una fortunata espressione inglese che descrive bene il processo di digitalizzazione che è in corso in questi anni è bits eat atoms. Prima esistevano i rullini, oggi la gran parte delle foto sono digitali. Stesso discorso per le videocassette, ormai sparite ma anche mappe stradali, musica e 3.3 La digitalizzazione della materia 31 Figure 3.1: Blue screen of death Nome Numero di bit Sigla kilobit megabit gigabit terabit petabit exabit zettabit yottabit 103 106 109 1012 1015 1018 1021 1023 Kb Mb Gb Tb Pb Eb Zb Yb Table 3.3: Multipli del bit i libri che oggi si stanno convertendo in e-book. Un tempo la posta si poteva controllare solo dall’ufficio o da casa. Adesso la comunicazione avviene ormai prevalentemente via e-mail, e ognuno puo’ controllare la sua casella di posta in qualunque istante grazie al suo smartphone. Perfino gli oggetti, grazie alle stampanti 3D, si possono convertire in bit e quindi di nuovo in oggetti fisici. Viviamo in un epoca che secondo molti passerà alla storia come quando l’uomo divenne digitale. Ma come convertiamo quello che per sua natura non è digitale, in digitale? Prendiamo ad esempio la musica e consideriamo il processo di digitalizzazione di una canzone. In linea concettuale il processo è semplice e si compone di due fase: una fase di campionamento ed una di quantizzazione. La canzone viene “fotografata” ad intervalli di tempo molto piccoli (campionamento) e quindi per ogni campione si mappa il valore del segnale attraverso un set discreto di valori possibili (quantizzazione). Ogni CD audio è esattamente il risultato di questo processo dove il campionamento è fatto 44100 volte al secondo (ovvero 44100 Hz, dove 1 Hz indica una volta al secondo) e la quantizzazione è effettuata su 2 bytes (ovvero su un numero tra 0 e 65535). Questo processo, rappresentato in figura 3.4 si chiama conversione analogico-digitale, 32 Chapter 3. Il mondo digitale Figure 3.2: MAC address scritto sotto i computer portatili - licenza CC BY-SA 3.0 Figure 3.3: Varie tipi di memorie e grandezze in gioco in breve ADC. Il viceversa invece si chiama conversione digitale-analogico (DAC) e consiste nel recuperare il segnale originario partendo dai campioni quantizzati, che è il processo che fa comunemente il nostro stereo quando suona un mp3 o un cd musicale. Il processo di campionamento e quantizzazione introduce inevitabilmente degli errori perchè • stiamo considerando una grandezza fisica continua solo in alcuni intervalli di tempo • stiamo forzando una grandezza fisica ad assumere un set discreto di valori Fortunatamente esiste un teorema, chiamato appunto teorema del campionamento, che ci dice che se la frequenza di compionamento è pari a due volte quello della banda di frequenza che vogliamo rappresentare, il segnale che riusciamo a ricostruire non varia molto da quello originario. Per continuare sull’esempio della musica,l’orecchio umano non riesce a percepire i suoni con frequenze sopra i 20kHz e sotto gli 20 Hz. Quindi la banda di frequenza utile di un segnale audio è di circa 20000 20 = 19980Hz. Pertanto, campionando a 44100 (più del doppio) stiamo sicuri di ricostruire fedelmente il nostro segnale. 3.4 Il computer, in breve 33 Figure 3.4: Campionamento e quantizzazione di un segnale Per quanto riguarda la quantizzazione, valgono considerazioni simili per cui 65536 diversi valori possibili per ogni campione sono più che sufficienti a non farci sentire il rumore introdotto dalla quantizzazione. Quanto detto per la musica vale anche per i filmati che li possiamo vedere come una serie di fotografie (campioni) nel tempo. Vi siete mai chiesti perchè gli schermi del computer inquadrati dalle telecamere dei telegiornali sembrano sempre rotti? Le “foto” (ovvero il campionamento) effettuato dalla telecamera è diverso rispetto alla frequenza di “refresh” dello schermo. 3.4 Il computer, in breve Il computer è una macchina programmabile, tipicamente elettronica, in grado di fare operazioni artimentiche o logiche. Stando a questa definizione, come vedremo, anche il nostro tablet, smartphone, o perfino l’orologio digitale che indossiamo sono computer. Tradizionalmente però per computer si intende il computer fisso (desktop) originariamente chiamato Personal Computer (PC) per differenziarlo dai computer aziendali o negli anni 50 occupavano intere sale, e i più recenti computer portatile (laptop). Apriamo quindi un computer fisso e vediamo cosa c’e’ dentro. Quello che vedremo è l’hardware del computer ovvero i componenti fisici che lo compongono. 3.4.1 Hardware La parte più grande che riusciamo ad inviduare è chiamatascheda madre (in inglese “motherboard”) ed è quella rappresentata in figura 3.5. Su questa scheda elettronica vengono alloggiati gli altri componenti, come l’hard disk, le memorie, lettori cd/dvd ecc. La scheda madre è alimentata mediante un cavo che va all’alimentatore del pc. Gli slot bianchi e marroni che vedete sulla sinistra sono dei connettori per schede esterne (ad esempio una scheda audio o la scheda video). Sulla destra verrà alloggiato il processore, mentre in basso verrà inserita la memoria RAM. Le schede madri sono molto diverse tra loro ed i connettori cambiano di anno in anno, in base alle nuove tecnologie che escono. Grazie a questi connettori è possibile sostituire delle parti di hardware senza dover per forza cambiare tutto. Inoltre molte schede hanno integrati già molti componenti al loro interno (controller USB, audio, video). Un computer ha tipicamente molte unità elaborative diverse ovvero ha tanti chip in grado di fare calcoli matematici. Sui computer tradizionali ha un ruolo primario però quello che 34 Chapter 3. Il mondo digitale Figure 3.5: Scheda madre di un computer - licenza CC BY-SA 3.0 normalmente viene chiamato il processore e che tecnicamente si chiama CPU ovvero Central Processing Unit. Figure 3.6: Central Processing Unit - licenza CC BY-SA 3.0 Ogni CPU, come quella in figura 3.6, come dice il nome stesso rappresenta l’unità elaborativa centrale ed è in grado di fare tante e semplici operazioni, ad una frequenza determinata. Ad esempio una CPU a 2GHz è in grado di effettuare due miliardi di operazioni ogni secondo. Il concetto da rimarcare che queste operazioni sono semplici (somme, sottrazioni tra numeri, comparazioni ecc). A questo punto mancano due elementi ancora: le memorie e i dispositivi di input/output. Le memorie presenti nei PC sono tipicamente di due tipi: memorie RAM e dischi fissi. Le memorie RAM sono memorie veloci, mentre i dischi fissi (hard disk) hanno dei tempi di accesso molto maggiori. La differenza in velocità è compensata dal fatto che i dati all’interno degli hard disk rimane anche quando il computer viene spesso perchè i dati vengono scritti su un disco magnetico come si vede in figura 3.7, o nel caso dei più recenti hard disk a stato solido (Hard Disk SSD) su una memoria a stato solido, come avviene anche per le schede di memoria presenti nelle macchine fotografiche o nei cellulari. Gli hard disk sono inoltre 3.4 Il computer, in breve 35 tipicamente più economici delle RAM, arrivando, alle tecnologie attuali, a diversi Terabyte di dati memorizzabili. Le memorie RAM invece, come quella in figura 3.8, attualmente memorizzano Figure 3.7: Hard disk qualche Gigabyte di dati che vengono cancellati appena il computer viene spento. Questo tipo di memorie si dicono volatili, per distinguerle dalle memoria non volatili e quindi permanenti anche quando il sistema non è alimentato. Il termine RAM sta per Random Access Memory ovvero memoria ad accesso casuale ed indentifica la caratteristica di questa memoria di avere lo stesso tempo di accesso in lettura/scrittura per accedere ai vari blocchi che la compongono. Per una vecchia musicassetta ad esempio non è così perchè il tempo per spostarci da una tracca ad un altra dipende da quanti centimetri di nastro magnetico ci sono tra le due tracce. Figure 3.8: RAM - Licenza Creative Commons Attribution-Share Alike 3.0 Ad ultimo, al nostro computer sono attaccati diversi dispositivi di input/output (I/O) quali schede video, tastiere, scheda audio, mouse, stampanti, scanner, schede di rete, ecc. Anche questi dispositivi vengono normalmente attaccati alla scheda madre. Non è ovviamente tutto così facile e ci sono migliaia di diverse varianti. Esistono dischi fissi di rete, altri tipi di memorie montate direttamente sulle CPU (memorie cache) per incrementare le prestazioni. I computer laptop hanno diversi tipi di connettori e non permettono la stessa espandibilità dei computer fissi. Gli smartphone ed i tablet ad esempio hanno memorie a stato solido esterne o integrate ed anche il processore non è sostituibile. Se andiamo nel mondo dei sensori o degli orologi da polso ad esempio troviamo che tutti i componenti sopra descritti sono integrati all’interno di un singolo chip. Da un punto di vista logico il quadro che ne emerge è di una macchina programmabile che riceve input ed output, ha al suo interno delle memorie e l’elettronica per processare dei dati. E’ proprio grazie a questa sua genericità che si presta a risolvere centinaia di migliaia di problemi diversi, attraverso dei programmi. 3.4.2 Software Una app per cellulare, o un programma di fotoritocco sono due esempi di applicativi software. Questi programmi sono molto diversi tra loro e ne esistono un’infinità. Supponiamo di voler Chapter 3. Il mondo digitale 36 creare il nostro programma, ad esempio un programma di videoscrittura sfruttando l’hardware generico sopra descritto. Chiaramente se dovessimo andare ad istruire ogni singolo pixel dello schermo sul colore che deve assumere o catturare gli spostamenti del mouse non finiremmo nemmeno in 100 anni. Inoltre, attaccando un altro monitor probabilmente il nostro programma non funzionerebbe più! Sui computer infatti fortunatamente (e talvolta sfortunatamente) gira un software chiamato Sistema Operativo. Esempi di sistemi operativi sono Linux, Mac OSX, Windows, Android, IOS. Il sistema operativo Un sistema operativo è sostanzialmente un programma in grado di gestire l’hardware della macchina ed operare in modo da realizzare uno strato “cuscinetto” sopra il quale girano i normali applicativi. Gli applicativi parlando col sistema operativo e il sistema operativo parla con l’hardware. Il sistema operativo è incaricaricato di effettuare tantissime operazioni e viene caricato “al boot” ovvero quando il computer viene acceso. Più tecnicamente ogni scheda madre è dotata di un BIOS (Basic Input-Output System) che è un programma scritto su una memoria non volatile. Figure 3.9: BIOS Quando accendete un computer vi sarà capitato di vedere una schermata simile quella in figura 3.9. In basso viene indicata la combinazione di tasti (tasto CANC, o tipicamente tasto F2) per entrare nella configurazione del BIOS e cambiare dei parametri strettamente legati all’hardware della macchina (frequenza del processore, dispositivi riconosciuti, ecc). Il BIOS quindi è il primo software eseguito quando accendiamo un computer. Il BIOS termina la sua esecuzione caricando un piccolo software chiamato bootloader il cui scopo è a sua volta carica il sistema operativo. Per la definizione che abbiamo dato all’inizio del capitolo, esistono “computer” non dotati di sistema operativo quali gli orologi digitali, gli stereo della macchina, e tutti gli altri dispositivi digitali in grado di effettuare operazioni di elaborazione ma che non necessitano della presenza di diversi programmi. Di contro, tutti i personal computer, i server, i computer portatili, fissi, smartphone ecc lavorano come sopra descritto. Queste sono alcune delle funzionalità di un sistema operativo: 3.4 Il computer, in breve 37 • come memorizzare i dati su hard disk e come accedervi in modo efficiente. La struttura in file e cartelle dei nostri documenti all’interno del computer è una funzionalità implementata dal filesystem, un modulo del nostro sistema operativo. • proteggere il computer da programmi che si comportano in modo anomalo. Vi sarà sicuramente capitato di trovare programmi su PC o su smartphone che vengono terminati perchè non sono reattivi o perchè hanno provato a fare qualcosa che non dovevano (tipo accedere alla memoria di un altro programma). Dobbiamo ringraziare il sistema operativo se queste operazioni non hanno danneggiato il computer o altri programmi. • far funzionare più programmi in parallelo. Come fanno a funzionare più programmi contemporaneamente se abbiamo una sola CPU? Il sistema operativo, attraverso un modulo chiamato scheduler, dedica un po’ di tempo di elaborazione ad un programma per poi passare ad un altro programma. Questo ci da la percezione che i programmi girino contemporaneamente e questa caratteristica è chiamata in gergo multitasking. • parlare in rete: le funzionalità di rete sono implementate all’interno del sistema operativo. I vari protocolli di trasporto, di rete e di collegamento che vedremo nei prossimi capitoli, sono dei moduli integrabili e utilizzabili dai diversi applicativi software. • parlare con l’hardware: abbiamo installato una nuova stampante, scanner o altra periferica? Dovremmo allora installare un software chiamato driver che istruisce il sistema operativo su come debba fare per parlare con il nuovo hardware 2 . I programmi Normalmente con il termine programmi si intende gli applicativi software che girano all’interno di un computer e si interfacciano con il sistema operativo. Parliamo di programmi di videoscrittura, fogli di calcolo, fotoritocco, navigazione web ecc. Nel mondo “mobile” spesso si parla di “app”, ma il concetto è lo stesso. La diversificazione e l’apertura a terze parti è sicuramente uno dei motivi per cui il computer è entrato così velocemente all’interno delle nostre case. I programmi risolvono migliaia di problemi diversi, automatizzando tutte le operazioni ripetitive. I programmi sono scritti da programmatori, un nuovo mesterie che ha meno di 50 anni e che offre lavoro a una parte sempre più crescente di popolazione. Per scrivere un programma abbiamo bisogno di un ambiente dove poter dire al computer come comportarsi in caso il programma sia aperto, l’utente interagisca con il programma mediante mouse, tap o input di testo, ecc. Il programma viene scritto con un linguaggio di programmazione ovvero un linguaggio formale di descrizione delle operazioni che il programma deve fare. Una volta scritti su normali file di testo, i programmi sono compilati ovvero tradotti in operazioni che il computer riesce ad eseguire direttamente 3 . Quando viene avviato un programma, il sistema operativo si preoccupa di “lanciarlo” e tenerne monitorata l’esecuzione. Esistono decine di linguaggi di programmazione diversi (C, Python, Java, Ruby per citarne alcuni). Ogni programma si interfaccia con il sistema operativo per effettuare le operazioni che riguardino la rete, input e output, e l’accesso su disco o in memoria. Un programma scritto per un sistema operativo quindi non è detto che funzioni su un altro sistema operativo, anche se esistono speciali strati di adattamento software per rendere i programmi “portabili”. 2 Sempre più spesso non c’e’ bisogno di installare driver esterni perchè contenuti o scaricati automaticamente già dal sistema operativo. 3 Alcuni programmi scritti in certi linguaggi sono interpretati, ovvero c’e’ un’altra componente software chiamata interprete che traduce, durante l’esecuzione, i comandi.