2014/03/20

RIP Mochi


I don't know if you heard, but Mochi Media is shutting down. I guess no one at Mochi wanted this to happen, but they were bought by a big company and now that big company wants to shut them down.

Specifically, that big company is shutting them down, and along with them, all the hosted games, all the preloader ads, all the high scores, and all the live updates that Mochi had been providing as a service. All gone.

I've been using Mochi for all my published Flash games. Fortunately, I'm not depending on MochiAds as an income source (I made very little money off of that) but I have been using MochiScores for the leaderboards in Flydrill and Space Lord.

Soon they'll be all gone. Flydrill will no longer hint at a more glorious past when it got more than a few plays a week, and more tragically, the Space Lord Hall of Fame, nexus of player-created shmup levels playable in Space Hero, will cease to exist. Now that is a shame.

You can still share levels in Space Lord, actually, if you click the button to share on Twitter after you beat the game. I don't think I've ever seen anyone do that though. :p

So what does this mean? End times for the Flash game renaissance. Here's to the end of an era.

What's next? I don't know, but it seems that every single game developer I know has been switching to Unity. It's living up to its name.

I might even have to make the switch soon.

:(

So now that I can't take advantage of free Mochi hosting, I've finally gotten around to putting Flydrill on deviantART. Now my dA portfolio actually reflects the games I've made. More or less.


Anyway, check it out. Maybe you can leave the first comment. ;)

2013/07/22

Space Lord rising

I made a game.

It's called Space Lord. I've been working on it since March, on and off, and now it's finally out. Originally it was a game jam game I made last December for Ludum Dare 25, with Pat Kemp (knivel) and Teo Acosta, the same guys who made The Love Letter with me, plus another artist friend Jim Burner.

The theme was YOU ARE THE VILLAIN and once again, knivel came up with a great little concept that eventually turned into the final Space Lord that we all know and love.

Or something like that.


Play it! Don't give up right away, there's a bit of a twist. ;)

At the beginning of this year I decided to go for the #OneGameAMonth challenge. I was doing fine for the first few months, but it all broke down with Space Lord. After all the success of The Love Letter, I wanted to take all my other old game jam games and polish them up too. So I thought I'd start with Space Lord, since it seemed to be the most promising, and the closest to being really finished. Sure, it was. But it took me way more than a month to finish it, and I fought until the very end to keep to my one-game-a-month commitment, but ultimately, I failed. And it was very painful to finally reach that point.

For the first month or two, I was really getting into it, working on Space Lord whenever I could, staying up too late and getting sleep-deprived in return. I got pretty burned out after a month or two of that, and just wanted the project to be over. But I refused to give it up, or to release a game that I know I could improve upon, so I kept going. But I worked on it much more sporadically after that point. I went for long periods of time without working on any creative projects, and started feeling listless and stagnant, which made it even harder to get back into it. But whenever I did, I felt better. Making stuff makes me happy. That's just the way it works for me.


So, eventually, four months after I started, I finished. More than anything, this was a design challenge for me. I've gotten to the point where I can code these little Flixel games without too much trouble, but game design is still really hard. By that I mean the process of taking an interesting concept with a lot of rough edges and turning it into something actually fun and accessible to a decent number of people. It's even harder when you're the one coding everything, because you feel the pain of every potential design change that has you undoing a bunch of your hard work or creating a bunch more for yourself.

For Space Lord, one example was going from real-time to turn-based gameplay. I knew the game went way too fast for anyone to tell what was going on, but it still took a fair amount of willpower to actually choose to invest the effort into making it turn-based. This is another reason why it really helps to have good collaborators to work with - knivel didn't end up joining forces for the Space Lord redesign, but he was there to bounce ideas off of and help strengthen my resolve to do what I knew was right.

So, the game is on Kongregate. That was really disappointing, actually - it got only a couple hundred plays, a few comments, and a rating less than any of my other games on the site, even the really old ones. Then it sank without a trace. Ouch.

Then I put it on Newgrounds, without much optimism. It was received a bit better there, as is typical in comparing the two portals. But no momentum. I was prepared to give up on the portals and see if I could get some people to blog and tweet about it, as I think the game is quite interesting to write about, even if the players haven't been particularly excited. :p

But then it was featured on the front page of Newgrounds! And suddenly there are dozens of comments, and thousands of views. Yay? :) It's interesting what people are suggesting in the comments - there are actually people who want the game to be longer, and just want more - more space, more ships, powerups to place. Definitely a fair number of complaints about the AI. Yeah, I know, it's really simple. :p And some people who perhaps don't get it at all.


