Software
Il termine software (usato in ambito informatico) può indicare l'insieme dei programmi (o uno solo di questi) in grado di funzionare su un computer.
Classificazione
All'interno del software si possono distinguere alcune grandi categorie:
- i sistemi operativi
- i driver
- i programmi applicativi (cioè tutti quei software che vengono utilizzati per il lavoro quotidiano: dai programmi per l'ufficio, ai videogiochi)
Origine
Il termine software prende origine durante la seconda guerra mondiale. Gli inglesi erano impegnati nella decrittazione dei codici di Enigma, di cui già conoscevano la meccanica interna (detta hardware, nel senso di ferraglia) grazie ai servizi segreti polacchi. La prima versione aveva tre rotori per mescolare le lettere. Dopo il 1941, all'Enigma della Marina tedesca 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. Poiché queste istruzioni erano scritte su pagine solubili nell'acqua, per poter essere più facilmente distrutte, da ciò, e per contrasto con hardware, furono chiamate software. Il senso moderno del termine deriva dalla traslazione del senso alle istruzioni date ai computer ed è stata utilizzata per la prima volta in questo senso nel 1957 da John W. Tukey, noto statistico della Princeton University.
Nella storia dell'evoluzione del software bisogna analizzare lo sviluppo dell'hardware. Come evidenziato dalla seconda legge di Moore, oltre ai costi, una minaccia più seria alla velocità di elaborazione, viene probabilmente dall'area software. Infatti ciò che conta per un'utente non è tanto la velocità di elaborazione del processore, quanto la velocità effettiva di processazione, calcolata in base al tempo che occorre alla CPU per eseguire le diverse operazioni, come la videoscrittura di un testo o l'output di un foglio elettronico.
Nathan Myhrvold, direttore dell'Advanced Technology Group della Microsoft, ha effettuato uno studio sui prodotti Microsoft calcolando le linee di codifica per le successive release dello stesso software:
Basic: 4.000 linee di codice nel 1975 a 500.000 nel 1995
Word: 27.000 linee di codice nel 1982 a 2.000.000 nel 2002
Myhrvold traccia un parallelismo con la legge di Moore: "dunque abbiamo aumentato la dimensione e la complessità del software ancora più rapidamente di quanto non prevedeva la legge di Moore". In effetti, è proprio per questo motivo che esiste un mercato per i processori più veloci; "gli utenti del software hanno sempre consumato la nuova capacità di elaborazione ad una velocità uguale o superiore a quella con cui i produttori di chip la mettevano a disposizione" (Stewart Brand, 1995).
In ogni caso, sia l'osservazione di Brand, sia il ragionamento di Myhrvold, non tengono conto delle caratteristiche aggiuntive consentite dalle linee di codifica addizionali e quindi enfatizzano l'impatto negativo del boom del software.
Ciclo Wintel
"La maggior potenza di ogni generazione di chip Intel, viene da una nuova generazione di applicazioni basate su Windows, dando origine a una rinnovata domanda di chip ancora più potenti, necessari per far girare nuovi software a loro volta ancora più esigenti in termini di potenza"
Il "Ciclo WINTEL", che prende il nome dai colossi di riferimento, (processori Intel e sistemi operativi Windows - Microsoft), sta a indicare per l'appunto che la complessità di nuovi software (in grado di funzionare in ambiente Windows) esaurisce tutta la capacità computazionale messa a disposizione dai nuovi processori (la cui casa produttrice di spicco è Intel). Schaller nel 1996 disse a proposito del ciclo Wintel: "every time Andy Grove makes a faster chip, Bill uses all of it".
Osservazione di Nathan Myhrvold
Nathan Myhrvold, ex Top executive di Microsoft, disse: "il software è come un gas che si espande per riempire il contenitore che lo contiene". In effetti l'evoluzione tecnologica del software ha seguito questa sua legge:
- Anni '80: elaborazione di testi eseguita da programmi di poche decine di kilobyte di memoria (e.g. troff);
- Oggi: word processor decine di megabyte (e.g. word) .
La continua aggiunta di nuove funzionalità al software esistente giustifica la costante richiesta di processori più veloci, memorie più grandi e più ampie capacità di I/O.
Infatti, anche le altre tecnologie si sono evolute di pari passo:
- i dischi rigidi da 10 MB (1982) a 60 GB (2003);
- i modem analogici da 300 bit/sec a 56 kbit/sec.
Organizzazione interna
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, manutenuti più semplicemente e riusati in altri progetti.
Una fase detta di compilazione traduce ogni file di codice sorgente in un file oggetto contenente il programma in linguaggio macchina adeguato all'architettura hardware di destinazione. Infine tutti i file oggetto attraversano una fase di linking per realizzare il 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 da un ciclo di vita codificato nell'ambito dell'Ingegneria del Software (Software Engineering, nella dizione anglosassone) quali
Qualità del software
La realizzazione del software è un'attività complessa che richiede molte fasi. Per questo motivo può essere associato ad un prodotto ingegneristico ma se ne differenzia soprattutto per alcune caratteristiche:
- è molto malleabile, tale caratteristica porta a pensare che modificare il software sia banale, ma non è proprio così;
- è un prodotto human intensive, cioè, richiede un grosso sforzo in risorse umane perché si concentra soprattutto sulla progettazione e sull'implementazione.
Esistono molte qualità che si richiede al software che sono descritte più approfonditamente nella sezione corrispondente.