About Me

I’m a 24 year old computer programmer from Halifax, Nova Scotia (on the east coast of Canada). I first started programming when I was 11 and since then, I’ve run my own web development company and worked with dozens of clients, worked at the leading web development agency for my city, freelanced as an IT consultant/contractor, and worked on a lot of cool projects on my own time. I also did a short stint at BlackBerry (formerly Research In Motion), but got cut in layoffs.

I currently work for a retail management company (Master Merchant Systems) as the team lead for our paperless contract software.

On my own time, I’m normally working on one of my side projects, playing around with some new technology, working out at the gym, browsing the Internet, taking online courses, playing videogames, or most recently, working on my own video game in Unreal Engine 4.

Experience

I’ve been programming since I was 11. I started my own freelance web development business at age 14, which I operated for 4 years throughout high school. I have experience in a lot of different technologies, with a stronger emphasis on backend technologies than client side development. If you’re interested, check out my online CV, Stack Overflow Careers Page, or LinkedIn profile.

The below is a sample of the tool & languages I am familiar with. However, I have sufficient experience that I’m able to quickly pick up new technologies and start working with them rapidly. I love learning new technologies, it keeps me engaged!

Front-End Web Development

I started off my career doing web development, so I focused heavily on both front-end and back-end web development. I have experience in the complete front-end development workflow, from receiving designs in PSD format, to slicing the designs into whatever images are needed, creating the HTML page structure, writing the CSS (or LESS/SASS), and creating any custom JavaScript code that may be needed.

These days I tend to do less front-end development, more as a means to an end than as a job itself. I try to keep up to date with the new frameworks and design patterns, and use them if I feel they provide a more efficient workflow, but it can be difficult as the community moves so quickly. Just as I learn gulp and actually get a chance to use it, I find out it’s been superseded by Webpack!

Specific libraries and technologies I work with include:

  • CSS, SASS, and LESS
  • HTML, Bootstrap, HTML5 boilerplate
  • JavaScript, CoffeeScript, TypeScript, jQuery, jQuery UI, Backbone.js, Lodash, Angular.js, React
  • JavaScript tooling systems like Grunt, Gulp, Webpack, requirejs, uglifier, jslint, babel, etc

Back-End Web Development

Back-end web development is definitely my bread and butter, it’s what I work with most often. I’ve been doing back-end web development since I started programming pretty much, and I’ve never really stopped. Whatever my main job or task may be, I normally find some room for it.

I’ve worked with PHP, Python, Ruby and Node.js most often (and although I used to be a PHP fanboy, Ruby is definitely my favorite language these days). I’ve created content management systems from scratch, I’ve worked extensively with WordPress and Drupal, I’ve build websites using Symfony and Zend frameworks. I’ve worked on large Ruby on Rails applications. I’ve built a couple of tools in Django (Python). I’ve done a few websites, servers, and services using Node.js (check out my NodeFTPd project!).

I’ve worked on content management systems, APIs, wikis, portals, dashboards, blogs, forums, and a host of other back-end systems.

Even if I don’t know a specific technology, I’m usually able to read through the code base and some documentation, and get started pretty quickly.

Specific libraries and technologies I work with include:

  • PHP, Composer, Symfony 2, Zend Framework, WordPress, and a lot of custom legacy code bases
  • Ruby and Ruby on Rails
  • Node.js
  • MySQL, PostgreSQL, Oracle, and MSSQL

I’ve also worked on some very large applications that handled multiple thousands of requests per second, so I have a lot of experience in profiling code and optimizing it (both by optimizing the actual code itself, and implementing caching techniques).

Computer Science

I didn’t go to university, so for a while I had a lot of practical experience, but very little theory. This is normally fine for a couple of years, but eventually you need to know the theory to continue progressing.

I’ve studied Computer Science using a variety of resources, such as Coursera and MIT Open Courseware. I mainly focused on theory I felt would be most valuable to me as a practitioner. Instead of memorizing how to implement sorting algorithms that are built into every language, I focused on the important lesson behind those things: Big-O notation, determining algorithmic complexity and performance, etc.

I’m familiar with how to use algorithms to solve problems, how to determine complexity of code, the various trade offs between optimizing memory vs cpu cycles.

I’m familiar with at least a high level overview of every part of the computer from the transistor to user land software.

I’ve studied compilers and automata theory, I know how and when to use state machines, the difference between NFA and DFAs.

My computer science theory isn’t on par with someone who spent years in university studying it, but I’m always learning more about it.

Operations

I’ve worked quite a bit with the Ops side of web development, and quite enjoy it. I tend to prefer DevOps roles as I get to do a bit of development and a bit of operations.

I worked for Epix.com for 2 years and did a lot of work on their cloud based infrastructure. I’ve also managed my own servers for many years.

I have a lot of experience in Linux based operating systems. I know how to configure and maintain them, how to install or compile packages required for deployment, reduce attack space my disabling unneeded services and blocking ports, securing SSH and other attack vectors using tools like Fail2ban and various other best practices.

I’ve worked extensively with web stacks including Varnish, Nginx, Apache, PHP-FPM/mod_php, Ruby & Rails (using Puma as well as Phusion Passenger).

I’m also quite familiar with automation and configuration management systems like Puppet and Ansible. I’ve worked with creating master & masterless Puppet setups, creating custom Puppet modules, and extending Puppet using Ruby libraries.

I frequently create Vagrant VMs to create a production like development environment for developers. I’ve found that Vagrant is a good tool for this job as almost anyone can get Vagrant setup and run “vagrant up” to start a development VM.

I’m also very familiar with Amazon’s cloud based services such as EC2, VPC, RDS, ELBs, and ElastiCache.

Other

I’ve worked with C and C++, though not very often, and mostly on personal side projects (I’m working on a game using Unreal Engine 4 and C++). I’ve contributed minor fixes and patches to a few C based projects like Varnish and some Varnish extensions. I’ve also poked around a multi-million line POS product, written in C.

I also have a pretty good working knowledge of Java, having worked with it for a few desktop applications as well as server software. I’m familiar with build systems like Ant, and I’ve been involved in packing deployable applications as WARs and EXEs (using Launch4j).

I have extensive experience with continuous integration systems like Jenkins, Travis CI, Circle CI, and GitLab CI.

I’ve worked with (and setup) Jira, Confluence, BugZilla, Hipchat, GitLab, GitHub enterprise, and a variety of other workflow systems.