giggs' blog

A new adventure

I wrote this a year ago, time to publish it.

This is an update on my journey towards becoming a professional programmer. It’s mostly autobiographical. The Postmortem section has the most general/technical elements.
It is, of course, highly specific to my situation. Still, maybe some things can be of interest to anyone.

Context

I was working as a general practitioner. I’d done several programming projects to put on my resume and documented everything on my blog.

Here’s an article on the concepts of Tempo and Runway which can be applied in the context of changing careers. Crudely summarized: You’re a plane, you have your runway (resources) and need enough tempo to take off. A relevant quote:

Tempo isn’t only for unemployed spirit-questers living on runway. If you view runway as renewable via income, we’re all on the runway, ultimately in a race against death with burnout on one end and stagnation on the other.

Work was taking too much energy. I was at the burnout end of the runway, unable to get enough tempo to take off. I couldn’t keep doing it.

I ended up closing my practice before being even remotely close to landing a programming job. I didn’t handle it particularly well, the generated stress made the job hunting process gruelling. I don’t think I had a better choice, but I wish I had been better equipped to deal with that.

Before closing up shop, I had sent out a first wave of applications to about 10 companies. Half never answered, the rest were kind enough to auto-reply negatively.

After getting some rest and figuring out I eventually wanted to work in game development, I went on the hunt again. I sent about 20 more applications. None were game companies, because I didn’t feel confident enough applying there yet.

About 2/3 of these never replied, the rest were negative of course. Even referrals from 2 of my friends failed to get me an interview. I was hoping for one chance to chat with technical people and figure out where I stood, but I wasn’t getting it. I needed a break from job hunting, and maybe think about my options.

Interview earlier than you think you’re qualified and listen to feedback. Learning on a job is a lot easier than learning on the side.

But I remembered this quote from Jeremy Ong. Though I wasn’t ready, I tentatively sent one application to a AAA gameplay programmer position before taking that break.

One chance

Best decision of the year, that last application got me a technical test from home. My friend polomi suspected the test would mostly be algorithms and C++ questions. I was glad to get a home test because I was used to the environment and wouldn’t face a possibly adversarial interviewer.
My initial confidence broke on my first algorithm practice session when my brain froze and I was unable to complete a simple task in the allotted time. Luckily, said brain thawed before the actual test.

Of course, I barely slept the night before. The test went alright. I felt like it gave a fair representation of my skills/knowledge at the time. I went back on it and saw I’d made a few silly mistakes for which I sent an errata. Now all I could do was wait and learn what I didn’t know how to answer in the test, hoping to be able to demonstrate interest and motivation.

On a completely unrelated note, I’d be curious to see stats on how often I checked my e-mails for the following two weeks.

Anyway, two weeks later I got an email saying the team wanted to meet!

polomi offered guidance on things I should read about in case it came up during the interview, I gathered data on typical gamedev interview questions (shout-out to MrVentures) and worked towards answering as many as I could.

This was my first interview. Ever.
I slept even worse than I’d had the night before the home test. This was a dream opportunity, and at the time I felt like it might be the only one I’d get for a while.

The technical part of the interview lasted a bit over 2 hours. I was asked many theoretical questions, many of which I answered with “I don’t know”. Sometimes they told me the answer, sometimes they didn’t. I wanted to ask but couldn’t figure out if I should.
Everyone I met was nice. They seemed genuinely interested in what I knew and how I’d learned it. I’m still amazed I didn’t collapse under my own nervousness.

At the end, the technical director offered positive feedback, saying I had a credible application. There were still many candidates to see however, and I was told I shouldn’t expect an answer before a few weeks.

I had mixed feelings. After talking about the interview with my wife and polomi, both thought I’d done well and the team had sent many positive signals.
From a rational standpoint, I agreed. But my emotions had taken control of my exhausted, sleep-deprived brain. They elected to fixate on stuff I could have answered better, and convinced me I’d botched everything.

Second wind

