I’ve been lucky enough to spend some time chatting with Oliver Mason, a brilliant local Computational Linguist and iOS developer. Below, he talks about his background in the first part of an interview where he’ll be talking about what programming languages have shaped his experiences to date and which he recommends for others.
I first programmed in BASIC on a Sinclair ZX81; basically my friends and I typed in short programs from computer magazines. Slowly through changing and playing around with the code I picked up programming. First BASIC, later Z80 assembler, which on an Amstrad CPC I also did under CP/M. At uni I did computational linguistics, and in the first year we learned Pascal, followed by Prolog and Lisp alternating in the second year. I basically wrote Pascal programs in Prolog, and while in my third year tried Lisp but gave up on it as at the time I couldn’t quite see the point of it. I also did a brief Fortran module for digital signal processing (but Fortran is awful and I haven’t touched it since).
My experience so far was fairly limited paradigm-wise, as all language were pretty much imperative, and as I said, I used the same style regardless of language. Just the syntax and a few minor things were really different (taking aside Prolog and Lisp). For a project I also learned C, which came easy once I sorted out the memory management. One further element which is often overlooked is mastering the Unix command-line tools, which allow you to do a lot of jobs with minimal programming, and also have a powerful scripting language in awk. (I never liked Perl–too much like BASIC).
When I started my first job here in Birmingham I was working on a larger system, and found C fairly limited in terms of modularity, so moved on the C++ and OOP. This was pretty horrible, not only syntax-wise. So I was pretty pleased when Java came along with its promise of write-once, run everywhere (which kind of worked for server-side applications). I also picked up PHP for doing interactive websites (I did write a web-based shop in C, which was fun). But I was firmly into OOP, and even used design patterns etc. With iOS I had to use Objective-C, which was not hard (again, it’s quite similar to the others). As Java got more bloated I then abandoned it in favour of Objective-C, though I miss the platform independence.
It was only when I got into parallel programming that I picked up Erlang: this reminded me strongly of Prolog (the syntax is very similar), and, reading about the benefits of functional programming, I finally got the point. I now try to separate the language (i.e. the syntax) from the paradigm (OOP, imperative, functional), and some languages are better suited to some styles of programming than others. What I (now) like about Erlang and Lisp is their simplicity: they are (mostly) elegant, and you don’t need a big book to understand them (as I do with Scala).