Cos’è un computer


Premessa

Questo testo presenta concetti informatici con un linguaggio volutamente semplificato. Lo scopo di questo testo è quello di condividere una conoscenza di base di tali concetti e della relativa terminologia con studenti che non abbiano alcuna precedente formazione di tipo tecnico. Il testo è stato prodotto per consentire un allineamento terminologico per gli studenti di Scienze della Comunicazione e può risultare ovvio, e talvolta approssimato per studenti di informatica, e non è adatto in generale ad un pubblico specialistico.

Il computer

Un computer o elaboratore elettronico è un oggetto che consente di manipolare rappresentazioni astratte di dati. Consente di svolgere operazioni su quei dati attraverso alcune funzioni rese disponibili da alcuni programmi.

Hardware e software

Un computer è costituito dall’insieme dell’hardware e del software che servono a svolgere queste manipolazioni sui dati. L’hardware è la parte fisica (dura: la memoria, le schede, il processore, i dispositivi di input/output, ecc.), mentre il software è la parte logica (i programmi, i dati).

Componenti hardware del computer:

Di seguito viene schematizzata la struttura dell’hardware di un computer:

  • Dispositivi di input: strumenti che consentono all’operatore di inviare comandi, istruzioni e dati al computer; oggi sono principalmente la tastiera, il mouse. In passato si utilizzavano dispositivi dispositivi a schede perforate. In futuro si diffonderanno probabilmente sempre di più dispositivi più evoluti, già in parte disponibili sul mercato, come i touch-screen, i dispositivi vocali, o gli strumenti di rilevazione dei movimenti corporei attraverso raggi infrarossi.
  • Dispositivi di output: sono strumenti che presentano all’operatore l’effetto delle delle manipolazioni sui dati compiute dal computer. Essi possono presentare dati in maniera transitoria attraverso ad esempio monitoro o altoparlanti, o in maniera permanente, come attraverso una stampante.
  • Microprocessore o CPU, l’elemento che svolge le manipolazioni, il “cervello” del computer, la componente fisica che svolge i calcoli e che decide le potenzialità del computer stesso.
  • Memoria volatile (RAM): è un dispositivo di memoria temporanea, che viene usata per svolgere le manipolazioni, mantenere in esecuzione i programmi e i dati. E’ un altro elemento decisivo per valutare la potenza di un computer. Normalmente un aumento di RAM corrisponde a una maggior capacità e velocità di operazione del computer.
  • Memoria di archiviazione: hard disk, flash disk, cd-rom: serve a memorizzare stati finiti dei dati (documenti) e software permanenti. I dispositivi di archiviazione possono essere permanenti o non permanenti.

Nota sui dispositivi di archiviazione permanenti e non permanenti

E’ da notare che ai dispositivi di archiviazione permanenti (come il disco rigido) si possono aggiungere, collegandoli al computer attraverso altri dispositivi di input/output (come le porte usb o firewire) memorie di archiviazione non permanenti o rimuovibili, come dischetti, cd.rom, memorie flash.

I dispositivi rimuovibili si dividono grosso modo in riscrivibili e non riscrivibili e possono essere usate per trasportare dati da un computer all’altro. Ovviamente, necessari se il computer non è collegato ad una rete. Ma di reti parleremo più avanti.

Il software

Tutto questo hardware non può funzionare senza un sistema di istruzioni logiche, rappresentate in un formato congeniale alla macchina, che dica come effettuare le manipolazioni sui dati e come gestire le rappresentazioni in input e in output.

Questo sistema di istruzioni logiche è il software del computer. Ci sono vari tipi di software, ma qui vogliamo sottolinearne in particolare due: i sistemi operativi e i programmi dedicati a funzioni specifiche.

Tipi di software:

  1. Sistemi operativi: senza questi software l’hardware non può funzionare, l’utente non può operare. E’ un’interfaccia fra utente e hardware, consente l’utilizzo di funzionalità, l’esplorazione dei dati e alcune manipolazioni di base. Ad un livello avanzato consente la modifica delle impostazioni del sistema. E’ una specie di ambiente che prepara il terreno per i programmi.
    1. windows
    2. Mac osx
    3. Linux
    4. OS2
    5. Ecc…
  2. Programmi dedicati a funzioni specifiche sono strumenti immateriali che servono a compiere operazioni su altri documenti. Solitamente le funzioni che offrono sono divise in categorie specifiche: ad esempio, programmi di videoscrittura, di grafica, di calcolo, giochi, ecc. Sono gli oggetti logici che consentono anche ad utenti non esperti di compiere operazioni sui dati, e dunque di trarre beneficio dal computer.

