I primi calcolatori vennero costruiti intorno agli anni 40 del ‘900. Composti di valvole, erano molto ingombranti e usavano un sistema a logica cablata. Per questa, hardware e software erano interdipendenti. Le macchine non erano riprogrammabili.
Fu con Von Neumann che si ebbe la logica programmata, ovvero hardware (dispositivi I/O, elaboratore e memorie) e software indipendenti. Con questa le macchine divennero programmabili e general purpose. Ad oggi i calcolatori seguono il meccanismo di Von Neumann.
La memoria in una macchina moderna diviene fondamentale. Questo perché il software viene caricato come sequenza di codice bit (questo è il codice macchina). Questo codice è particolarmente complesso da interpretare, perciò generalmente viene ottenuto dal calcolatore a partire da dei linguaggi più astratti facilmente interpretabili dall’uomo. Questo è il codice sorgente.
Il codice sorgente
Viene scritto con un linguaggio di programmazione (linguaggio astratto), viene poi interpretato o tradotto dalla macchina come codice macchina.
Nei software proprietari questo non è accessibile e viene protetto da licenza EULA, mentre se è facilmente accessibile e modificabile si parla di software open source e di free software (libero).
Nei moderni calcolatori il codice sorgente è soggetto al programma di Von Neumann, ovvero al ciclo fetch-decode-execute.
fetch: si organizza l’instruction register. Si procede solo dopo il completamento dell’operazione
decode: il codice viene interpretato/tradotto per poi venir eseguito
execute: il codice viene eseguito