In case you're wondering, Space Lord is a level design puzzle game. Possibly the only one of its kind I've seen so far. You are the game designer. The AI player gives you a fun rating and trashes your game when it's not fun enough. It doesn't really hold your hand or structure your experience because I wanted it to feel more like the experience of actually designing a game. :p

And if you "beat" the game (if the "player" beats the game) then you can submit your design to the Hall of Fame, where other people can play it, as the player ship. More on that later. ;) But in any case, it's been fun seeing the designs that people come up with.

I might even say it's been worth it.

Of course it's been worth it! :) This is what I'm doing, polishing up my old game jam games, working on my game design skill, trying to eventually get up to the point where I can make games for education and social change and actually succeed.

I've already started polishing up my next one. Hopefully it will go a little quicker this time. ;)

2013/06/17

Interview with a Software Engineer - Part 2

A couple years ago, my cousin interviewed me for a school project, which I posted as Interview with a Game Programmer. Recently, a number of students have found my blog and asked to interview me for their own school projects! Here for Part 2 is the second interview, by Anthony Hammen.

Needless to say, the views expressed here are my own and do not necessarily reflect the views of Linden Research, Inc.


What hours do you typically work?

I usually get to work anywhere between 9am and 10:30am, and leave between 5pm and 7pm. This is pretty typical of my coworkers as well. I'm trying to get myself into a stricter 9am to 5pm schedule though!

Are your hours constant?

No, as you can tell from my previous answer, there's no real incentive to be at work at exactly the same time every day, though it might make for a more efficient routine if I did! As a programmer, it's hard to know when I'll be leaving work any given day, as I don't like to leave until I've gotten to a good stopping point so I don't forget what I was doing when I come back the next day! Though I have heard some people say that it's better to stop in the middle of a task, so you won't procrastinate on starting up the next one when you get going again. I guess it depends on how good you are at remembering!

Who do you report to?

The way my team is structured at Linden Lab, I report to both a manager and a product owner for the project I'm working on. The manager keeps track of the productivity of myself and the other developers on my team, estimates how long it will take to finish the project based on our previous progress, and helps negotiate when other teams want us to help them with stuff. The product owner comes up with the goals that we are actually working toward, basically taking the perspective of a customer and describing the product that we developers are supposed to actually build.

What education or training do you have?

I have a Bachelor's degree in Computer Science from the University of Washington (BS with College Honors). I also had a couple internships with software companies while I was in college, which taught me a lot. Even more so, the jobs I've had working full-time as a programmer after graduating have really developed my skills over the last few years. And of course, I've taught myself a ton of stuff from free resources online, like how to program in ActionScript for Flash games, or how to make ragdoll physics engines.

Are your tasks scheduled? Who handles that?

Our work is divided into two-week periods called "sprints". At the end of each sprint, we decide what we will take on for the next sprint, with the aim of planning out exactly the amount of work that we can finish completely in two weeks. Our manager and product owner oversee this planning process, but they don't directly break our work into tasks for us or tell us what we need to do when - that's our job, as developers. Since we are the ones who actually know how to do the work, we have to estimate how long things will take and commit to an appropriate amount.

What languages do you currently code in?

I've been mostly coding in C++ for the last few years, both at Linden Lab where I work now and at my last job at Fugazo. I've recently started coding in Python as well. For my side projects, I use ActionScript 3.0 for Flash.

What's your work environment like?

I work in a building that originally was a brewery, and now is an office building with three floors and lots of open space. It's pretty cool. Desks are clumped together, and spread out in clusters around an open office plan - no cubicles, though a few people work in separate offices. Most of the separate rooms are used for meetings though - there are lots of those scattered around. Of course, everyone has a computer or two on their desk. I use an exercise ball for a chair, though most people use normal office chairs. There's a fair amount of natural light, though there's a lot of fluorescent light too, unfortunately. I was able to get the lights above my desk turned off, at least, so they're not in my eyes while I work.

What is your actual job title?

I'm a Software Engineer at Linden Lab.

How do you progress in your current workplace?

My understanding is that if you're a Software Engineer, you can become a Senior Software Engineer if you become awesome and experienced. From there, you can continue along that track to be a Senior Architect, or switch over to a management role as a Dev Manager. There's not a huge ladder to climb, though. Most people will just be Software Engineers, which is totally fine. Of course, there are other tracks at the company in addition to the Software Engineer track, but I don't really know how those work.

What development processes are used at your company?

As you may have guessed from my description, we use Agile, or Scrum. This is actually a relatively new process at the company, as originally it was just a bunch of programmers working on whatever they felt like, more or less. Now we have dev managers and product owners and daily standup meetings and two-week sprints.

If you could change something about your job, what would it be?