Screw it. Even if I’d failed, my application was credible. I just needed to bite the bullet and send more, so I sent out about 10 more (one of which wasn’t a games programming job). I’d identified things from the interview I could improve and begun working on them. With a grand total of one interview under my belt, surely I had enough experience to nail the next one.

I was offered two more chances. One for an embedded systems/full stack position, one for an engine programmer position. I passed both technical tests, though my engine programmer application presumably got lost and I only found out I’d passed 6 weeks later when I’d already accepted an offer.

The other interview I got went well. I was adequately confident and much calmer than I’d been the first time. The team was great, and being in a more normal state of mind I felt like I was indeed exchanging with co-workers.

I ended up getting a job offer for both the embedded systems and gameplay programmer positions. I am now a junior gameplay programmer.

Postmortem

I’ve spent a lot of time building my theoretical knowledge and programming skills even before starting the job hunt, and I’m still going. Some details below, skip to the next quote if these are of no interest to you.
It may seem unrelated, but I have over 2000h combined on all Zachtronics games. All are great for problem-solving practice. The text-based ones are good for algorithms and getting used to low-level tools (or lack thereof).
I’ve completed all Advent of Code puzzles for all years. It’s amazing for practicing algorithms. I’ve read most of the theoretical part of The Algorithm Design Manual. I’ve put a fair amount of time on practice exercises on platforms like HackerRank or CodinGame.

I’ve read the Kernighan and Ritchie to learn C, some of The C++ Programming Language as an introduction to many C++ concepts so I could have a broad overview before learning them in depths. I’ve read and “Ankified” over 75% of C++ Primer. I’ve learned how to read x86-64 assembly by taking the Performance-Aware Programming Series course and reading the relevant parts of the Intel user manual. From the course and various other sources, I’ve built a decent (though still incomplete) understanding of how the CPU works. I’ve read a decent chunk of Game Engine Architecture. I’ve learned key concepts in basic linear algebra and matrix operations and am working towards building better intuition and confidence in that area. I’ve watched over 40 episodes of the Handmade Hero series.

I use Anki daily, my programming deck has over 700 active cards, over 450 of which are tagged for C++. I’d reviewed the full deck the day before my gameplay programming test and interview.

Was it a lot of work? Absolutely.
A lot of effort? It seldom felt like it. This is what I like and want to do.

Don’t aim for better ways to get through your tasks as quickly as possible, rather aim for better tasks that you never want to stop doing.
Kevin Kelly - 103 Bits of Advice I Wish I Had Known

I got 1 chance out of over 30 applications on programming positions that I was interested in but weren’t my dream job™. I’m sure that chance is solely due to the fact that my resume was read by the technical director and not an HR person. They said they’d read part of my blog and that what it showed seemed at least as relevant as having a degree.

I got 2 chances out of 7 gamedev applications. Small sample size and it’s impossible to draw definitive conclusions of course. Maybe the motivation letter felt more authentic, maybe it was simply luck. The timing meant I didn’t meet both teams, but the technical director I did meet had also read some of my blog.

Starting this blog was probably the best decision I made for the job hunt.
Having a blog and/or public projects, as well as trying to contact technical people directly, seemed to have the most impact.

The stakes were high, but I’d put even more pressure on myself than the situation warranted. This made the process absolutely exhausting for me. Objectively, even excluding the result, it did go well though. I was well-prepared from a technical standpoint (thanks polomi) and was able to perform in spite of that pressure.
I need to get better at stepping back and objectively assessing those kind of situations, and not let my emotions run the ship. I’ve already made progress on that front, and it showed in my second interview. It needs more work before I can be confident enough it won’t happen again in new and unfamiliar situations.

Looking back, I realized I had these ideas lingering in the back of my mind, after having heard them so many times from my former patients:

I think this affected my first interview quite a bit, even if I wasn’t aware of it at the time.

Instead, what happened was:

Again, small sample size. But a welcome update to my world view as I begin walking this new path.

If you’re in a similar situation, here’s my advice. Take it if you know about survival bias.

Good luck!

#Jobs