Structure and Interpretation of Computer Programs
# Structure and Interpretation of Computer Programs

Structure and Interpretation of Computer Programs (comunemente noto con l'acronimo SICP, o come wizard book, "libro dello stregone", per via dell'illustrazione in copertina) è un libro di testo che tratta i principi della programmazione, tra i quali astrazione, astrazione metalinguistica, ricorsione, interpreti e programmazione modulare, ed è considerato un testo classico dell'informatica.

La prima edizione è stata pubblicata nel 1985 da MIT Press, scritta da Harold Abelson e Gerald Jay Sussman, professori al Massachusetts Institute of Technology (MIT), insieme a Julie Sussman. La seconda edizione è del 1996. Il libro è distribuito sotto licenza Creative Commons Attribution ShareAlike 4.0.

## Contenuti

Il libro usa come linguaggio di programmazione scheme, un dialetto del lisp, e presenta molti concetti fondamentali della programmazione. Nei capitoli avanzati viene trattata anche l'implementazione di una register machine, tramite la definizione e implementazione di un assembler, usato poi come macchina virtuale per l'implementazione di interpreti e compilatori.

Nel testo vengono usati alcuni personaggi ricorrenti, i cui nomi sono tipicamente assonanti a qualche concetto che impersonano, tra i quali Ben Bitdiddle (creato da Steve Ward e già usato in un corso precedente, negli anni Settanta), Eva Lu Ator (evaluator), Louis Reasoner (loose reasoner), Alyssa P. Hacker (a lisp hacker), Cy D. Fect (side effect, un "programmatore C riformato") e Lem E. Tweakit (let me tweak it).

## Impiego

Il libro è stato impiegato al MIT come testo per l'omonimo corso di introduzione alla programmazione (6.001). Tale corso è stato successivamente rimpiazzato da un nuovo corso (6.0001), che impiega Python come linguaggio di programmazione. Il testo è stato impiegato come testo anche in altre università ed è usato al MIT nel corso Large Scale Symbolic Systems (6.945).

Molti corsi introduttivi in precedenza si concentravano tipicamente sui dettagli di qualche linguaggio di programmazione, mentre SICP cerca di trattare pattern generici per problemi specifici e di costruire strumenti software che li implementino.