I'd much rather be working on experimental new games (or "shared creative spaces" at Linden Lab) instead of just adding more stuff to the giant machine that is Second Life. I like working on smaller projects where I can build from the ground up, and I have lots of ideas for cool projects I'd like to try, so I'm really hoping I can switch over to that.

What do you like about your job? Dislike?

I like that I'm constantly learning new things and improving my skills. And I like the people that I work with, and the respect and autonomy I have in general. What I don't like is that I'm not working on what feels most meaningful to me right now, and that I struggle to find time and energy for my own projects outside of work.

What do others think about what you do?

I don't know, I guess I've never really asked! Well, sure, my parents are proud of me. ;) Generally, within the industry, programmers have a lot of respect - we make everything actually happen, and we deal with arcane, technical stuff that other people get confused just looking at, so they generally assume we must be really smart! Maybe people in the outside world think we're weird or nerdy or geeky, but I've never really had to deal with that kind of thing myself, so I don't know. I mean sure, every programmer understands the stereotype, and there's some truth in it, but I've always found that there's a strong undercurrent of respect. I mean, when you're in demand, as programmers generally are these days, people are going to think of you more highly!

Does this job leave you very much free time?

Generally speaking, no. The game industry is notorious for demanding long hours, especially if you're a programmer. The joke is that once you get into the game industry you no longer have time to play games. I've been lucky enough to avoid the worst of that, but even in my last job I spent at least half of each year in a moderate crunch (working long hours for an extended period of time) and then the rest of the year recovering from crunch, so I didn't have as much time or energy as I wanted to pursue other projects and activities outside of work. At Linden Lab things are a lot better, since it's not technically in the game industry - it's more of a typical software company. A lot of people at the company have kids and families, and simply won't tolerate the terrible work-life balance that is stereotypical of the game industry. I have to say, though - even when you are working reasonable hours, programming itself is one of the most mentally exhausting activities you can do, so it can be hard to have enough energy for your own projects after work!

What inspired you to become a video game programmer?

I've always liked making things. When I was a little kid, I was always drawing monsters, building with LEGO, and folding origami. In fourth grade I found out that it's possible to make computer games by this weird thing called "programming", and I loved the idea of making my own little worlds on the computer, so I decided to figure out how to do that! By the time I was in high school, I had been programming tons of games on my TI-83 Plus graphing calculator, and had dreams of creating my own game company.

What kinds of math do you use, and how did you learn it?

I don't often use math directly when I'm programming, but certainly in order to understand programming you have to be adept in a mathematical way of thinking. You have to be very familiar with how algebraic expressions work, and evaluating formulas made up of variables and functions operating on other variables and functions - it should be second nature to you. Or rather, it will become second nature as you get better at programming. So it's not that you have to be good at calculating stuff in your head - that's the computer's job - but you have to be very comfortable with understanding the formulas and expressions themselves.

However, as you get deeper into specific areas of programming, particularly game programming, you may need to use more advanced math. At the most basic level, when you are laying out buttons and text on the screen for the user interface of a game, you'll most likely be dealing with numbers for the sizes and positions of these objects, and doing lots of basic addition and subtraction to put them in the right spot relative to each other, or dividing the widths by two to get the center, for example. If this is not second nature to you, it will quickly become confusing. Or if you are making an action game where objects are moving around and colliding with other objects and shooting and all that, you'll be working with simple Newtonian physics and tweaking numbers relating to velocity, acceleration, friction, and so on, where you must be very familiar with derivatives - not in the sense of doing calculus, but in how things behave when they are connected by the mathematical relationship we call the "derivative". Or if you are dealing with things rotating, and converting angles into vectors and velocities and all that, you'll need to understand how to use basic trigonometric functions to switch between these formats. All of that stuff is pretty easy, not as hard as it sounds. But once you start getting into making your own physics engines you'll have to learn tricky geometric algorithms and maybe even do some vector calculus, which I still have some trouble with. And 3D graphics is a big mess of matrix algebra and quaternions and stuff that I've been able to avoid completely so far.

So really, I started learning programming on my own at the same time that I was learning the relevant mathematical concepts in school. I started reading about programming at the same time that I was just getting introduced to algebra in school. And not too long after I started learning trigonometry in school, I discovered that it was actually really helpful for making a turret rotate and shoot in a game! And when I was learning about physics in school, I started exploring physics in games. Unfortunately, game programming isn't really used as a way to teach math in schools, even though for me it was the best way for me to really understand it. I ended up learning this stuff mostly from online resources and tutorials. If you have a basic foundation in mathematical and algebraic thinking, learning the math you need from online resources is no harder than learning programming the same way. Doesn't make it easy, though! Just start small - only learn as much as you need to do the game you're working on now. As you make more complex games, you can learn more complex math.

