# Computer a programma memorizzato

Il computer a programma memorizzato è una tipologia particolare di computer la quale si contraddistingue per funzionare in base ad un programma memorizzato su un supporto di memoria, contrapponendosi al computer a programma cablato.
È in grado di offrire versalità e velocità di programmazione neanche comparabili con quelle offerte dal computer a programma cablato e per tale motivo attualmente il computer programmabile è tipicamente implementato proprio come computer a programma memorizzato. In particolare il computer a programma memorizzato nella memoria centrale ha rappresentato un passo fondamentale nella storia evolutiva del computer (durata secoli) che ha portato al moderno computer programmabile: inizialmente infatti il programma veniva memorizzato nella memoria di massa che, come noto, è più lenta della memoria centrale.

## Terminologia

Se non si conosce il significato dell'espressione "computer a programma memorizzato", essa può trarre in inganno perché può far pensare che anche un computer che memorizza il programma nella memoria di massa (come ad esempio fanno lo Z3 o l'Harvard Mark I) sia un computer a programma memorizzato.
L'espressione nasce invece come traduzione letterale dell'originale inglese stored-program computer, coniata da John von Neumann e usata per la prima volta in First draft of a report on the EDVAC, e siccome tale testo è stato il riferimento per la progettazione della prima generazione di questa tipologia di computer, l'espressione si è diffusa, e permane tutt'oggi, con il significato particolare che gli attribuì von Neumann.

## Descrizione

Un computer a programma memorizzato può essere sia un computer programmabile che un computer non programmabile. In caso di computer programmabile, il programma può essere memorizzato sul supporto di memoria attraverso il computer stesso (e in tal caso il supporto di memoria può essere sia un supporto removibile che un supporto non removibile) oppure può essere memorizzato sul supporto di memoria non attraverso il computer stesso (e in tal caso il supporto di memoria è sempre un supporto removibile). In caso di computer non programmabile invece, il programma non può essere memorizzato sul supporto di memoria attraverso il computer stesso e il supporto di memoria è sempre un supporto non removibile.
Funzionando in base ad un programma memorizzato su supporto di memoria, il processore del computer ha sempre un certo grado di astrazione e una determinata elaborazione dati è data dal programma.

## Storia
### Prima del computer a programma memorizzato

Prima del computer a programma memorizzato venivano memorizzati in memoria centrale esclusivamente i dati del programma e i risultati dell'elaborazione. Il programma invece era hardware (nei computer a programma cablato) oppure software ma memorizzato nella memoria di massa.

### Nascita del computer a programma memorizzato

Con l'avvento del computer elettronico digitale fu subito chiaro che memorizzare anche il programma in memoria centrale sarebbe stata una tappa obbligata in quanto, in caso di programma software memorizzato nella memoria di massa e ancora di più in caso di programma hardware, la velocità di calcolo permessa dalla tecnologia elettronica sarebbe stata completamente vanificata dai tempi di programmazione del computer. Il computer elettronico digitale programmabile che non memorizza il programma in memoria centrale rappresenta infatti, nella storia del computer, solo una brevissima parentesi: dopo il Colossus Mark I del 1943, il Colossus Mark II del 1944 e l'ENIAC del 1946, viene realizzato nel 1948 lo Small-Scale Experimental Machine, il primo computer elettronico a programma memorizzato della storia. A partire dal 1948 il computer a programma memorizzato si diffonde rapidamente diventando in breve tempo la norma per il computer programmabile.
La realizzazione pratica del computer elettronico a programma memorizzato è riconosciuta ai progettisti dell'EDVAC che l'hanno resa di dominio pubblico con il documento First draft of a report on the EDVAC datato 30 giugno 1945. Il concetto teorico del computer a programma memorizzato può essere invece fatto risalire ad Alan Turing (il "padre" dell'informatica moderna), in particolare alla Macchina di Turing universale. Essa è stata descritta da Alan Turing nella pubblicazione scientifica del 1936 On computable numbers, with an application to the Entscheidungsproblem. Pubblicazione scientifica a cui si sono ispirati i progettisti dell'EDVAC.
Anche Konrad Zuse (il "padre" del primo computer programmabile della storia: lo Z1), in una richiesta di brevetto del 1936 (respinta), menziona concettualmente il computer a programma memorizzato.

## Primi computer a programma memorizzato nella memoria centrale

Di seguito sono elencati i primi cinque computer della storia a programma memorizzato nella memoria centrale:
* IBM Selective Sequence Electronic Calculator (costruito negli Stati Uniti; operativo a partire dal gennaio 1948);
* Small-Scale Experimental Machine (costruito nel Regno Unito; operativo a partire dal giugno 1948);
* Electronic Numerical Integrator and Computer (costruito negli Stati Uniti; operativo a partire dal settembre 1948);
* Manchester Mark 1 (costruito nel Regno Unito; operativo a partire dall'aprile 1949);
* Electronic Delay Storage Automatic Calculator (costruito nel Regno Unito; operativo a partire dal maggio 1949).
L'IBM Selective Sequence Electronic Calculator è il primo computer della storia a programma memorizzato nella memoria centrale. Ma non è un computer completamente elettronico. È un computer ibrido elettromeccanico/elettronico. Gli altri quattro computer sono invece computer elettronici.
Come computer a programma memorizzato l'Electronic Numerical Integrator and Computer è il più limitato di tutti perché è l'unico a memorizzare il programma in una memoria ROM (memoria a sola lettura). Gli altri computer invece memorizzano il programma in una memoria a lettura e scrittura. Questa limitazione fa dell'Electronic Numerical Integrator and Computer un computer a programma memorizzato non programmabile (è invece un computer programmabile come computer a programma cablato).