A couple of weeks ago, for some now-forgotten reason, I found myself thinking about the first programming language I ever learnt.
In particular, I was thinking about the pros and cons of it being a minimal, assembler-like language that was designed specifically to teach the fundamentals of computers and programming.
The language was CESIL (“Computer Education in Schools Instructional Language”), the year was 1974, I was 15, and the class was GCSE “Computer Studies”. The hardware was hand-punched cards that were sent off by post to some other place, with results returned a week later, just in time for the next lesson.
For the second year we moved on to BASIC using a Teletype crammed into a corner of a little room up in the school’s attic (theoretically that should have been a lot better, but in practice it was so inconvenient and unreliable as to be almost useless).
That sounds unbearably tedious and uninspiring now, but way back then it was amazing that we were able to use an actual real-life computer and were learning about computers as part of our schooling.
Anyway, as clunky as the arrangements were, and as much as others will no doubt disagree, I still think CESIL itself was a great introduction to programming.
Conceptually, it was an assembler-like language that operated on integer values in a single register. It supported:
- Named variables
- A handful of simple operations on the register and one variable or constant
- Conditional branching based on testing of the register value and labels on statements
- Some minimal input facilities (reading one value at a time from a list supplied at the end of the source file)
- Some minimal output facilities (a simple “print” statement) facilities
- Pretty much nothing else… at least as far as I remember.
The syntax was just about the simplest one could imagine for that particular set of features. You can probably already picture the entire language.
The beauty of this was that, with no prior knowledge of computers of any kind (which in those days usually meant not even having a realistic concept of what a “computer” is), you could be taken straight into tackling simple algorithmic problems (like finding the largest of a given set of numbers, sorting numbers etc), without any undue distraction or complications. At the same time the class lessons could use this as a context for explaining computer hardware, what was actually happening when your program ran, and more general computer-science topics.
You were immediately seeing a reasonable model of the fundamental concepts of computers and algorithms, getting a feel for what programming is like, how to test and debug code etc, but without getting bogged-down in syntax rules or complex abstractions. The once-per-week cycle taught you to be careful and precise, and to desk-check and dry-run your code. More generally it forced you to figure out what you were doing, rather than just flapping around and guessing with a trial-and-error approach (like so many people seem to do today).
In practice the limited resources also meant that some things had to be done in pairs or small teams. So whether by design or accident, you also got a taste of what it’s like to develop code with other people.
Against it, there was clearly a limit to how far you could go with CESIL, the practical difficulties made for very slow progress, and the language itself was never going to be of any direct use to you afterwards (as opposed to, say, being taught a real assembler language). So even in a two-year course you really did need to move on to something else fairly quickly and then forget about CESIL.
But on the whole I still think it was a great way to lay the foundations for a lifetime of programming. I’m grateful to whoever instigated getting this set up and introduced into schools – I suspect my career may have been very different without it!
Anyway, once this had crept back into my head for no particular reason, it seemed worth a quick look to see if CESIL has entirely vanished or whether there’s any information on it still knocking around. Whilst I’ve not found any official documentation or history, somebody has blogged about stumbling across the CESIL course book.
More astonishingly, someone has resurrected it – by writing an open-source interpreter for it. I’m rather tickled to see that someone has done this, just for the sake of it!