I dati

I software operano su dati. I dati sono rappresentazioni di informazioni statiche, che vengono memorizzate in un formato conveniente. Hanno la medesima natura logica dei software, cioè sono rappresentati attraverso un codice simile. A differenza dei software, che possono eseguire operazioni, normalmente i dati sono statici. Sono piuttosto l’oggetto su cui vengono eseguite le operazioni.

I dati vengono organizzati in documenti o file. Si possono pensare come a insiemi di documenti in uno schedario. Infatti questa è la metafora usata dai più diffusi sistemi operativi. La metafora è imperfetta, perché i file elettronici possono essere modificati e manipolati a piacere, mentre quelli cartacei no. Senza i file di dati la maggior parte dei programmi sarebbe inutile, senza i programmi i file di dati non sarebbero altro che rappresentazioni statiche di informazioni.

Importanza dei programmi

Spesso si comprano i computer per la disponibilità o meno di alcuni programmi. I programmi sono specifici dei sistemi operativi. Un programma che “gira” su un sistema operativo non gira normalmente su un altro. Esistono programmi che girano su più sistemi operativi (come Word o Photoshop), ma è bene precisare che in quel caso non si tratta dello stesso programma che gira su sistemi operativi differenti, bensì due versioni equivalenti di quel programma preparate appositamente per i diversi sistemi operativi. L’azienda produttrice deve dunque mantenere due o più versioni dello stesso programma per i diversi sistemi operativi. Lo fa se ne ricava un vantaggio commerciale, che dipende sia dall’entità della diffusione, sia dalla tipologia di tale diffusione, di un certo sistema operativo. Esistono ad esempio sistemi operativi minoritari, ma che sono usati da pochi utenti molto professionalizzati o da aziende di uno specifico settore, che per l’azienda produttrice del software può costituire una nicchia profittevole anche se di dimensioni limitate.

Programmi e interfacce

Un programma è costituito da un nucleo profondo di codice che è deputato a compiere le elaborazioni, scritto in qualche linguaggio sconosciuto ai più e dal nome esoterico (ad esempio, C++, Delphi, Cobol, ecc). I programmi moderni però prevedono anche una parte di codice che curi la presentazione e la raccolta di dati attraverso un qualche dispositivo di input/output (spesso limitati a monitor, stampante, tastiera, mouse o dispositivo di puntamento). Questa parte del software non compie le operazioni principali, ma gestisce la cosiddetta interfaccia. Le persone operano con i software interagendo con la loro interfaccia.

Sebbene per l’utente la distinzione sia trasparente (un utente ha l’impressione che sia l’interfaccia, i tastini sullo schermo, a compiere le operazioni) va detto che l’interfaccia è solo un tramite. Un ambiente di comunicazione fra un utente che usa un certo linguaggio e conosce certe convenzioni e il programma che svolge certe elaborazioni sui dati in un modo del tutto incomprensibile all’uomo (almeno all’uomo comune…), secondo un linguaggio fatto di numeri manipolati a velocità altissima.

L’interfaccia è il programma (per l’utente)

L’interfaccia per l’utente è il programma, anche se a rigor di termini questo non è appropriato. Un medesimo programma può avere interfacce diverse. Le interfacce moderne si chiamano interfacce grafiche, abbreviate in GUI, perché vengono presentate su monitor attraverso metafore e convenzioni pittografiche. Non è sempre stato così. Le interfacce erano in passato espresse come righe di testo, o come dispositivi che esaminavano schede perforate, o come pannelli con leve e bottoni fisici. Le interfacce si sono evolute negli anni di pari passo con la diffusione dei computere ad un pubblico di massa.

