# Scheme related work.

## 2 Abstract

This page will describe the project that I undertook in 2019-2020, with the goal of modernising computer science education. Its purpose is to collect in one place links to all artefacts that were produced during the project execution, with commentary.

The object of study was one of the most famous programming problem textbooks, the "Structure and Interpretation of Computer Programs", Second Edition, by Abelson, Sussman and Sussman. At the moment of writing of this document, 24 years have passed since the release of SICP, and many things may change in computing in such a time frame. Hence, apart from looking at the book itself, it was interesting how much effort would be additionally required in order to replicate the experience of the era when the book was still fresh.

This documents tells the story of this endeavour. Initially, there was no plan for making any kind of comprehensive post-mortem of the project. However, the project turned out so long, so labour-intensive, and eventually, so fruitful, that making a summary has arisen to be necessary, even if for myself and my readers only, and only to list artefacts.

In short, I have solved all of the SICP's problem set in a consistent and reproducible fashion, using modern software, filling the gaps in supporting software and libraries, and documenting as much of my work as possible, in particular how much time every problem required, and how much external help was requested.

This document is under development.

## 3TODO The Story [0/2]

### 3.1 Time Management Video Tutorial

In order to find time, as a working person, I needed a more systematic approach to time management. Since I had already chosen org-mode as the solution medium, using org's time-management facilities was an obvious choice.

Following the general principle that learning something is the easiest when you are teaching it, I organised a seminar/lecture. This lecture was well-received by the audience, because it was given during the time of the corona-virus pandemic of 2020, so quite a lot of people found themselves locked in their home, and in the need to structure their time more efficiently.

This approach is not unlike the one outlined by John Lees-Miller (https://github.com/jdleesmiller) in his article "How a Technical Co-founder Spends his Time".

There is no presentation file, because it was a hands-on tutorial given right into the time management software.

### 3.2 SICP Solution

In short, I have solved all of the problem set, measuring how much time every problem required. Furthermore, I had to write and publish several libraries, in order for the solution to be runnable on modern Schemes, and be as portable between them, as possible.

#### 3.2.1 Solution

Eventually, there were two artefacts produced from the solution of SICP:

The org-version is strongly preferred to the pdf version, because the pdf version requires certain uncanny tricks to get built, has no added value and is 5000 pages long.

To use the org-mode one, you need chibi-scheme of a sufficiently recent version, ImageMagick, as well as GNU Fortran for the last two exercises. Emacs is also strongly recommended.

#### 3.2.2 Schemetran

During the solution process, one of the exercises requires writing a Scheme interpreter in "a low level language of your choice". In my case this choice happened to be Fortran, partly due to a relatively greater popularity of Fortran in 1996, partly due to relatively straightforward memory management. It is a toy implementation, not recommended for any serious applications. It's likely leaking memory and compares symbols in $$O(n)$$.

#### 3.2.3 SRFI 203: A Simple Drawing Language in the Style of SICP

Scheme Requests for Implementation is the Scheme's equivalent of XEPs or PEPs or JCPs. In order to make possible working with graphics in Scheme, I had to implement several interfaces assumed to be "given" in SICP. The graphics sub-library found its place as SRFI-203:

#### 3.2.4 SRFI 216: SICP Prerequisites (Portable)

I also had to write a support library that packages the functions that are already available on modern schemes. (Unlike SRFI-203, which implemented an unportable subset.)

There review process has been started on 2020-11-15. There is also a Lay Summary in English, and in Russian.

### 3.3TODO ICFP Paper

Since this took so long and made me think that much, I decided to analyse the solution process and to document it for future reference. The result of this analysis ended up being substantive enough for a whole paper, and was later presented at ICFP 2020, Scheme Track.

The papers were "published online", which means that ACM is going to maintain the website with a lay summary for a while, and hope that the papers will be mirrored by the major publishers… I guess.

In any case, below you can find the:

### 3.4TODO ICFP Presentation

Every "scientific" paper nowadays needs a supplementary paper to explain what it is actually about. This report is not an exception.