Home
Se vuoi capire il computer mettici le mani

28 Ottobre 2022

Se vuoi capire il computer mettici le mani

di

La programmazione sviluppa il pensiero computazionale. Però si arriva a capire il computer veramente solo se entriamo in contatto con i suoi componenti.

Capire il computer tramite l’interazione al livello più vicino possibile con il suo hardware

Apogeonline: Come hai imparato a capire il computer come lo capisci oggi? Più studio o più esperienza?

Charles Petzold: Nel 1977 avevo finito il college da due anni e lavoravo per una società di assicurazioni. Non mi interessava particolarmente capire il computer. Avevo uno hobby: mi dilettavo con un economico sintetizzatore musicale analogico che avevo comprato e iniziavo a chiedermi se avrei saputo costruire un sequencer, cioè un apparecchio che può memorizzare una serie di note e riprodurle a piacere.

Non avevo idea di come fare. All’inizio pensavo a una soluzione di tipo elettromeccanico: un motore che muoveva in circolo una parte metallica per toccare una serie di contatti, un po’ come succede in un tergicristallo. Poi però ho iniziato a sfogliare libri nella sezione elettronica di una libreria della zona (la libreria Barnes & Noble originale, prima che divenisse una catena), per scoprire che potevo costruire un sequencer usando circuiti integrati. Con quei libri ho iniziato a imparare la logica digitale e le famiglie di chip TTL e CMOS. Ho cominciato a comprare chip da aziende californiane che vendevano per corrispondenza e a cablarli insieme su schede apposite.

Un anno dopo, avevo un sequencer funzionante, con una memoria nella quale codificare note, capace di riprodurre sequenze differenti in funzione dello stato di alcuni DIP switch. Ho pensato che sarebbe stato utile memorizzare altri codici in memoria per controllare lo hardware in modo più evoluti. Nel ragionare su che cosa sarebbero stati questi codici, sono arrivato a capire il computer; di fatto lo stavo reinventando.

Leggi anche: Il codice e le sue radici: 5 risposte per capire

Allora ho cominciato un progetto più grande: costruire un computer per controllare un sintetizzatore musicale digitale. Come microprocessore scelsi lo Z-80 di Zilog, che conteneva un superinsieme delle istruzioni dell’8080 Intel.

Verso il 1982, la macchina raggiunse la sua forma definitiva. Il sintetizzatore generava digitalmente in tempo reale 80 onde audio, che venivano combinate in coppie secondo una tecnica di sintesi musicale nota come modulazione di frequenza (FM). Il computer controllava il sintetizzatore e io sviluppai un linguaggio di programmazione musicale, che usavo per realizzare composizioni musicali.

Sul mio sito si trova una descrizione più dettagliata di questo progetto, con immagini e file musicali.

Così ho imparato a progettare logica digitale e scrivere in linguaggio macchina per il microprocessore. Quest’esperienza mi ha insegnato le basi necessarie per scrivere codice.

Sai capire il computer in termini di hardware che software, molto sotto la superficie. Quale dei due elementi hai acquisito prima? Ne preferisci uno?

Lo hardware digitale può fare cose utili anche da solo. Un esempio ovvio è l’orologio. (Nella seconda edizione di Code ho aggiunto un capitolo che esplora vari modi di mostrare l’ora con un orologio digitale).

Chi cerca di capire il computer pensa normalmente a hardware e software dei computer come distinti e separati, cosa non vera. Hardware e software di un computer sono intimamente connessi. Al livello più basso, il software è un valore immagazzinato nella memoria, ma i bit che formano quel valore sono segnali hardware. Nel costruire un computer, hardware e software sono sempre progettati insieme, perché lo hardware deve essere in grado di rispondere a codici software specifici.

Perfino quando Charles Babbage progettava (senza costruirlo) il primo computer digitale, lo faceva per software specifico; Ada Lovelace pubblicò il primo programma per computer, progettato per usare la macchina di Babbage.

A costruire hardware mi sono divertito. Però ultimamente preferisco il software, perché è molto più facile fare esperimenti e apportare cambiamenti.

Che sistema hardware e/o software ha ispirato maggiormente la tua generazione per l’apprendimento della computer science?

Non posso parlare a nome della mia generazione. Ho un paio di anni mano di Steve Wozniak e un paio più di Bill Gates, che immagino siano della mia generazione, ma le nostre esperienze e il nostro modo di capire il computer sono molto differenti!

Nel 1975 esistevano numerosi computer che ci hanno fortemente influenzato: Altair, Apple II, Atari, TI-99, Sinclair, Commodore, TRS-80. Miei amici ne avevano alcuni, che però mi interessavano poco. Mi sembravano giocattoli e al massimo venivano usati per giocare. Alla fine degli anni settanta, nella azienda in cui lavoravo, programmavo in PL/1 su un terminale IBM 3270 connesso a un IBM 370. Cose diverse da giocattoli!

Il primo computer che ho comprato in negozio fu un Osborne 1 nel 1983. Era un computer da casa abbastanza serio. L’anno successivo ho acquistato un PC IBM con due lettori di floppy.