Per alcune ragioni, le interfacce grafiche sono considerate più user friendly delle interfacce a linea di comando, perché sono in genere più facilmente comprensibili (e anche più seduttive) delle altre. Oggigiorno molta parte dello sviluppo di un software è dedicato al miglioramento o allo sviluppo delle interfacce, più che delle funzionalità, che in molti casi si equivalgono fra software diversi. Questo è un argomento che naturalmente riguarda da vicino i “comunicatori” e che riprenderemo. L’interfaccia è infatti il luogo in cui si comunica con l’utente, sia le funzionalità, che altri attributi (come il senso di modernità, di ordine, di attrattività, di piacevolezza: attributi emotivi che accompagnano ogni esperienza umana).

I software sono codice

I software sono realizzati attraverso un codice noto come “linguaggio di programmazione”. I programmatori scrivono il codice e lo testano. Esistono molti linguaggi di programmazione, che hanno sintassi e vocabolario diversi. I linguaggi di programmazione sono studiati per facilitare la programmazione: sono una mediazione fra il linguaggio della macchina e quello dell’uomo. Esistono diversi tipi di linguaggi di programmazione. In generale, però i programmi possono essere interpretati o compilati. Nel caso dei linguaggi interpretati, il programma è disponibile e viene elaborato da un software che si chiama interprete e che ricostruisce al volo le istruzioni. Nel caso dei software compilati, il codice non è disponibile (si trasforma in una sequenza incomprensibile di 0 e 1) e non è possibile modificarlo facilmente. I programmi commerciali sono per lo più precompilati per ragioni di velocità di esecuzione (e perché non è necessario possedere un programma interprete).

Anche dei programmi precompilati può comunque essere reso disponibile il codice. Che siano precompilati o interpretati (vedremo in seguito vari esempi), i linguaggi che rendono disponibile il codice (detto codice sorgente) a tutti sono a codice libero o aperto (open source). Il codice aperto consente di imparare com’è fatto il programma, modificarlo, migliorarlo, correggere errori.

Licenza

Una questione diversa è quella della licenza, cioè cosa il produttore consente che una terza parte possa fare con il codice, anche aperto. La licenza di modificare il software non equivale alla libertà di redistribuirlo.

Nel mondo open source ci sono stati nel tempo vari modi di affrontare la questione, che hanno dato vita ad una terminologia spesso confusa o sovrapposta.

Open source

Il movimento Open Source promuove il codice aperto, condiviso con gli utilizzatori, che possono collaborare a migliorarlo. Si associa al movimento dell’Open Content, che richiede contenuti in formati aperti e disponibili a tutti, con l’obiettivo di garantire e migliorare la condivisione della conoscenza.

Free software

Questo movimento, che ha tratti in comune ma anche specifiche differenze con il movimento Open Source, rivendica le 4 libertà fondamentali del software:

  1. Libertà di eseguire il programma per qualsiasi scopo (chiamata “libertà 0”)
  2. Libertà di studiare il programma e modificarlo (“libertà 1”)
  3. Libertà di copiare il programma in modo da aiutare il prossimo (“libertà 2”)
  4. Libertà di migliorare il programma e di distribuirne pubblicamente i miglioramenti, in modo tale che tutta la comunità ne tragga beneficio (“libertà 3”)

La differenza fra Open Source e Free Software è essenzialmente una differenza di visione del mondo. Per il movimento Open Source il codice aperto è un vantaggio pratico, porta a software migliori, più test, più possibilità di identificare errori e di ricevere contributi innovativi da sviluppatori che volontariamente partecipano in tutto il mondo

Per il movimento del Free Software, lanciato da Richard Stallmann, semplicemente il software deve essere libero per ragioni sociali. E’ un diritto di tutti avere, copiare, modificare, eseguire il codice. Secondo Stallmann è il software proprietario ad essere un problema, perché limita la libertà individuale e la circolazione della conoscenza. E il software libero è la soluzione a questo problema.

Il movimento Open Source non necessariamente garantisce le 4 libertà del software. Il fatto che il codice sia aperto, non significa che a chiunque sia garantito eseguirlo o copiarlo, o distribuirlo.

Vendibilità dei programmi

