David R. MacIver
I'm a software developer with a strong background in mathematics. I did a masters degree in mathematics, then reinvented myself as a software developer. Since then I've worked on a variety of projects. I've mostly worked in data analysis and the back-end of web projects, but have also worked on RabbitMQ and the Scala compiler and standard library and am happy to give most things a go if I don't think they're a million miles away from what I'm good at.
Backend Software Developer at Lumi (April 2013 to Present)
I primarily work on the recommendation engine at Lumi, but my responsibilities include on a variety of other things. In particular I've been very vocal on security issues and have ended up doing a certain amount of ops work. As well as the dev work my job seems to involve a lot of being vocal about the things everyone already knows are problems but need a push to get us on track for sorting out.
Senior Software Developer at Aframe (February 2010 to March 2013)
I started out at Aframe two days a week working on some maths for them - primarily centered around recommendation - but through a distressing inability to conceal competence ended up working on more and more areas and acquiring more and more responsibilities - first I ended up working on upgrading the feature set of one of the existing RabbitMQ ruby clients, then I ended up answering everyone's questions about everything, then I ended up taking over various parts of the system that needed improvement. I authored or at least interfered with most of the back end code and grudgingly conceded that if anyone counted as the system architect it was probably me. Additionally there was a period where I masqueraded as head of development and I was very involved with hiring and mentoring new back-end developers.
I mostly worked on the client libraries: primarily the Java one, but also the Erlang and C# ones. I worked on cleaning up the API, fixing bugs and improving performance. I did occasionally touch the server code, but didn't do very much with it.
Statistical Contracting for Wordtracker (June 2009 to November 2009)
Just a bit of part time work helping Wordtracker analyze their data about search - investigating user search behaviours and the quality of different metrics.
Engineer and Researcher for Trampoline Systems (August 2007 to September 2009)
My most important role at Trampoline was as the primary researcher and implementer of SONAR, which was software for doing natural language processing and social network analysis on corporate email and document systems. I made the system simpler to understand, produce higher quality results and scale more effectively. I learned a lot working on it, both in terms of specific theoretical tools and the practical side of building such systems (such as when not to trust computer science researchers claims...).
Prior to that I worked on our social network visualisation software. We developed Metascope, a tool for ONA consultants to help them better work with their survey data, in tandem with a partner company. They report that it has simplified their work flow immensely. We then built SONAR Expertise, which takes the ideas and technology of Metascope and integrates them with SONAR to provide a high level visualisation of a company's social structure.
Engineer for Softwire (February 2006 to July 2007)
This was my first job in software. While there, I worked with others on several projects for different clients. I picked things up pretty quickly, initially starting with front end work then moving into a mix of back end and front end work as I learned more. The laundry list of tech is fairly standard stuff for a Java shop: Spring, Hibernate, iBatis, Oracle, JBoss, etc. I always worked in teams while there and was often responsible for helping out new starters on a team. By the end of it I had been given responsibility over several key parts of projects, including the statistics reporting subsystem for an ePublishing site, the security model for the same and a UI redesign for an internal data inventory system for a public safety provider.
Non-employment Software Projects
Hammer Principle was founded on a simple idea: Rather than asking what the best programming language is, instead ask what the best programming language is for a particular problem. Teaching, systems programming, web development, etc. It asks people to rank the languages they know in order of how well they think specific statements apply and then aggregates the result to produce rankings for everything.
This was done in collaboration with my friend Mike Stenhouse - the original idea, prototype and backend implementation were mine, but the fact that it actually looks quite good is entirely his doing.
It remains probably the most popular thing I've ever written. It also covers things other than programming languages now, but they've never had quite the uptake that programming languages have.
Miscellaneous open source things things
I have a large pile of small open-source projects on my Github profile. Many of them are just experimental, but some interesting ones include:
- A property-based testing library for Python. Quickcheck inspired by way of Scalacheck.
- An implementation of the majority judgement voting system as a Python library
- An optimiser for feedback arc set problems.
- A small unix-style utility for joining lines together which I couldn't find an elegant way of doing without writing myself.
- A Term Extractor for extracting interesting phrases from text
- A Scala port of SDBM
- A Binary serialization library for Scala (this is now maintained by someone else, but I was the original author)
Pembroke College, University of Cambridge (2001 - 2005)
I did my degree in mathematics. I received Class I Honours in my BA and Merit in my Part III (equivalent to an MA)
- I'm a bit of a programming languages geek. I mostly write Python at the moment, but I've written a large amount of Ruby in the past. I also have a few interesting C projects. In the past I've written a lot of Java, Haskell, R and Scala. I occasionally pick them up again and it doesn't take me too long to refamiliarize myself with them, but it doesn't happen that often. I use bash, awk and sed constantly but not to any great depth. I've also used and tinkered around with a pile of other languages, but not to a degree where it's interesting to comment on specific ones.
- I've written far more SQL than I'd care to admit. I primarily use PostgreSQL these days, but have used MySQL and Oracle extensively in the past.
- For some time I was an external maintainer for the Scala compiler and standard library. I primarily did bug fixing, but worked on a fair bit of code cleanup and contributed to the design and implementation of the collections API.
- I've also contributed a bit to the the Clay standard library, specifically libraries for pseudorandom number generation, coloured command-line output and option parsing.
- I have often tutored mathematics. A part time job during university which I occasionally continue.