Consulting Software Engineer
What is a typical day like for you?
I usually wake up at 5:30am and relax until about 6:30am. I like to visualize my day and my future at that time, and think about what I'm going to accomplish today and in the future.
At 6:30am I'll write for a while -- be it technical content or something like this. Writing is something I've always loved to do and writing about your profession (or even your hobbies) is a great way for me to explore new ideas and learn in a different way.
By 7:30am I'm usually at my desk doing software development work for a particular client. I do that for a good chunk of the day, usually until anywhere between noon and 2pm.
I try to spend the rest of the day handling calls, meeting new people, working on PyCon Canada, or helping people find new jobs or opportunities. This is the thing about any independent consulting career -- you do need to put significant effort into staying connected with other people, since that's how you find the most interesting projects and opportunities. This is great for me, since meeting new people is something I really enjoy doing.
This is the thing about any independent consulting career -- you do need to put significant effort into staying connected with other people, since that's how you find the most interesting projects and opportunities. This is great for me, since meeting new people is something I really enjoy doing.
What is the most enjoyable part of your job?
Right now I would say it's the flexibility to spend time investing in my own knowledge, working on future projects, and meeting similarly-minded people. There are a lot of benefits to working in a more conventional job and I really enjoy that too, but it's cool to be able to schedule an afternoon full of meetings, learning about a software engineering technique, or realizing that I need a break to go on a long walk.
What is the least enjoyable part of your job?
The unpredictability of both workload and income can be difficult at times. I think any contractor does a lot of work that they go unpaid or poorly paid for because of circumstances. Money doesn't just appear in your bank account on regular intervals, you have to go out there and work for it. That can be exciting too though!
Explain the path you took to get to this job (education, internships, etc.).
I graduated from the Computer Science and Bioinformatics program at the University of Waterloo in 2005. I had a variety of co-op jobs while I was there -- a few in teaching, some in software development, still others in genetics research. When I came out of the program, I realized that I really loved teaching, but that I wanted to become an expert in a particular field before I could really feel like I was providing value to my students. I loved the team-building aspect of building software, so I continued to study software engineering. I attended the University of British Columbia where I received a Masters of Science in Computer Science.
After that, I worked at Google for a while in California before moving back to Toronto. I worked as a software engineer for a couple of years, and then as a co-founder on a variety of startups before branching out on my own.
Who or what was the greatest influence that set you on this path?
When I was a kid, we lived out in the country without a lot of technological influences. One of my uncles is an electrical engineer, and at that time computers were more of a hobby for people than a constant presence in the home. He had this old Texas Instruments computer that you plugged into a TV that he'd bring over to our house sometimes; it loaded programs from audio tapes that would talk to you while they were booting up. That triggered my interest in computers.
Once I had a computer of my own, I discovered a shareware game called ZZT (made by the same guy who eventually went on to create the Unreal series of games.) The game has its own editor where you could tell each actor in the game what to do and how to do it. I printed out the whole manual on this dot-matrix printer we had; it was something like 150 pages long. I studied that manual for days. It wasn't until some years later that I realized that what I was doing was actually a limited form of object-oriented programming. It's interesting to me that it was the storytelling potential of the technology that really pulled me in at first. I was hooked after that.
It's interesting to me that it was the storytelling potential of the technology that really pulled me in at first. I was hooked after that.
What advice would you give others seeking a similar job?
There are endless resources out there on how to use a specific technology, or how to create a certain type of app. Those are great, and will certainly set you on the right path, but make sure you spend time practicing and studying the fundamentals; the theory of computer science, object-oriented design, algorithms and data structures. If you really hate math but you really love programming, my advice is to get over your ego and learn the math. Learning to do something you hate is always a character-builder, and the core theory that underlies everything you will do in software is heavily mathematical.
Also, learn how to speak and write well. The most costly programming mistakes occur when people don't understand one another; the kinds of mistakes that mean you have to go into the office at 3am.
How does your job make a difference?
The interesting thing about software engineering is that it's useless unless you have something to apply it to. If you have a degree in medicine, or in civil engineering, or in library science, all of those have an immediate domain in which they can be applied. Software is something that is leveraged in every domain to make hard things easier and impossible things possible. So, as a software engineer, you really do have the ability to pick almost any cause or problem domain to contribute to. Some areas are easier to get into than others, but there are few things out there these days that are completely unaffected by software.
How do you use science, math and technology in your job?
Most of what you learn in math and science is how to understand (and later, create) intellectual models of how things work. All those equations you learn in physics, chemistry, etc. are a mathematical model of how we've observed some natural process to happen.
Computer programs are actually just another way of modelling some process -- natural or otherwise. The big difference between a mathematical model and a programmatic model is that I can click 'run' on the computer program, and it will do the work for me!
As I said earlier, most computer programs are built to solve problems in some other domain -- business, science, etc. This means that computer scientists need to be especially open to quickly learning the models of a new domain so that they can do their job. I think that's the most important part of having a strong background in science and math; the ability to understand and create new models of things in your programs.
Aside from that, the most basic elements of computer science are rooted in mathematics. I meet a lot of programmers early in their career who say things like "I love programming, but I hate math." I was like that too. If you really want to be good at programming, I think you need to get over that. Most of the challenging and rewarding work in programming has some mathematical element to it.
Is there one course you wish you had taken in high school but didn’t? Why?
I took highschool physics, but in both cases we only made it through about half of the material (classical mechanics) and never made it to electricity, magnetism, electronics, and all the other stuff. I really wish that we'd made it that far, as I still have a pretty iffy foundation in how all of those fundamental phenomena work, and they are fairly important in my discipline.
This is a bit unrelated, I also wish I'd taken a strong macroeconomics course early in my university career. I waited until 4th year to take one, and it really opened my eyes to how the world works. If there had been a good introduction to macroeconomics in highschool, I definitely would have encouraged my younger self to take it if given the chance.
What makes this job right for you?
I always had this difficulty when I was a kid in that I really liked writing and storytelling, but I also really liked tinkering with technology and the analytical side of how computers worked. The best thing about writing software is that I actually get to tell stories at two levels: The first level is the features I create for the user of the software, and the second level is the code itself that I write for other programmers to read. I get almost as much satisfaction from seeing a happy user as I do out of seeing another programmer read my code and say, "Hey, this is a really clean design" or "I never thought about it this way before."
What's the most bizarre or silliest thing you’ve ever done in this job?
I've been to a couple of "programming olympiads", where they mix physical competitions with programming exercises, sort of chess boxing (http://en.wikipedia.org/wiki/Chess_boxing). Those are pretty weird.
What activities do you like to do outside of work?
I like to stay involved in the developer community by going to events and meeting other developers. This year, I'm the chair of PyCon Canada (http://pycon.ca), which is a Canadian conference devoted to the Python programming language.
I also like to pick up different athletic hobbies here and there; I've been a competitive, runner, bodybuilder, and powerlifter before, and I'm in the middle of thinking about what my next sport will be.
Finally, I just like to go out and meet up with new people who are doing interesting things. There are a lot of different careers and stories out there, and it's very energizing to hear them.
You just won $10 million! What’s the first thing you’d do?
I don't know that my life would change that much if I had $10 million. I would probably use most of it to invest in startups and other early-stage companies that I think are going to make the world a better place. I might also take a year to live in a few different places and to learn some of the things I haven't had time to learn yet -- but you don't need a lot of money to do that in the first place. All you need is time. Maybe a better question would be "you just won 10 million years! What's the best thing you would do?" :)