entry list | previous: Minecraft, Factorio, Game thing

date: 2017-11-27T14:58:11-06:00
subject: Software Interview Questions
summary: Some kid was assigned to ask people who worked in the software industry questions about it and I ended up being the one to answer them.

Software Interview Questions - 2017-11-27T14:58:11-06:00 - Entry 25

Interview Questions for Coms

  1. Please state your name as well as your role in developing the game Factorio.

I'm Dan Stevens, a.k.a. TOGoS, one of the rookies at the Factorio office. I was hired to take over the programming side of terrain generation, and that's what I'm doing. Also I sometimes do stuff to make the game or its build process work better in Linux/Docker, and I have fantasies about adding features to ease connecting multiple Factorio instances together a la Clusterio.

a. I majored in Software Engineering with a minor in math because I already knew software and wanted to spend college continuing to play with computers, and SE got me 95% of the way to a math minor, so I figured I may as well take DiffEQ and get the rest.

b. The opening for my first job out of college was advertised as an internship, but since I was graduated they just hired me outright. I forget how I found the listing - it may have been on a university-related job board.

  1. How did you first learn about programming?

My dad tried to get me into programming since I was a kid. He was always doing fun little games and other projects. I did some C++ back then but it always seemed like something I would never understand as well as he did. What finally made it click for me was going through a section of a big fat Linux book on different scripting languages. Shell and Perl and TCL and Forth and Postscript and Emacs Lisp and Guile and things, which it was fun to read about and experience their differences, and which led me to Ruby, which fit my brain really well at the time (I like Ruby less now for a variety of reasons*).

  1. What made you interested in working with video games and what continues to drive you to work with them? More specifically, what is it about video games that you love so much and why did you decide to make it your career?

At heart I think I'm more of an infrastructure programmer than a game programmer. I actually only work on Factorio part time; the other part I spend at a web application shop. But game programming is especially interesting because a) you get feedback from your program in a very visual and interactive way, b) you are forced to care about performance, and c) it brings together a lot of different problems that must be solved at once. Especially a game like Factorio where the player (and modders!) can build monstrous complex systems and you have to be able to support that in a way that's both deterministic and efficient. You can't take shortcuts, so you really need some good solid infrastructure.

  1. Did you receive guidance or help from others when trying to understand your field of work, or did you just go into it mostly blind and learn about it on your own? Specifically, who helped you understand what your field of work entails and what is required of you within this job.

See (3). It might be worth noting that as far as university was concerned, classes didn't do much for me, programming-wise. I continued to teach myself faster than they could keep up. But the electrical engineering (especially microprocessor design) classes were very instructive. Calculus, Differential Equations, Statistics, World History, and Women's Health were mind-expanding in different ways. Though I just barely passed Calc 2. That stuff was hard.

  1. Are you able to find a good balance between your professional and personal life?

Sometimes. Even though I work two jobs (by choice) I have the good fortune of both of them let me work pretty flexible hours. I have to make a point to plan out when I'm going to work on what and stick to the schedule for my own sake. Otherwise I tend to worry about work A when I'm at work B or about either of them on days on which I didn't promise anyone I'd be working!

  1. Which is the best language to learn for game programming when starting out, and why? When answering this section, please address the languageā€™s ease of learning and usage.

I'd say JavaScript in the browser. It's ubiquitous, and the APIs you need for game programming (graphics via canvas, sound via the audio API, networking with WebSockets) are all built-in and well tested and documented. Also JavaScript is becoming a better language over time, with all the ES5 and ES6 features. And once you've mastered that, the leap to TypeScript is pretty easy. This is the approach I took when my nephew wanted to write himself a game, and he liked how easy it was to get started.

  1. What, in your own opinion, is the most rewarding part of being a game programmer you would say?

When the feature you've been working on works and you get to play with it in the game. Or when other people play with it and think it's cool. You know, the standard dopamine triggers. :)

  1. What advice do you have for aspiring game programmers? What opportunities should they look for?

Build your own games and your own libraries. Play around with different techniques. If you like building a certain type of game, build it over and over to see what patterns work and which ones cause you trouble. Computer programming is more of an art form than a science, so don't pay too much attention to someone who tells you to follow a strict set of rules, and don't let the work that pays the bills drain your creativity. Don't worry about who's making more or less money than you, but don't let your boss screw you over, either. They need you more than you need them (class consciousness 101, but even more so for programmers who can walk while chewing bubble gum). Work on projects that aren't software once in a while. Drink lots of water, get outside sometimes, and try to avoid sugar. Remember that your subconscious is doing all the heavy lifting, and that's why practice and experience and good habits matter.

What opportunities to look for? Well, find whatever pays the bills, first. You'll get experience. If it drives you nuts, take a vacation. If you want to do something that nobody else is doing, do it. And if you see someone doing something that you want to help with, send them your resume and tell them why you want to work on their thing. If you feel like you're getting a raw deal, you probably are, but as long as the bills are getting paid, don't worry too much about money for its own sake. Most people in the world get by with far less. i.e. computer programming is sort of unique in that it allows you to follow your interests pretty freely without having to worry where your next meal comes from, so take advantage of that.

  1. If you have anything else that you would like to add that you feel will be beneficial to me going forward into my career please add it here, if not then I would to once again thank you for your time and your assistance with answering these questions.

Be kind, learn to empathize with others who are not like you, call out injustice wherever you see it, don't sweat the petty things, and when in doubt, apply the scientific method.

Also some recommended reading:

I hope this was helpful!