La questione, in entrambi i casi, non ha a che fare con la commerciabilità del codice. In entrambi i casi i movimenti non sono contrari alla vendita di software. Anzi, la GNU foundation, che si occupa della diffusione del software libero, sostiene che è cosa buona e giusta vendere software libero, purché con una licenza che garantisca le 4 libertà fondamentali viste sopra. La licenza più diffusa usata dalla GNU Foundation è la General Public License (GPL), nota come GPL GNU.

La GPL GNU consente anche di rivendere software libero, ma impedisce di porre limiti sulla ridistribuzione o apertura e modifica del codice. Chi lo ha comprato, ad esempio, ne può ridistribuire liberamente il codice, senza alcuna limitazione, lo può copiare, lo può modificare.

Copyleft

Stallmann è anche il diffusore del concetto di “copyleft” (anche se non ne è l’autore). Il copyleft è un gioco di parole e un ribaltamento concettuale sull’espressione “copyright”. L’idea di “permesso d’autore” consiste nel dare a chiunque il permesso di eseguire il programma, copiare il programma, modificare il programma, e distribuirne versioni modificate, ma senza dare il permesso di aggiungere restrizioni. In tal modo, le libertà essenziali che definiscono il “free software” (software libero) sono garantite a chiunque ne abbia una copia, e diventano diritti inalienabili.

Sostengono i partecipanti al movimento del Free Software:

Essendo uno dei requisiti fondamentali la disponibilità del codice sorgente, comunemente si ritiene che il software open source sia sinonimo di software libero, ma in realtà questa affermazione non è vera.

Il software open source è un software che rispetta alcune convenzioni di distribuzione (per esempio il codice sorgente potrebbe essere disponibile, ma potrebbe esserne vietata la redistribuzione o la modifica e quindi software distribuito sotto tale licenza non può essere software libero) e una licenza è “ufficialmente” open source a discrezione dell’Open Source Initiative (OSI): se una licenza segue le linee guida dell’OSI, allora tale licenza può essere dichiarata licenza open source, ma le direttive potrebbero cambiare nel tempo.

Una licenza invece è libera (o meglio, una versione di una licenza è libera) se e solo se rispetta le quattro libertà fondamentali. Pertanto se una versione di una licenza è libera, allora lo sarà per sempre. Naturalmente è sempre complesso, almeno per un cittadino “normale” (non esperto di leggi), stabilire se una licenza è libera o meno perché entrano in gioco i termini legali utilizzati nella stessa. Il progetto GNU si occupa tra l’altro anche di indicare se una licenza è libera o meno e se è compatibile con le licenze GNU o meno.

Inoltre il software libero non deve essere confuso con il software freeware, che è distribuibile gratuitamente ma che non è né software libero né open source, e con il software di pubblico dominio, che non è soggetto a nessuna licenza d’uso e quindi può essere riemesso da chiunque sotto qualsiasi altra licenza.”

Cosa è meglio?

La discussione se sia meglio un software aperto o chiuso dipende sostanzialmente dal punto di vista che si adotta nella vicenda, e nel fatto di sposare o meno una posizione o una visione o l’altra. Forse è illusorio pensare che vi sia una risposta valida in tutte le occasioni.

Dal punto di vista strettamente pratico ci sono circostanze in cui software migliori sembrano venire da situazioni chiuse, altri da situazioni aperte. Si tratta di modelli diversi, che si adattano diversamente a condizioni diverse. Il web, ad esempio, è un esempio eclatante di progetto totalmente open source, ed è uno dei più clamorosi casi di successo. Anche se il cosiddetto modello di business non è chiaro, non era nemmeno previsto, e tuttora crea qualche problema di visione in molte aziende (tema su cui torneremo).

D’altra parte, sono in molti a trovare più comodi da usare i sistemi operativi proprietari (Mac osx e Windows) rispetto a linux. Va anche detto che la stabilità dei sistemi linux sta alla base del Mac osx. Come si vede, la libera circolazione di idee e prodotti consente in generale di innescare meccanismi virtuosi, indipendentemente dalle capacità di sfruttamento economico, che è un discorso, ormai dovrebbe essere chiaro, distinto, anche se, nel mondo in cui viviamo, inevitabilmente rilevante.