Ci sono commentatori per i quali, una volta, era più facile capire i computer mediante la loro esplorazione e la loro modifica, guidate da intuizione e curiosità, e da questo imparare; all’opposto, i computer di oggi sarebbero chiusi e troppo complessi, fino a scoraggiare il desiderio di armeggiarci per imparare. Che ne pensi?

Condivido. La situazione è la stessa con automobili ed elettrodomestici. Ho un televisore da sostituire non perché sia rotto o perché lo schermo mostri cattive immagini, ma perché non posso aggiornare il software!

Almeno su Windows, è ancora possibile scrivere codice in assembly grazie a macroassemblatori a riga di comando installati via Visual Studio. I linguaggi assembly sono tuttavia diventati molto più complessi e sono passati decenni da quando scrivevo codice assembly personalmente. Un programmatore poteva scrivere in assembly più velocemente di un programmatore con un linguaggio di alto livello. Questi ultimi sono diventati più raffinati a livello di ottimizzazione e ora non è più vero.

Non sono sicuro che ci siano soluzioni. Ogni tanto mi viene voglia di provare a modificare il software della mia auto, ma ho timore di rompere qualcosa.

Che cosa potrebbe fare oggi una persona desiderosa di capire il computer al livello che padroneggi tu?

È ancora possibile acquistare chip TTL e CMOS e altri componenti, per cablarli su schede da prototipazione. Un progetto classico è l’orologio. Si può imparare moltissimo con questa tecnica. È ugualmente possibile reperire microprocessori a otto bit come una volta e costruire un computer primitivo.

Pensi che la scuola dovrebbe insegnare a capire i computer a basso livello? Dovrebbe farlo, o è meno importante che in passato?

So che alcuni insegnanti usano Code per insegnare a capire il computer nel suo funzionamento fondamentale. È una buona idea! Spero che gli studenti vadano anche oltre la lettura. Che costruiscano qualche circuito. Questo tipo di esperienza ha tuttora un grande valore.

Quale sistema operativo è stato decisivo nel cambiare la tua vita informatica e ha formato il tuo modo di capire il computer? E perché?

Ho imparato un sacco con il mio primo computer acquistato in negozio, un Osborne 1 che funzionava in CP/M. Ho imparato molto grazie al DOS nei primi PC IBM.

I sistemi operativi di oggi fanno molto più che fornire semplice input/output e una interfaccia a riga di comando per accedere a un disco. Oggi la programmazione prevede di lavorare con controlli di input raffinati, grafica, video e audio, accesso a Internet. Windows è ha avuto un ruolo importante nella mia carriera e mi ha aperto un ventaglio più completo di opzioni di programmazione via API.

Tra una scheda Arduino, un Raspberry Pi e una breadboard, che cosa sceglieresti per smanettare e perché? O preferiresti altro?

Non ho esperienza personale con Arduino o Raspberry Pi, ma da quello che leggo sono piattaforme eccezionali per capire il computer a basso livello, approfondire la programmazione dello hardware e divertirsi molto mentre questo accade.

È opportuno, oggi, dedicare tempo a imparare a programmare direttamente una CPU? O è meglio ricorrere a qualche linguaggio quasi di basso livello come Rust?

Ho sempre creduto che fosse vitale imparare la programmazione delle CPU prima di passare a linguaggi di alto livello, ma era un tempo in cui si programmava ad alto livello quasi solo con C e C++. Si capiva subito se un programmatore C aveva iniziato dalla programmazione delle CPU: se la cavava bene con i puntatori invece di andare in confusione!

In questi giorni, va detto, i programmatori hanno molte cose da imparare e i puntatori hanno perso importanza. Non sono sicuro che i programmatori di oggi abbiano tempo per imparare a programmare le CPU.

Ritengo comunque che i programmatori dovrebbero imparare più linguaggi – di basso e alto livello – invece che uno solo.

Perché le persone che si dedicano solo al software e ignorano consapevolmente i dettagli dello hardware si perdono qualcosadi importante nel lungo periodo?

Si perdono la profonda bellezza dell’interno dei computer. Non hanno la visione completa di come realmente funzioni il software che scrivono e che cosa faccia. Il loro modo di capire il computer è trattarlo come una scatola nera magica. Che magica non lo è affatto.

Immagine di apertura di Frank Wang su Unsplash.

L'autore

  • Charles Petzold
    Charles Petzold ha scritto di computer e informatica per più di 35 anni. All'inizio della sua carriera ha vinto il Windows Pioneer Award per i suoi contributi all'evoluzione del sistema operativo Microsoft. Da allora ha pubblicato numerosi testi che esplorano e documentano il mondo dei computer a vari livelli. Code è il suo best seller assoluto e da oltre vent'anni un punto di riferimento per i programmatori di tutto il mondo.

Vuoi rimanere aggiornato?
Iscriviti alla nostra newletter

Novità, promozioni e approfondimenti per imparare sempre qualcosa di nuovo

Gli argomenti che mi interessano:
Iscrivendomi dichiaro di aver preso visione dell’Informativa fornita ai sensi dell'art. 13 e 14 del Regolamento Europeo EU 679/2016.

Libri che potrebbero interessarti

Tutti i libri

Code

Il linguaggio segreto di computer e software

37,91

39,90€ -5%

di Charles Petzold