My name is Adam Richardson. I am a software developer with a background in operations, and a student of Computer Science at the University of Waterloo. I spent the first eight months of 2016 working on the Production Engineering team at Shopify.
I have professional-level experience in four programming languages: Ruby, Go, Lua, and Bash. Through various academic courses and personal projects, I have developed a strong background in more than 10 additional languages.
An early interest in competitive programming yielded a fruitful career, including two appearances at Canada’s national high school Olympiad. Through this pursuit, I gained an extensive knowledge of algorithms and data structures, as well as an intuition for the solution and analysis of algorithmic problems. Moreover, the rigors of training and competition honed my programming skill in Python, C, and C++ (my competition languages of choice).
I have experience with the administration and deployment of various cloud and PaaS technologies, including AWS and Heroku. Furthermore, in my production engineering role at Shopify, I gained significant experience provisioning, configuring, and administrating bare-metal servers in data centers; in particular, I am a competent user of the Chef infrastructure automation toolchain.
I have a strong understanding of the Docker ecosystem, having worked with Shopify’s internal containerization solution. As part of that project, I had the opportunity to personally migrate a mission-critical application from Heroku to Docker.
Through various personal projects and exposure to Shopify’s data store infrastructure, I have developed a good grasp of various data stores and caching layers, including MySQL, Redis, Memcached, MongoDB, and Zookeeper. I am also familiar with data delivery pipelines and protocols, such as Kafka.
Production Engineering @ Shopify, Jan. 11th - Aug. 26th, 2016
- Developed and maintained various internal tooling, including chatops bots and deploy automation
- Built, tested, and deployed solutions for software packaging, designed for customized infrastructure-critical software packages such as Ruby and NGINX
- Refactored and developed features for a large-scale distributed HTTP load generator based in the cloud
- Implemented caching middleware for NGINX software load balancers, conserving thousands of RPM of app server capacity at peak load
- Oversaw the deployment of a major upgrade to the Shopify Docker base image
- Developed an open-source Heroku buildpack designed to ease both 1st- and 3rd-party integration with Shopify’s encrypted configuration management system
- Achieved two perfect “Outstanding” co-op evaluations for the two four-month work terms
I am a firm believer in the value of personal, self-motivated programming projects as a tool for developing (and demonstrating) one’s skills as a programmer. With this in mind, I have authored a large number of projects, in a wide variety of domains and using a diverse set of tools and languages. I document below a small subset of my most interesting projects below; these and others can be found on my GitHub profile.
An interpreter for a Scheme-like functional programming language, with garbage collected objects, arbitrary precision arithmetic, recursion, and an extensive test suite written in Scheme. Ploy is written in C++, with the intention of being an introduction to object-oriented design in a low-level language. It uses virtual inheritance to abstract common functionality of Scheme syntax trees, thereby obviating the need for complex union structures.
An interpreter and a compiler, respectively, for a particular esoteric language.
Brainrack was born of my first year Computer Science courses, which taught the Racket dialect of Scheme from a pure functional paradigm. Brainrack was written with the intention of exploring the practical implications of such a paradigm (even if the project itself was not necessarily practical). In particular, at the outset of the project, I found it difficult, conceptually speaking, to maintain the state of the interpreted program when pure functional programs are fundamentally stateless. Indeed, I was able to find novel solutions for these conundrums, and I learned a great deal about functional programming in the process.
BFNI is one of my older projects, dating to high school, but I remember it fondly. Thought it is not a particularly useful or practical application, and though it does not necessarily conform to the standards and conventions of its language (x86 assembly), it served as the gateway to several new concepts for me. In particular, it introduced me to compilers and to the very concept of code generation - that a high-level text-based syntax could have a low-level machine code form. Moreover, it was an invaluable introduction to assembly language - a lesson that I was grateful for when coursework began covering the same ground.
Other applications and projects not curated here include:
- An MD5 cracker and rainbow table generator, written in C
- A blog application, written in Node.js and backed by static file storage
- A forum application, written in Node.js and backed by MongoDB
- A URL shortener application written in Node.js and backed by Redis
- A MIDI-like synthesizer using sinusoidal waves and a text file format, written in C with SDL
- Miscellaneous one-off websites
- Various compilers and interpreters developed in coursework
I am currently enrolled in the Bachelor of Computer Science, Co-op program at the University of Waterloo, with graduation projected for 2019.
The University of Waterloo is known for its exceptional engineering and mathematics undergraduate programs, in particular the BCS program in which I am enrolled. I consider myself fortunate to have had the opportunity to study among such a capable cohort of students.
Academically, I take particular interest in programming language development, graph theory, functional programming, and data structures. I have endeavoured to seek out new challenges in my university life, particularly in pursuing enriched-level courses in math and computer science. This has proven to be challenging, yet rewarding. I continue to strive for excellence in my academic life, and to apply the lessons therein to my work in software development.
Outside of my professional and academic pursuits, I am an avid competitive runner. I have been lucky enough to achieve modest success on a regional scale, including a victory over 5 kilometers at the Tamarack National Capital Race Weekend against a field of 7,644 competitors. I was also the 2015-2016 UWaterloo Most Valuable Player in cross-country running, having been the top varsity competitor for that season.
I can be reached via email at firstname.lastname@example.org. I am scheduled for a co-op work term in January of 2017, and I welcome any communication from prospective employers.