And here is Part 1, if you missed it!

2013/06/15

Interview with a Software Engineer - Part 1

A couple years ago, my cousin interviewed me for a school project, which I posted as Interview with a Game Programmer. Recently, a number of students have found my blog and asked to interview me for their own school projects! Here for Part 1 is the first interview, by Yair Granados.

Needless to say, the views expressed here are my own and do not necessarily reflect the views of Linden Research, Inc.

Could you explain a little about what exactly Linden Lab does?

Linden Lab is the company that created Second Life, which is probably the most well-known online virtual world. Second Life launched in 2003 and started getting a lot of media attention around 2006, which was when I first heard about it. The unique thing about Second Life is that anyone can create things in the virtual world - clothes, buildings, artwork - and fully own the rights to their creation, including selling copies of their work in the Second Life marketplace. As a result many people are able to create or participate in a wide variety of virtual experiences that they would not be able to in more gameplay-focused virtual worlds like World of Warcraft, where your only option is to kill monsters and earn gold.

Today, Second Life continues to be the primary source of income for Linden Lab, so most of the company's resources are devoted to maintaining and improving Second Life. And that's what I'm working on - programming new features and fixing bugs in Second Life. But last year the company started branching out, with four new projects - Creatorverse, Patterns, Dio, and Versu - that all fall under the theme of "shared creative spaces" kind of like Second Life. The hope is that as Linden Lab can continue to have some people developing new projects like these, and eventually at least one of them will become big like Second Life has. This is definitely what I'm most excited about, as I really like the idea of building virtual spaces where you can use your creativity and share with other people.

How long have you been programming, and how did you get started?

I've been programming professionally (getting paid for it!) for about three years now, but I first started learning about thirteen years ago now. So it took ten years between my first attempts and when I started making a living from it! Of course, I was about twelve years old when I first started so things were pretty slow at first. I didn't know anyone who could teach me programming, so I started out trying to find books about programming at the library and at bookstores - but it was hard to find books for beginners back then! It wasn't until I got this educational software in fifth grade called "Learn to Program: BASIC" that I actually managed to try out some of the stuff I had been reading about. I remember working on a simple game like Frogger, where you are an ant trying to get to the top of the screen while avoiding slugs and snails that move back and forth, but I never completely finished it. Not too long after that, my parents signed me up for a summer course on Visual Basic at a community college right before I started middle school, and I ended up making my first finished game in Visual Basic as part of a science project that year, in sixth grade. After that I started reading about C++, and tried making an artificial life simulation in C++ for my seventh grade science project, but failed spectacularly as my lack of programming experience finally caught up with my ambitions.

Fortunately, around that time we started using graphing calculators in math class, and so I began learning to program the TI-83 Plus graphing calculator using the language TI-BASIC. This was great because I couldn't get too ambitious - I made tons of little experiments and games, and just ended up doing a lot of coding, instead of spending so much time reading about it! In eighth grade I released my first calculator game on ticalc.org, and also started learning z80 assembly language, which is used to make more sophisticated games on the TI-83 Plus. By that time, programming games on the calculator was my main hobby, and I continued to release more games and grow in my programming skill over the next few years in high school and even college. As I got busier, becoming a university student and taking real computer science classes, I stopped doing much calculator programming, but it wasn't long before I found a new platform for making games - Flash. I taught myself the ActionScript language for making Flash games, and made a number of games in Flash on the side while studying computer science for my university degree. By the time I'd graduated, I'd gotten pretty comfortable with Flash and had done a few internships (some paid, some not) making use of my Flash programming skills.

My career goal has always been to make a living by making my own games, and my parents were nice enough to give me a year to try the whole indie game development thing while living rent-free, so that's what I did. I learned to use the Flixel game engine for making Flash games, and started making little experiments, hoping to come across an idea that would be worth developing into a full game. Unfortunately, I found that my lack of experience was really holding me back, not just in terms of programming but in terms of how to be consistently productive and how to manage my energy and all that, and on top of all that, I realized that I was really lonely trying to spend all day coding in my room. So, when that year was up, I had finished one game, Flydrill, but it wasn't successful and I wasn't able to finish another one, so I realized that I had to get a job.

I was fortunate enough to get a job soon after at Fugazo, a casual game studio, as a C++ game programmer. Despite my initial reservations about becoming an employee and working on other people's games, it was exactly what I needed. I ended up staying there for over two years, learning much more there than I had in any two years of college, leveled up several times in my game programming skill and understanding of the business, and emerged as a very valuable member of the team and a desirable target for recruiters, which brought me to Linden Lab. And I kept making Flash games on the side, of course. My most popular game so far, The Love Letter, was released last year while I was at Fugazo, and I'm looking forward to releasing even more games this year while I'm at Linden Lab!

