This week I read “A history of Haskell: being lazy with class”, a long paper from the third History of Programming Languages conference in 2007. (Simon Peyton-Jones gave the accompanying talk at the conference. His talks are awesome.)
The paper cites Robin Milner’s early work on ML as (Gordon et al., 1979). I wondered whether “Gordon” might be Mike Gordon, a Professor at the Computer Laboratory during my time there. The answer is “yes”. They collaborated in the late 1970s before Professor Gordon went on to lead the development of the HOL theorem prover for higher-order logics.
I never met Professor Gordon, though I occasionally found letters addressed to him in my mailbox because of our common last name and first initials. When I looked up his web site I saw that he passed away in 2017 at age 69, only a few years into retirement.
I realised during my first two years that I was no good at mathematics that involved intricate reasoning or problem solving, but I had a taste for complex abstractions, as long as the ideas were fairly shallow. Most mathematics students like tricky problems and are good at solving then. Not me. I avoided topics like number theory that involved deductive intricacy. I only took courses that were built on layer upon layer of abstract definitions - e.g. manifolds, homology groups - and culminated in one big theorem like the classification of surfaces. Just mastering the standard concepts and theorems was enough work for an undergraduate course and exercises mostly depended only on understanding and regurgitating material from lecture notes. One couldn’t get far enough into the areas to enable novel tricky questions. This suited me as I enjoyed trying to grasp abstract concepts and following beautifully polished textbook proofs. I was pretty much incapable of original thinking, so found exercises involving this hard to impossible. I’ve memories of enjoyably struggling with courses on algebraic topology and differential geometry, both of which I recall as mostly consisting of towers of complicated definitions and constructions.
My experience of higher math was similar, though I’m sure it was far less challenging than Professor Gordon’s was, and I am far less talented than he gives himself credit for.
I feel the same way about the mathematical and algorithmic parts of computer science. I did well enough in those classes, but I never felt that algorithm design, advanced statistics, et al. were going to be my strengths. I prefer the engineering side of computer science – figuring out how to combine, curate, and synthesize in order to solve problems.