I’m a 26 year old software developer 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 Maplewave, a leading provider of software and retail optimization services for the telecommunications industry. I am the Manager of Product Development, and lead a team of a dozen developers working on several different products and projects.
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.
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 and operations, than front-end development. If you’re interested, check out my online CV, Stack Overflow Careers Page, or LinkedIn profile.
Listed below are some of the tools & 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
Specific libraries and technologies I work with include:
- CSS, SASS, and LESS
- HTML, Bootstrap, HTML5 boilerplate
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!). Lately, I’ve been building microservice APIs in C#/.NET Core.
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, RVM, Bundler
- Node.js, Express
- 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).
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.
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.
At Maplewave, I help oversee, architect, and implement our modernized infrastructure, using a cloud-agnostic platform to support Azure, AWS, GCE, and on-premise datacenters, as well as implementing containerized workloads using Docker and Kubernetes. Before that, I worked at Epix.com for 2 years and did a lot of work on their cloud based infrastructure using AWS. 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 by 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 have extensive experience using Vagrant to create a production like development environment for developers. These days, I tend to use Docker to accomplish the same thing, as it’s faster to setup, iterate, deploy, and update, and lighter weight when running many services.
I’m also very familiar with Amazon’s cloud based services such as EC2, VPC, RDS, ELBs, and ElastiCache.
Lately, I’ve been learning more about networking and firewalls, as my work has me setting up Fortigates in AWS, multiple VPCs, transit VPCs to control ingress/egress, IPSEC VPN tunnels, etc.
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 Maven, 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.