What exactly does a Software Engineer do?

Generally speaking, the term "software engineer" is pretty much interchangeable with "programmer" or "developer", but it tends to imply a more systematic approach to creating software than just hacking things out in a quick and dirty way. As far as what a software engineer actually does, that of course varies from company to company, and from project to project, but you can be pretty sure that if you're a software engineer you'll be spending most of your time writing code. Programming.

You'll probably also spend a fair amount of time thinking about how you'll program something before you actually do it, and investigating possible ways of doing things, and learning new technologies and tools and programming languages as needed, and debugging and revising old code, and talking with other software engineers on your team about all this. And depending on how big of a company you work at, you might have to spend some time in meetings, but hopefully not too much. ;)

In other words, there will be non-technical people (game designers, producers, product owners) telling you what they want you to make, and then your job is to get with the other software engineers on your team, figure out how to actually make what you're supposed to make, and then make it. You're the maker. You know how to make things happen. Other people tell you what to make, but they don't know how to make it, so it's your job to actually do that. It's not always easy, but that's why there are smart people like you to figure it out.

At first, this was kind of frustrating to me, because I like thinking of my own ideas for what to make instead of just making what other people tell me to. But one thing I discovered is that there is a creative aspect to building software that is entirely invisible to non-technical people, which means that as a software engineer, you can have a lot of creative freedom in designing the structure of the software itself, even if you don't get to decide what it does. Software engineering is largely about this invisible structure, and one of the nice things about having the job title "software engineer" is that you are more likely to have the opportunity to give this structure the attention it deserves, instead of having to do things in an ugly way just to get the job done, as you might find as a mere "programmer" or "developer". But of course it varies a lot from company to company, and project to project.

What skills or training does a student like me need to become a programmer? Especially a game programmer.

Well, as a programmer (or "software engineer") you really need to get good at programming, because that's what you'll be doing! If you are good at programming, it won't be too hard to find a job as a programmer. And if you're not good at programming, why would anyone want to hire you? Of course, when you're just starting out, you don't have to be perfect - there's something to be said for raw potential - but you still need to be good at programming. Kind of like if you want to be a professional athlete - if you want to be paid to play basketball, you better be really good at playing basketball. Except that there are a lot more jobs out there for programmers than for professional athletes!

The point is, you can't just decide to start learning programming when you want to get a job - you need to start programming now. It doesn't really matter what kind of programming - as long as you enjoy it, and can start getting good at it, there's probably going to be some demand for that skill. And even if it's something like TI-BASIC for the graphing calculator, which no one would pay you for, the skills you learn in one programming language can transfer very easily over to other languages and platforms. What really matters are the fundamental skills. So start learning one programming language, and then if you're not too into it just try a different one. There are a ton of languages out there, and a ton of different types of software you can make (or even types of games, for that matter) so keep trying until you find something you really like. And at some point you may want to branch out and you can try something new. The important thing is just to do it. This may take years - it certainly did for me - but so does any real skill, whether it's learning to play the saxophone or getting a black belt in Taekwondo.

Of course, there are easier ways to start and harder ways to start, and it can be tough to know where to look if you've never programmed before. So I can give you some suggestions. First of all, don't start with C++. I know there's some macho thing about C++ being a more "serious" programming language and that you're a noob if you don't know it, but seriously. Don't waste your time learning C++ if you can help it! Until you've had several years of experience with other languages you won't really "get" what C++ is all about even if you technically know everything about the language. That was certainly the case for me in seventh grade. Nowadays I code in C++ for my job, but I still use Flash for my side projects. I don't hate C++, but I would only use it when I absolutely have to. It's powerful, but it's heavy and cumbersome, and unless you're working on a huge project with a bunch of other experienced programmers it's like carrying around a big sledgehammer when you could be using a nice, ergonomically shaped hammer that fits in your pocket instead. No matter what you think, you don't need that extra power. Seriously. Just don't.

Okay, so if not C++, where should you start? Well, there are a lot of possibilities out there, but for general programming your best bet would be Python. Python is just an awesome language overall, whether you're completely new or have years of experience. I use Python just as much as C++ in my current job. But if you try Python and you're not too into it, you could try Processing instead. I don't think anyone would call Processing an "awesome" language, but it really lets you dive into graphics and input right away, so if you're drawn to programming because of games this may be an easier place to start. Then if you try Processing and it's still not game-focused enough for you, you could give Lua a try. In particular, you should try the free Love2D engine, which lets you make games with Lua. If you try all of these and you just can't seem to get the hang of typing in all this code, I'd suggest checking out Stencyl, which is a game-making tool where you can program by dragging code blocks around, which can be a little easier to learn at first. Then once you are comfortable with that you could try learning an actual programming language again.

