Alexander Rafferty

Software Engineer

Melbourne, Australia

Menu

My approach

I value high-quality software both inside and out, meaning software that not only fulfils its purpose well while delighting users, but is just as orderly and well-maintained behind the curtain.

I believe the most important skill in our discipline is the ability to discern what matters from what doesn't, so development effort can be invested strategically. When this balance is effectively struck, features can be delivered quickly without accruing detrimental technical debt.

I've long been fascinated by the study of software design, eager to fully understand the qualities of code that make it readable, maintainable, robust and extensible. These properties are essential to the long-term success of any substantial software system, yet often very difficult to achieve. My favourite text on the topic, A Philosophy of Software Design by John Ousterhout, posits that good software design is essentially a matter of minimising complexity, and offers a comprehensive yet succinct exploration of techniques for doing so.

I work best in environments that place ownership and accountability front and centre, and prefer working in small, outcomes-oriented teams that prioritise open collaboration over ceremonies and procedures.

Technical proficiency

Deep experience

Rust

– The systems programming language of the future

I first stumbled upon Rust while at uni, and have been building projects with it ever since. Professionally, I have used Rust to prototype and optimise voxel compression algorithms, and to build a reliable hardware abstraction component utilising tokio, serde and DLL interop.

Notable personal projects include a road traffic simulator, a simple polyphonic synthesizer, and an online game server. Recently, I have been tinkering with embedded databases using sled, and simple programming language interpreters.

I find Rust to be an immensely satisfying and productive language, and have been delighted by its consistent rise in popularity and adoption over the years.

TypeScript/JavaScript

– The language of the web, fortified with a robust type system for productivity at scale

I wrote my first interactive web page in 2011, delighted by its power to breathe life into an otherwise static page. I have been honing my understanding and mastery of JavaScript, and later TypeScript, ever since.

I have built many full stack applications with Node.JS, React and Solid.JS as a freelancer, and also had considerable experience with those technologies in my full time roles.

Considerable experience

C++

– The enduring industry standard for high-performance software

It may be showing its age, but C++ remains the industry-standard choice for low-level and performance-critical software projects. I made my first acquaintance when I borrowed a C++ textbook in 2008, where it served as my introduction to the object oriented programming and mystifying concepts like polymorphism and dynamic dispatch.

I have used C++ at various points throughout my career. I used it at MRX to write new feature detectors with OpenCV. At Manufacturing Intelligence, I predominantly used it to develop and heavily optimise a voxel compression algorithm and related algorithms. Most recently, I worked on embedded C++ codebases related to video capture and playback hardware at Blackmagic Design.

C#

– A versatile language that strikes a great balance between performance and productivity

I gained considerable experience writing C# with .NET Core throughout my first full-time role. During this time, I wrote a full stack application for uploading gigabyte-sized files in a fault-tolerant way, storing the files as individual chunks in a PostgreSQL database. I also authored a general purpose library for storing and querying "versioned sets and lists", pushing NHibernate to its limit.

Modest experience

Python

– The go to language for scripting and data crunching

I wrote a fair amount of Python while at MRX, particularly for the purpose of prototyping algorithms and as a testing framework for the main C++ codebase. It has also found occasional use throughout my career, primarily for configuration or writing throwaway scripts.

Other technologies

Background

My deep fascination with software and the act of programming began with learning how to write my very first Excel macro in Visual Basic. Since then, I spent countless hours of my teen years tinkering with everything from C++ to JavaScript, went on to complete a BSc in Computer Science while continuing to work as a freelance web developer, until finally commencing full-time work in mid-2018.

Since graduating, I have been privileged to work in a diverse range of roles spanning various industries, problem spaces and technology stacks. This experience has given me a broad perspective that I carry with me into each new endeavour.