Non è raro ormai che prodotti open vengano personalizzati da aziende e ricommercializzati in versione migliorata. Alcuni di questi benefici possono poi comunque essere restituiti alla comunità open. Il rapporto fra open source/free software, qualità obiettiva dei prodotto e politiche di sfruttamento commerciale è insomma più sfaccettata di come talvolta la si vorrebbe dipingere.

Versioni del software

I software seguono una linea evolutiva, maturano attraverso versioni successive. Le versioni successive non cambiano il nome del software ma ne aggiungono un numero, il cosiddetto numero di versione. Questo è insolito negli altri tipi di prodotto. Ad esempio, non avremo la Punto 3.1.1 (anche se ci sono esempi di automobili con un numero di versione, che però non corrisponde effettivamente alla versione dell’auto, ma segnala piuttosto un’idea di novità rispetto ad un modello di successo in più versioni, come la Yaris 2).
Non abbiamo la chitarra 2.0. O Il televisore mivar 4.1. L’abitudine di numerare in maniera progressiva i software nasce dall’esigenza dei programmatori di tener traccia delle modifiche successive. La prima versione di solito è la 0.1. Il numero principale indica miglioramenti maggiori. I numeri dopo il punto indicano miglioramenti piccoli e progressivi, o anche solo correzioni di errori.

Bachi e altri animali

Gli errori dei software si chiamano bachi. E’ virtualmente impossibile produrre un software senza bachi, perché è impossibile considerare in maniera esaustiva tutte le situazioni. Però è possibile ridurre il bachi ad un numero molto basso.
Il termine baco (bug) ha un’origine curiosa. Quando i calcolatori erano grandi come stanze e funzionavano a valvole invece che a microprocessori di silicio, uno dei primi calcolatori sembrava non funzionare a dovere. Per trovare l’errore i tecnici dovettero smontare tutto e trovarono una piccola farfalla inflata in una valvola, che aveva provocato l’errore.

Portabilità

E’ raro che lo stesso programma giri su più sistemi operativi (talvolta si dice “su più piattaforme”). Il fatto che i programmi non girino su più piattaforme è un problema di portabilità. Un certo programma non può essere “portato” su piattaforme diverse senza modifiche sostanziali al codice per rispettare le convenzioni della nuova piattaforma. Questo vale indipendentemente dalle capacità della piattaforma, che sono normalmente teoricamente equivalenti. Cambia l’architettura, l’orientamento dei diversi sistemi operativi e le capacità degli hardware, ma in teoria tutti i computer possono fare le stesse cose. I programmi vanno però adattati e spesso riscritti per le varie piattaforme. Il problema della portabilità è un problema centrale nel mondo dell’informatica e soprattutto nel mercato dell’informatica.

Interoperabilità

Versioni diverse per diversi OS dello stesso programma non sono portabili: sono versioni diverse, spesso versioni “portate”. In quel caso, il problema è vedere se sono portabili i documenti che producono. Ad esempio, il problema che si pone è quello di valutare se un file prodotto da una versione di Word per Windows può essere trasportata, attraverso un sistema di archiviazione (ad esempio una chiavetta USB) su un altro computer ed essere correttamente manipolata da una versione di Word per Mac OsX. Talvolta anche i file prodotti da versioni diverse dello stesso programma sullo stesso sistema operativo non sono compatibili.

In questo caso si ha un problema di interoperabilità. Cioè versioni diverse di un software, o software diversi, non riescono a interpretare e lavorare sui dati prodotti da altri software.

Documenti di dati e formati

I dati prodotti dai software si chiamano file o documenti di dati. Il problema dell’interoperabilità (l’interpretazione di documenti di dati prodotti da sw diversi) è determinato da diversi fattori. Il principale riguarda il formato di quei dati.

Il formato di un file o di un documento è legato a specifiche logiche che definiscono in quale modo e secondo quali convenzioni i dati e altre informazioni sui dati vengono memorizzate nel documento stesso. Quello dei formati è un argomento molto importante anche per il web, per cui lo riprenderemo in seguito.

Nota: Ovviamente questa è una semplificazione. Esistono programmi che non archiviano dati, ma consentono solo il loro passaggio da un luogo a un altro, anche senza archiviazione. In particolare sono così i programmi che gestiscono le comunicazioni di rete.