The important thing to keep in mind is to just make stuff. Don't try to make your big, ambitious dream game - just mess with code and make stuff happen on the screen, and shape that into games. Make small games. Make lots of small games, and finish them. And release them online! As you do this, your abilities will scale up, and your experiments will start to become interesting games in their own right.

If you've made a few games and you're looking for your next challenge, I'd recommend learning ActionScript 3.0 and a free game engine like Flixel or FlashPunk to make Flash games if you want to get further into 2D, or check out the Unity engine with C# or JavaScript if you want to go 3D. That's basically where I'm at now, so don't feel like you have to go any further to be a "real" programmer! But if you have your heart set on C++ for some strange reason, make sure you're very comfortable with making games in Flash or Unity first. And if you want to make iPhone games, Objective-C is hardly better than C++ in my opinion, and you should check out the Corona game engine for iPhone, which uses Lua.

As a game programmer, you also need to be able to collaborate with people in other disciplines, like artists and game designers. Once you've made a number of games on your own and feel ready to tackle something bigger, I highly recommend you seek out other creators online and try to make a game with them. Most collaborations fizzle out or fall apart before finishing a game, so don't get discouraged if that happens, but learn from the experience and try again another time. If you're used to making entire games all by yourself, I'd say it's easiest to collaborate with a music composer, so try that first. Then you could try collaborating with an artist too. Then you can try collaborating with a game designer or level designer if you want. But I think the hardest would be collaborating with another programmer! Because you really have to coordinate when you are both working on the same code. So start simple, and don't be surprised if things don't work out at first.

Lastly, while I have emphasized the importance of actually coding a lot, there's also something to be said for the kind of theoretical knowledge you can gain from a computer science degree (or if you are very self-directed, from learning on your own from the many resources available online). But for the first few years, you're not going to be able to really appreciate most of it, so it's much more important just to start coding a lot, and learning from your own mistakes. Eventually, if you want to get hired as a programmer you'll probably need a computer science degree from a university to even be considered, but really, having a bunch of games that you've made yourself that you can show off is just as important. And if you're going to try to make your own way as an independent game developer, the university degree is only as good as what you make of it. So start by just making a lot of games, and then once you start to get curious you can delve into the theory of computer science and maybe even get a degree in it.

If it isn't too personal, what is the range of income you can make working as a programmer?

According to the Game Developer Salary Survey, the average annual income for game programmers who have been in the industry for three years or less is around $60,000 while the average for game programmers with more than six years of experience is around $100,000. I'd say the actual range would start around $40,000 and then potentially up to the low six figures if you've been in the industry a long time. Outside of the game industry, programmer salaries are actually a bit higher, as I understand it, but the same general range still applies.

What is good about your job, or what do you like about it? And what do you not like about it?

I think one of the best things about being a programmer is that I get to constantly exercise my brain and learn new things. That means that my work can often be frustrating and confusing, but even then I don't feel too bad about it because I know that eventually I'll get through it and I'll have gotten lots of programmer experience points to help me level up my skills!

As far as the actual programming goes, I have always enjoyed building things, whether that's LEGO sets or game engines, and when I understand what I'm doing well enough then programming becomes a very enjoyable process of building, and designing an elegant and aesthetically pleasing conceptual structure for whatever I'm building. I really enjoy that, and at its best programming can give me that feeling better than just about anything else. But programming isn't always like that - you're often running into snags, or encountering problems that you can't solve without delving into some new technology that you don't understand yet, and so you have to be prepared to spend a lot of time puzzling over some tricky problem, or trying to figure out why things aren't working the way you expect them to.

It's also nice that programming is a very meritocratic profession - if you write good code, you will have respect. Because it's about the code that you write, you don't have to dress a certain way or keep a strict schedule of working hours, and while I don't know how it is in every company, I've been lucky enough to work at companies with a very friendly, casual atmosphere.

The biggest problem I have with programming is that I have to sit in front of a computer all day in order to do it. I've learned to take breaks to keep my mental energy and productivity high throughout the day, but it's still a struggle. Because programming is such a mentally taxing activity, managing my energy has been a crucially important skill for being a consistently productive programmer. And that's another drawback - I like to work on my own games on the side, but oftentimes I'll be so worn out at the end of the day that I won't have the mental capacity in the evening to work on my own stuff. However, like any kind of exercise, you do get stronger over time, so I'm still able to get some stuff done. Just not as much as I'd like.

Is there anything else I should know about this job?

