Il software
Il software può essere considerato la mente dei dispositivi e delle reti digitali mentre l’hardware (transistor, circuiti integrati, microprocessori e altri componenti elettronici) il corpo.
Il parallelo con l’essere umano è calzante perché il software è effettivamente un prodotto della mente, del pensiero dell’uomo e costituisce un linguaggio, o più precisamente un insieme di linguaggi, un’astrazione matematica e finanche una simulazione della realtà, come vedremo nell’esame dei software videoludici.
Se la meccanica ovvero le macchine aiutano l’uomo a svolgere lavori fisici pesanti o ripetitivi, l’informatica ovvero i software aiutano l’uomo a svolgere lavori mentali pesanti o ripetitivi, come ad esempio memorizzare una grande quantità di dati ed eseguire milioni di calcoli molto velocemente.
L’evoluzione tecnologica degli hardware e dei software ha consentito ai computer di espandere le proprie potenzialità in tutte le fasi che compongono il ciclo di elaborazione delle informazioni digitali e in particolare:
- nella fase di input o di immissione dei dati, poiché la connessione ad altri computer attraverso le reti digitali o la connessione a sensori ha consentito ai computer di raccogliere autonomamente dati e informazioni complesse;
- nella fase di elaborazione, poiché i computer oltre a elaborare le informazioni secondo le istruzioni o gli schemi inseriti dall’uomo riescono entro una certa misura a migliorare e a evolvere questi schemi e istruzioni attraverso la cosiddetta AI o Artificial Intelligence;
- nella fase di output, poiché i computer non solo restituiscono all’utente le informazioni elaborate ma attraverso la connessione alle reti digitali o a dispositivi meccanici possono svolgere azioni autonomamente.
Sulla base dello schema input, elaborazione e output si potrebbe pensare che il software intervenga solo nella fase di elaborazione delle informazioni, invece esso è presente in tutte le fasi: input, elaborazione, memorizzazione, output e comunicazione.
Riprendendo il parallelo con l’uomo, così come il cervello umano controlla senza che ce ne rendiamo conto gli organi del corpo o funzioni basilari come muoversi e camminare, il software è responsabile anche del funzionamento delle periferiche di input, dei sensori, delle memorie fisse e volatili, delle periferiche di output, dei protocolli e del funzionamento delle reti di comunicazione digitale. Le istruzioni codificate in questi componenti hardware costituiscono software di basso livello, ovvero software che interagisce direttamente con i circuiti integrati, che risponde ai software di livello superiore ed è generalmente invisibile agli utenti dei dispositivi digitali.
Il software, infatti, si suddivide in almeno due grandi categorie: il software di base e il software applicativo.
Mentre il software di base si occupa del funzionamento del computer e delle periferiche di input e di output, il software applicativo svolge funzioni di più alto livello connesse alla realizzazione di determinati obiettivi, come ad esempio gestire la contabilità di un’azienda, realizzare un progetto tridimensionale, scrivere una semplice lettera e inviarla via email.
Il software applicativo per funzionare ha bisogno del software di base, per cui i diversi tipi di software possono essere immaginati come strati tra loro comunicanti. Gli strati più bassi comunicano istruzioni in linguaggio binario a circuiti integrati e microprocessori mentre gli strati più alti interagiscono attraverso le periferiche di input e di output con l’uomo o altri sistemi informatici.
Tra il software di base possiamo annoverare il cosiddetto firmware, ovvero istruzioni immagazzinate nella memoria non volatile di dispositivi digitali che si attivano all’accensione. Questo tipo di istruzioni è connaturato ai circuiti elettronici del dispositivo, si tratta quindi di istruzioni fisse che tuttavia in alcuni casi è possibile aggiornare per migliorare le prestazioni o introdurre qualche nuova funzionalità compatibile con il circuito integrato.
Sono software di base anche:
- le implementazioni software dei vari protocolli di comunicazione e trasmissione dati installati nelle apparecchiature che fanno funzionare e che utilizzano le reti digitali;
- i driver ovvero il software che consente di controllare le cosiddette periferiche, cioé componenti relativamente standardizzati inseriti all’interno o all’esterno dei dispositivi digitali;
- le librerie, cioé pacchetti software di un determinato linguaggio di programmazione che svolgono funzioni standardizzate che vengono richiamate all’occorrenza dai software applicativi;
- i compilatori e gli interpreti, ovvero software che si occupano di tradurre le istruzioni scritte nei vari linguaggi di programazione in istruzioni direttamente eseguibili dai microprocessori;
- i sistemi operativi, S.O. oppure O.S. in inglese, che in realtà si trovano a metà strada tra software di base e software applicativo, poiché oltre a gestire le funzioni di base del dispositivo digitale come la memorizzazione dei file, l’installazione di app e quant’altro includono applicazioni specifiche per agevolare la manutenzione del dispositivo e integrano veri e propri programmi applicativi per soddisfare alcune esigenze base dell’utente.
I software applicativi sono invece programmi informatici finalizzati alla soluzione di problemi specifici. I software applicativi sono strumentali al completamento di tantissime attività umane e sono generalmente progettati per essere utilizzati direttamente dagli utenti dei dispositivi digitali. Sono infatti dotati di una interfaccia - grafica o anche solo testuale - per interagire con l’utente, ma possono essere dotati anche di specifiche interfacce per comunicare con altri software - le cosiddette API, acronimo di Application Programming Interface, in grado di rendere disponibili ad altre applicazioni proprie funzionalità attraverso l’adozione di alcuni standard.
I software applicativi, comunemente definiti anche programmi, applicazioni o semplicemente app, sono una categoria molto estesa che va dai software ERP (Enterprise Resource Planning) che integrano la gestione di tutte le funzioni aziendali con licenze d’uso che possono costare milioni di euro alle semplici app installabili sul proprio smartphone spesso gratuitamente.
Generalmente i software applicativi consentono di compiere determinate operazioni in modo più facile o rapido o meno costoso rispetto all’insieme di processi analogici che sarebbe necessario per svolgere le stesse operazioni. Ad esempio, un programma o app di videoscrittura consente di correggere gli errori senza dover digitare nuovamente tutto il testo, come invece era necessario fare quando si usavano le macchine da scrivere. Altresì ci sono attività rese possibili dallo sviluppo e dalla diffusione di software e dispositivi digitali, come ad esempio l’editing video, che un tempo non era nemmeno immaginabile potessero essere svolte da un singolo individuo.
Il software applicativo è frequentemente associato ai Personal Computer, infatti i PC consentono l’installazione di programmi applicativi complessi e professionali in grado di coprire svariate e specifiche esigenze, mentre altri tipi di dispositivi digitali “consumer” sono generalmente limitati a un determinato campo applicativo o ad alcune funzionalità, tant’è vero che non tutti i dispositivi digitali sono dotati di un Sistema Operativo o quantomeno di un S.O. accessibile all’utente.
Come già accennato, il software applicativo per funzionare ha bisogno dei software di base e può quindi essere considerato come un software di livello superiore. In altre parole, è un software che si installa sopra ad altri strati software, è un software generalmente progettato per interagire con l’uomo più che con i microprocessori, è un software in grado di aiutare l’uomo a svolgere determinate attività, come gestire un’azienda, montare un filmato video, impaginare un libro, comunicare e finanche costruire altri software.
Questa ultima funzionalità è particolarmente importante poiché il processo di sedimentazione del software, ovvero la possibilità di creare software che verranno utilizzati per progettare e costruire altri software, consente di accelerare lo sviluppo e l’elaborazione di software sempre più complessi.
Il processo di sedimentazione della cultura umana non è nuovo: l’uomo ha imparato a costruire attrezzi in grado di aiutarlo a costruire altri attrezzi sempre più efficaci ed efficienti, ha imparato a costruire macchine in grado di aiutarlo a costruire rapidamente altre macchine sempre più potenti e complesse, a loro volta utilizzate per costruire infrastrutture sempre più imponenti e tecnologiche.
Tuttavia, lo sviluppo software si differenzia dal processo analogico appena descritto sia per la ricorsività virtualmente infinita - non incontrando gli stessi limiti materiali a cui è sottoposto il mondo fisico - che per la velocità con cui avvengono i processi di sedimentazione delle conoscenze insite nei software.
Infatti, il software è in grado di programmare se stesso attraverso gli algoritmi, ovvero schemi o procedimenti di calcolo applicati sistematicamente. Ad esempio, quella che oggi viene comunemente definita Intelligenza Artificiale è un complesso insieme di algoritmi in grado di automigliorarsi, di apprendere attraverso l’analisi di quantità immense di dati, i cosiddetti Big Data.
Dietro questa sedimentazione culturale della conoscenza c’è sempre l’uomo, ma c’è anche il rischio che gli esseri umani possano perdere il controllo delle innovazioni introdotte dagli algoritmi. Questa perdita di controllo della gestione della conoscenza insita nei software sta già avvenendo e non va confusa con le ulteriori problematiche che sarebbero aperte dall’invenzione di una vera e propria Intelligenza Artificiale.
Ormai il software ha pervaso le nostre vite e ci condiziona in moltissime attività: dall’intrattenimento ai rapporti umani, dalla formazione al lavoro. Per questo è importante sapere come viene prodotto, anche solo per capire quali funzionalità sono implementate dall’uomo e quali invece dagli algoritmi.