Software
pagina iniziale
Il termine software (usato in ambito informatico) è una vocabolo creato a partire da due termini della lingua inglese, soft (morbido) e ware (manufatto, oggetto) e sta ad indicare un programma o un insieme di programmi in grado di funzionare su un elaboratore.
Storia del software
Il termine Software ha origine durante la seconda guerra
mondiale. I tecnici dell'esercito inglese erano impegnati nella decrittazione
dei codici tedeschi di Enigma, di cui già conoscevano la meccanica interna
(detta hardware, roba dura, nel senso di ferraglia) grazie ai servizi segreti
polacchi. La prima versione di Enigma sfruttava tre rotori per mescolare le
lettere.
Dopo il 1941, ad Enigma venne aggiunto un rotore, e il team di criptanalisti
inglesi, capitanati da Alan Turing, si dovette interessare non più alla sua
struttura fisica, ma alle posizioni in cui venivano utilizzati i rotori della
nuova Enigma. Dato che queste istruzioni erano scritte su pagine solubili
nell'acqua per poter essere più facilmente distrutte, e per contrasto con
hardware, furono chiamate software (letteralmente roba tenera).
Il senso moderno del termine deriva dalle istruzioni date ai computer, ed è
stata utilizzata per la prima volta nel 1957 da John Wilder Tukey, noto
statistico statunitense. Dal 1950 l'analogia tra l'hardware ed il corpo umano e
quella tra il software e la mente umana si è fatta molto forte, dal momento che
Turing ha sostenuto che il progresso tecnologico sarebbe riuscito a creare entro
il 2000 delle macchine intelligenti, in grado di pensare autonomamente per la
risoluzione dei problemi.
Classificazione
I software possono essere classificati secondo diverse
caratteristiche: funzionalità (video scrittura, foglio elettronico, database,
browser ecc), grado di apertura (open source o commerciale), tipo di sistema
operativo (i software possono girare su Linux, MacOs, Unix o WIndows),
istallabile o portabile o tipo di interfaccia (alfanumerica o grafica). Per fare
un esempio, un software del tipo sistema operativo - basato su Linux - può
essere a riga di comando o a interfaccia grafica e può essere una distro live o
installabile.
I software possono essere divisi in quattro categorie principali:
- Software di base, che a sua
volta si divide in tre ulteriori categorie:
- Sistemi operativi
- Compilatori
- Librerie
- driver
- firmware (cioè i software contenuti direttamente nell'hardware e che ne
regolano le funzioni interne)
- programmi applicativi (cioè tutti quei software
che vengono utilizzati per il lavoro quotidiano: dai programmi per l'ufficio, ai
videogiochi)
Realizzazione del software
Un software viene normalmente realizzato utilizzando uno o
più linguaggi di programmazione. Se il progetto diventa complesso, è opportuno
dividere il programma in uno o più moduli, che possono essere così affidati a
diversi programmatori, modificati più semplicemente e riutilizzati in altri
progetti.
La fase detta di compilazione, traduce ogni file del codice sorgente in un file
oggetto contenente il programma in linguaggio macchina adeguato all'architettura
hardware di destinazione. In seguito tutti i file oggetto attraversano una fase
di linking per giungere al prodotto finale: il file eseguibile.
Alcuni software non vengono compilati in quanto le istruzioni contenute nel
codice sorgente vengono subito eseguite da un software detto interprete.
La gestione del processo di sviluppo è caratterizzato dalla scelta di un modello
di sviluppo del software codificato nell'ambito dell'Ingegneria del Software
(Software Engineering), esistono:
- Il modello classico, o a cascata (water-fall)
- Il modello a spirale (object oriented)
Qualità del software
La realizzazione del software è un'attività complessa articolata in più fasi.
Per questo motivo può essere associato ad un prodotto ingegneristico, ma se ne
differenzia soprattutto per alcune caratteristiche:
- è molto "malleabile";
- è un prodotto human intensive (e cioè un prodotto
che richiede un considerevole sforzo in risorse umane perché si concentra
soprattutto sulla progettazione e sull'implementazione).