Probably. But words can only get you so far. You really just have to try it. And the most important thing to know is that you can just try it. You don't need anyone's permission; you don't need anyone's help. If you're going to be a programmer, you have to be willing to persevere in pursuit of your goals, to fail and fail and keep trying until you figure it out. Because that's what programming feels like, most of the time. Even when you've been at it for thirteen years, like me. ;)

And on to Part 2!

2013/05/28

Hi Gaby

When you asked me how a high school student could get a job without any previous experience, I didn't have an answer for you.

But now I have an idea. Let's see you what you think of it. ;)

So, the best way to get a job is through connections. As the saying goes, "It's not what you know, it's who you know." This is more important than your resume.

And the thing is, now, you have a connection. Me. I can't get you a job at a fast food chain, but I'm in the game industry now, as of about three years ago. And I've helped three friends break into the game industry since - two programmers and one designer.

But who says you actually want to work in the game industry? You like playing games, but you never said you wanted to make them. Sure. But do you want to be flipping burgers or serving people coffee, either? The only reason to aim for those kind of jobs is to help you realize how much they suck and get you motivated to go to college or something so you can try to aim higher.

One of your goals is to be an artist. That's awesome. I want to be an artist too. As far as making a living as an artist, there are at least three routes that I know of. One is to be artist making installation art for art galleries and getting money from grants and such. Another is to make lots of paintings or sculptures or whatever, and try to sell them at art shows and craft fairs and such. Since moving to San Francisco, I've met one of each kind of person, totally coincidentally. Pretty cool.

But the third way is to make art for video games. I know a lot of game artists. If you're not into the kind of art that galleries or collectors or tourists would want to buy, being a game artist is probably the best way to keep a steady paycheck as an artist. And I know you like playing games. That's always a plus.

So maybe you're considering the possibility of being a game artist. Maybe it's worth exploring. But how could you even start? I mean, you probably don't have the skills that a game company is looking for, at least not yet. You haven't learned them yet.

There are a few options. One is that you could try to find an unpaid internship at a game company. If you have some skills, there might be a company that would be willing to let you learn on the job, in exchange for whatever little you could contribute. That's where a lot of people start, just to get that first bit of experience on their resume.

But you might not even have the skills yet to interest a game company in letting you work for free, let alone for money. So what do you do? Simple - just start learning and practicing and improving your skills on your own time. Simple, but not easy. Still, you don't have to do it alone. You can find people to collaborate with online - maybe someone with more experience would be willing to let you help out with a small project they're just doing for fun. It's a big internet out there. If you can find a handful of like-minded people at the same school, and maybe get some guidance from an artist who's actually in the game industry, so much the better. I had something like that going in Seattle, except for game designers instead of game artists, and we were all out of school, but it's the same idea.

I'm not a game artist. But there are still some ways that I can help you, if you so choose. I can get you connected with an actual game artist who's willing to be your mentor - I don't know who that would be, yet, but I can find someone. For example, here's a female game artist who lives in San Francisco. I don't know her, but she was at the Global Game Jam here in January, and maybe she'd be willing to help you out, or at least talk to you a bit and answer some questions. If that's what you want, I'll see what I can do.

Or, I can let you do some art for one of my projects. I'm always up for collaborating with artists, and I get a lot of fulfillment from helping people to achieve goals they are truly passionate about. Since leaving Seattle, I've missed my volunteer teaching at PSCS, and I'd be willing to start again with you, if you want it. You can learn the process of making art for games through simple projects with me. A taste of freelance work, or remote collaboration - working from home is what artists tend to do. You can start here.

I'm your connection now.
If you want my help - well, you have my email address. :)

Oh, and here's the game I was talking about: The Love Letter
This one may be more to your liking, though: Flydrill

2013/04/11

California Culture Shock?

Someone asked me recently what stage of culture shock I'm in now, three months after my move to San Francisco.

I'd say I'm in the Adjustment phase... ;) My transition has been pretty smooth - really, San Francisco is not that much different from Seattle, and the biggest differences have simply been a result of living on my own instead of with my parents. And I have to say, for the most part, these differences have all been quite positive!

I've surprised myself by how comfortable I am with solitude, when I have things to work on and toward. I do have a couple friends in the city, and I've been making friends at work, so I haven't been totally antisocial, but I have been spending the vast majority of my time alone and quite enjoying the mental space. It's also a nice improvement to live a block away from a grocery store, to have a kitchen all to myself as I learn to cook, to walk to work and back instead of taking a bus, and to be free of scheduled classes and volunteer duties.

In the couple weeks, work at Linden Lab has suddenly gotten a lot more interesting (and just in time, as it was starting to wear thin) as I have started focusing on a new project within Second Life and have finally learned enough that I can build with pieces I understand instead of slogging through a confusing mess, and so now my contribution and enjoyment is finally getting to that bend in the exponential curve. Still pushing the experimental stuff too - hopefully that will pick up in the next couple months as well.

