Welcome to Spivey's Corner
https://spivey.oriel.ox.ac.uk/corner
This wiki provides course materials and a discussion forum for the lecture courses that I gave to Computer Science students in Oxford during the time I taught there. Some pages contain course material, and I have protected those pages from editing, so that everyone can see the material as I presented it. Each protected page has an associated discussion page, and you are welcome to add comments there, or to make corrections or additions to any of the other pages. To make edits, you will need to create an account for yourself, but anyone with an Oxford e-mail address is welcome to participate, in a way consistent with the code of conduct.
I'm now in the process of retiring from my post in Oxford, so I've decided to make all the course materials accessible to everyone, including my solutions and notes about tutorial and laboratory exercises. This will make the site more useful to visitors from outside Oxford. These solutions were formerly accessible only to Oxford tutors, but I just don't have the time now to maintain a list of who is and who isn't allowed to see them.
Course materials
- Compilers, a course where we build compilers for various programming languages using OCaml.
- Digital Systems, a course about digital design and low-level programming in C and ARM assembly language.
- A Scala-based edition of a course on Object-Oriented Programming.
- An Oberon-based edition (the only worthwhile one) of a course on Imperative Programming.
- A course on Programming Languages based on interpreters written in Haskell.
- Notes for a course on Category Theory for Functional Programming.
- An earlier course on elementary design of Digital Hardware.
- A course on Operating Systems.
College teaching
- Pages for The Consortium.
- Materials for First Year courses.
- A convenient page gives access (for registered users) to recent Oxford exam papers in Computer Science, with links to an archive of older papers.
Project ideas
- A separate page has a list of projects that I most recently offered to supervise.
- Another page has some older project ideas. Some of these have been done and the results are publicly available; others don't seem so relevant now as when I first suggested them.
Books
Note: These books are slowly moving to GitHub, and PDF versions where available can be downloaded from there.
- Understanding Z.
- Z Reference Manual.
- An introduction to logic programming through Prolog. The GitHub repository contains a PDF copy of the book, and sources for building the picoProlog interpreter.
- A new project: Bare metal micro:bit – 21 experiments in low-level programming.
Papers
- Faster Coroutine Pipelines, presented at ICFP'17.
Talks
- Bringing declarative programming to Life, Computing At School conference, Birmingham, 18th June 2016.
- Parallel Parsing Processes Revisited, S-REPLS 10, September 2018.
Software
- The Fuzz typechecker for Z.
- The Oxford Oberon-2 compiler OBC. Moving to https://github.com/Spivoxity/obc-3/wiki/Oxford-Oberon-2-compiler.
- Thunder, a portable JIT library.
- GeomLab.
- Oxenv, a virtual appliance for VirtualBox with software to support Oxford teaching in Computer Science.
Pages for tutors
There are pages restricted to tutors that contain solutions for problem sheets and past exam papers. Tutors should create an account, then send an e-mail to Mike, who will add them the the tutors group and give them access to the tutors' section of the wiki.
Miscellany
- That article in the Sunday Telegraph.
- Notes about experiments with hardware hacking.
- A rag-bag of mixed amusements and diversions.
- A page of random links to curiosa of the internet.
- Various tutorial notes written about specific problems.
- Some tech tips of variable accuracy.