And of course overall I have been appreciating the time I have around the edges now that I am no longer stuck in a cycle of alternating crunch and recovery from crunch. Many mental piles of clutter have been revisited and processed, many more to go, but still a promising sign. Over the past several weeks I have also been getting into developing the new version of Space Lord in an experience that has mirrored the development of the polished version of The Love Letter last year. Of course, as this means working hard at my day job and then eagerly coming home and working for several hours on Space Lord in the evening, I have not been getting as much sleep as I'd like. Still, I am very grateful for this opportunity - developing The Love Letter was one of the most enjoyable things I did all of last year. Space Lord may not be the perfect storm that The Love Letter proved to be, but it's been getting more and more interesting, and it's been nice polishing up my game jam backlog.

Right now, and I expect this to continue for several months more if not to the end of the year, my focus has been on getting things in order - trying to establish a sustainable routine, working through my mental backlog, dropping sources of friction like Google Reader, revisiting old projects. Fortunately, Linden Lab is the kind of place that is very flexible about a schedule where I go outside for a half hour of exercise before lunch, and a half hour of music practice for an afternoon break (perfect for refreshing my code-addled brain!). Like my sleep schedule, it's a work in progress and always in flux, but overall it's going in the right direction.

I have started doing some new things though - most notably, I took an introductory Parkour class this weekend for the first time! I can't believe I waited this long before trying Parkour - it's always been something I've thought would be a lot of fun, but never got around to actually doing. But now that I've started, it's obviously perfect for me. I can draw upon my previous experience with both Aikido and Capoeira, and it's something I can practice on my own time without having to find a partner.

So, I'd say it's going pretty well. I need more sleep though! Looking forward to getting Space Lord out there. :)

2013/03/14

A Minor Flydrill Update

Not too long after my last Flydrill update, almost two years ago, I kept tweaking the game but never released anything after that.

Until now. :o


Don't get excited, it's just a tiny update. ;) I added white outlines to the enemies so you can see them better, with a slightly darker background color. I also made the giant wall thinner in the beginning. Honestly I was just tired of having to drill for ten full seconds every time I started the game. That's why I went ahead and released this update.


I guess it's spring cleaning time for me, polishing up and releasing old stuff I've had sitting around on my hard drive for the past year or two... :)

On that note, I noticed that Google Reader will be shutting down in a few months! :( As disappointing as that is, I think it's a good opportunity to revisit my content-consumption habits and perhaps let go of my daily blog reading. Looking through all my feed subscriptions, it strikes me how few blogs are still active - really there are less than a dozen that I see updates from regularly. And I've gotten to the point where none of the stuff I read is really that valuable to me - the game design articles are not blowing my mind with new insights, the productivity articles are teaching lessons that I've already learned, and really, I think I'd get a lot more out of spending that time working on actual projects or reading books or even... playing games. I mean, it's been years since I've really sat down and just played a game, for serious. I think the last one must have been Portal. Yeah. The truth is out! :o

Well, I hope you enjoy the Flydrill update! :) May there be plenty more to come, soon.

Oh, and I almost forgot - Happy Pi Day! :D

2013/03/13

Active Sketch 07 - Quilt

Not only has my new job at Linden Lab been inspiring me to post more often, I've also been doing a lot more prototyping! :)

I used the platformer engine from my Ludum Dare game Ninjural Selection to make this infinite "quilt" of platformer levels. When you go off the edge of the screen, a new level is randomly generated and placed alongside for you to fall into.


The levels are generated by randomly drawing and erasing horizontal and vertical lines of tiles, and then placing random emoticons for you to collect and avoid. But imagine what it would be like with fully featured platformer levels with roaming enemies and cool stuff to play with. Imagine that each level was created by another player - in fact, in this prototype you can already edit the platforms by holding shift and drawing with the mouse. Imagine that there were other players roaming around the quilt with you in real time, collecting coins with you or racing to find special items.

I think that could be pretty cool.

Active Sketch 06 - Runway

Almost two years ago I posted my last Active Sketch. The thing was, I had made another one around the same time that I never got around to putting online! So I decided it was time to finish it up and share it with you all.

It's a test of a one-button runner control scheme. I added new artwork, and random blocks to avoid.

Press and hold to run, let go to jump, and press again while in the air to fall faster.


Maybe not the next Canabalt, but I think it has a nice feel. :p The real challenge will be designing an environment that is fun with this control scheme - right now it's a bit too hard to avoid the blocks. I'd guess that it might actually be more fun if you were running on rooftops...