Don’t Be an Open Source Douchebag

I love open source software. It provides both a neat training ground for programmers, a good place to go scratch that itch. On the other side of things, it provides awesome software for people, including some software that would never come out of a big development house.

Still, there are some issues with free software that don’t really show up to the same degree with commercial software. One such thing is documentation. It’s painfully obvious that documentation is written by people who:

  1. Already know the software in and out.
  2. Don’t like writing documentation.
  3. Know nothing about how people learn.

For instance, when I started a side project a few months back, I was looking for a build system. After settling on CMake, I set about trying to make sense of it. There’s the ever-present getting started example, of course. And then there’s the full reference of everything you could possibly want (almost).

But in between those, there’s nothing. Well, nothing except a book, which just goes to show you that there’s something missing — a professional writer could obviously make some money out of explaining things in a reasonable way.

The problem with this is that it doesn’t match how people learn. Getting started is a good step, but a relatively small one. Most of the time will be spent incrementally expanding the knowledge, moving from beginner to expert. Most time will thus be spend in some kind of zone in between the “getting started” and “reference of everything” levels.

Worse than that, some open source programmers have a tendency to view their full reference documentation as an appropriate resource for everyone. “It’s all in there,” right? But pointing a beginner at a 40-page document detailing all the options of some application when all they want is to run it properly isn’t very helpful. I’m sure you know what I’m talking about if you’ve ever used an open source command line tool.

That ends us up with the really dark side of free software culture. The true douchebags out there will not only be extremely smartass in their RTFM comments, they’ll also be incredibly sensitive and defensive about the software they’re working on.

I ran into a problem with cygwin’s SSHD implementation last week. In searching for the solution, I found this mail list answer:

  Wrong.  That is uninformed speculation and guesswork.  Stop
spreading misinformation.

  Cygwin SSHD has had the support for fully logging in as any
user since 1.7, as you have already been told and completely
ignored.  Go and read the manual.  The link was in the previous
email I sent in this thread.

  freesshd works exactly as Cygwin *used* to before it got
subauth support: when you log in with a key, rather than a
password, you just end up as an admin user.

Wow. This kind of answer is wrong on so many levels. First of all, while he makes it seem like the functionality has been there forever, cygwin 1.7 is still not even out of beta. The chance that an end user has it is about 0. So, with the current version (1.5),  supposedly cygwin sshd works just like freesshd. This is clearly false, because the original poster reports one working and the other not (which is, by the way, exactly the same results that I had).

So, a user reporting a problem about logging in gets pointed to a long documentation about security settings in a beta version, doesn’t understand a word from that document (no surprise there), and as a result gets told to “stop spreading misinformation”. Truth is, simply installed like any normal user installs applications, one works and the other doesn’t, something made quite clear by an answer from the original poster in a different place in the thread:

> Are you talking about password or public key authentication?
> If the latter, Have you tried the LSA authentication package
> in Cygwin 1.7?
I don't know. I'll try to deciper that. Sounds complicated. In
the meantime, friend is using freesshd.

The essence of what he’s saying (which has been completely missed by the cygwin developers) is that the effort required to get cygwin to work like one would reasonably expect of it is much higher than the effort required to just google for something that just works out of the box. The fact that you could potentially make it work is irrelevant, because he’s not getting any help actually making it work.

He might as well just have said, “I don’t care about making it work for you. It works for me.”

Software companies usually compensate for their complete lack of useful technical support with a good (or at least reasonably decent) amount of help documentation. Free software usually has neither.

I encourage any programmer to practice their technical skills on an open source project. But while you do so, take the opportunity to practice your people skills a bit as well, or why not your writing skills? Don’t be an open source douchebag — someone reporting your software’s flaws is not attacking you personally.

What’s a Good Final Year Project?

Here’s a question from the mailbag, coming from a student doing games programming at a university, gearing up for his final-year project:

The degree I’m doing currently has been very much centered around graphical programming, aswell as using various programming languages to bolster our CV’s I would imagine. We’ve not really touched on networking, or AI at all. Our main language in graphical programming has been OpenGL too, we’ve dabbled with DirectX a little, mostly managed directX with XNA.

As a programmer already in the industry, could you give me any advice on the type, and level of project I should aim for, for it to be a suitable demo project to show to prospective employers? It’s difficult enough as students to find our way into the games industry; if we don’t know what employers want, or what is considered worthy in the eyes of the employer, it lowers our odds tenfold.

In a way, the answer to the question depends on what kind of position you’re trying for. I’ll try to answer with regards to as many positions as I know.

For starters, is graphics programming what you want to be doing? If it is, things like what graphics APIs you know become a lot more important. From what I know, most games studios that do windows game development have gravitated towards DirectX. With that in mind, having done a large(ish) project on DirectX could definitely be a plus. If all other things are equal, I’d definitely go for learning DirectX.

Not having experience with networking or AI isn’t all that much of an issue, unless you imagine going specifically for a networking or AI programming position (and even then, it’s more of a bonus than a requirement). One thing is clear however… if you’re looking to get into professional development at a large studio, you should be going for C++.

Now if we look past the technical requirements, there are a few things that can be said about such a project in itself. What you get from a good project is a nice entry into your demo reel — something to show off. This has a few implications, but most importantly something I’ve touched on before, in A Spectacular Failure: your project is going to be judged on emotional first impressions, not how technologically advanced it is or how nicely coded it is.

Your number one enemy is over-scoping the project, ending up with something that does lots of things, but does none of them in a great way. Come up with a good core gameplay for the game, and then polish it to a great shine. Fix all those annoying glitches and bugs, make sure everything looks as impressive as possible. It doesn’t need to be rocket science, as long as it’s well executed. In the end, what a games studio is looking for is a programmer who knows how to finish projects in a good way.

That doesn’t mean your project should be Space Invaders, but in general trying for something too big is more of a problem than overdoing something too small.

Finally, as an entry on your demo reel, make sure you make the game available in an easy manner. Have a page with plenty of screen shots, videos and preferably the game itself easily downloadable. Your coding ability will definitely be tested with some form of work sample as you apply to studios, so the code itself being available is less important. Reading code is hard, so it’s unlikely that someone will have time to read yours. However, having a finished game to show off is worth a lot, as is the experience of going through all the phases in finishing a game.

Other posts you may find interesting, relating to getting into the games industry and getting started with games:

Scarcity of Content in Games

There’s an interesting difference, if you compare games to other art forms like movies, in how they get consumed across different groups of people. With movies, there’s pretty much two categories of viewers: the big screen people and the DVD people. With minor differences within those groups, everyone has pretty much the same potential experience. Very few people turn the movie off before its end.

That is very different with games. A sizable portion of everyone who plays a game, especially multiplayer-enabled games, will put a huge amount of time into that game. That’s awesome, but those people are not in a majority. The majority of people who buy a game wont even finish the singleplayer campaign. For these people, the game was too long. This is something like the dark secret of game design, and its a reason that makes constructing games a bit sad — no matter how much love you put into your story, it’s unlikely that most people will see its conclusion.

You would never guess that this was the case, looking at game reviews. Reviews regularly complain about games being too short. This has happened to a range of great games lately — from Portal to Uncharted: Drake’s Fortune and Mirror’s Edge — all games that I enjoyed a lot. What conclusions can we draw from this?

Well, first of all, if you are the kind of person who rarely completes games (like the average gamer out there apparently), game reviews aren’t taking your interests into account. I’m assuming here that being able to finish a game is more enjoyable than abandoning it along the way.

Second, we’re creating ever-longer games that cater to a portion of the gamer community who will not buy games that are too short, which means that at the same time we’re making sure that a majority of players will play even smaller part of the game. That’s quite a problem from where I see it — a small part of players are allowed to dictate how games are made, which actually lowers quality for the majority.

In addition to this problem, more time in games tends to mean more repetition. Content creation for modern games is incredibly expensive, which means that longer play means more play time made from the same content. Maybe that means more of the same kind of objectives (ever play Assassin’s Creed?). My own experience is that I’d much rather play through Uncharted on its Hard difficulty setting than play through a longer, but more repetitive game.

The result of this is a kind of scarcity of actual content in games. The longer we make any given game, the more diluted the experience becomes. We get more of the same enemies in the same locations, and more locations made up out of the same building blocks.

You can see this quite easily if you compare the soundtracks of different media. Movie music is a movie-length musical score which has changing music to the events in the movie, usually with common themes for parts of movies but with the music still shifting to each individual moment.

How much variation is there in game music? Sometimes, game music is a movie-length (yes) musical score, played straight or randomly to a game (usually 4 times longer than a movie). Sometimes it’s a song-length musical score played to each level. Sometimes it’s “dynamic music” which usually means tying musical start/fade triggers to action. I commented on game music before in Give Me Some Emotion, Maestro, where I suggested a more involved form of dynamic music for games with composers as first-class game developers, but that doesn’t go all the way — we also simply need an appropriate amount of music to cover the length of a game.

More enemies to kill in the same way, more of the same concrete blocks to make up new parts of levels, more of the same music and sounds, more of the same experience. These things all lead to the current playing experience you get from games, which tends to be a repetitive flat-emotion slaughter even if you look at non-shooter games. Yet making more content for the games would make them more expensive.

I think games as a medium need to focus better. Yes, shorter games would probably be good in the long run. There are some people who would wish that movies be 10 hours long as well — but those aren’t the main segment of customers for movies. In the end, bringing quality of games up needs more variation — in environments, in challenges, and in emotions. Then maybe the average consumer would actually have the pleasure of finishing the games they buy.

I don’t mean there can’t be long games here either. People obviously liked the The Lord of the Rings movies, despite their long run time. But those movies are still beautifully crafted all the way through, and do not lack the focus you would get from doing the same thing to other movies. It also has something to do with an insanely large budget.

For singleplayer games, the question then becomes how to satisfy the people who want longer play times? I sure don’t have that answer, and any comments are definitely appreciated.

And Here Come the Aliens — Storytelling in Games

Why do games inevitably end with you shooting monsters, zombies or aliens, regardless of what the game was about from the beginning?

Game story design lacks some maturity, compared to other media. It seems to me that we’re too obsessed with the spectacular, or too afraid of not making a splash, that we violate one of the fundamental pieces of storytelling advice there is: keep the story believable.

The central concept in all great storytelling is the suspension of disbelief. We’re asking the viewer, reader or player to ignore all their preconceived notions about how a world works, and join you in your world for a bit. This can work as long as your story is compelling enough to keep them interested, and consistent enough that the world makes sense in the mind of the viewer, reader or player.

alienWhy, then, is it so common in games that start out with a fairly reasonable story, there inevitably seem to be aliens, zombies, super mutants, experimental super-soldiers or some similar monstrosity near the end? I’ve played through a fair number of games with this problem, and I’ve actually quit a fair number as well.

Some games have stories that aren’t exactly masterpieces, yet they still get smashed to pieces by this kind of move. One example of this would be Far Cry — not exactly known for it’s brilliant story, but I still lost my interest when the super-mutant-experiment-soldiers showed up.

Since actual good game stories are so few and far apart, story reviews tend to look favorably on anything that actually has a story.

Game story designers fall into this trap for several reasons. I think, first of all, that it’s a sign of a certain lack of maturity — we don’t take our stories seriously, don’t focus on them and thus we don’t think they can hold their own.

For me, the story adds so much to a game experience that it deserves to be treated better. Trust me, playing the single player campaign of something like Bad Company during development, before the story elements are in place, is but a pale shadow of the final product.

Our demands on gameplay and difficulty also makes this an easy trap to fall into. Adding more HP and weaponry to enemies only makes sense to a certain point, I guess, so in order to have an appropriately difficult grand finale, we throw in something supernatural. The funny thing about this is that many times, the same games have already shown themselves to not need this. Uncharted: Drake’s Fortune, for instance (which is an awesome game by the way) has both a story and difficulty measures good enough to stand on their own feet. It simply didn’t need monsters.

These thrown in monsters, mutants and aliens provide an opportunity to make something spectacular. However, the best moments I’ve had in gaming must be the ones that both made sense and were spectacular.

I hope game stories can move with time to the more mature, nuanced theme of telling a simple but powerful story in an interesting way that keeps me hooked. However, that requires us to respect the power of a story well told… among all our fancy graphics, powerful hardware and surround sound systems, we get to face the idea that perhaps the most important piece of the game shares more qualities with a good camp-fire story than with the tech labs that produced the chip we’re running.

What do you think about the state of stories in games? How would you like to see them improve?

Image credit: kevindooley on flickr

Getting Into Games — A Follow-up

My post from a week or so ago about the differences between working as a software engineer in a games studio and in other places generated a fair number of interesting comments and questions, both here and at various syndication sites. In this post I will try to answer and comment on the most common and interesting ones.

Working at a Games Studio

Getting started with something I intentionally left out:

Low pay. Good luck trying to buy a house.

There’s a well known discrepancy between salary in your average programming gig and your average games programming gig. I left it out of the original post because of two factors:

  1. The difference is highly overstated. Salary varies much more within each class of work than between the two. While it is true I could probably get more money by switching to another job, the same is true for many others, and the difference wouldn’t be worth it to me.
  2. It’s your choice. I expect you to make a well-informed choice on taking any job when it comes to what you get paid. Don’t just take any job because someone told you you get paid a lot in a certain business — make sure you get what you’re worth.

A second issue from the same commenter (and several others):

Yes, you have to come to work on Saturday and Sunday.

This is an issue in the industry, and I’ve seen pretty bad cases of it. Since I started coding games, the working conditions have improved by far though — and this doesn’t only seem to be my situation but applies to many others I’ve spoken to at other studios (mainly within EA though — would be happy to hear the perspective of other people). At the moment, from where I’m sitting, things are looking pretty good.

I’m not saying crunches don’t happen, I’m just saying they’re reasonably few, have a good purpose and focused time span, and include a time off compensation after the deadline has been passed.

The most problematic part of this is that it’s extremely hard to figure out if this applies to any given studio without actually working there or knowing someone who does.

I wouldn’t want to be the guy working on the next Madden game

Well, I actually know the guy working on the next Madden game and he is incredibly dedicated and seemed to love what he was working with last time I saw him. About the comment, he told me “Well we don’t want that guy anyway,” which is very true — the reason there is a Madden game every year is because there are lots of people interested in a new Madden game every year, and among that crowd there will certainly be people who are interested enough to want to work on the game.

It’s funny, because I sometimes hear the exact opposite of this comment at work. “It’d be so awesome to work on an iterative title where you just got to improve things and do all those cool changes that we have to cut”. Working on Madden is a pretty sweet place to be if you love sports games.

People sometimes seem to think that innovation only means new game franchise. There are lots of interesting developments and innovations within franchises, even within a “plain old sequel”, and working on one of those titles avoids one of the great drawbacks of the games industry: half the time you’re semi-panicking because your game engine isn’t in a shippable state and there’s a whole game team trying to use it to create a game.

That way, working on Battlefield: Bad Company 2 is nicer than working with the first game: the same chance for innovation, but less problems with others not being able to innovate due to the state of the code.

Getting started

A question that keeps popping up is any version on this:

I’m a frustrated web developer who’s always wanted to make the move into game development, but have yet to find the time to train myself and start shifting my skills over.

Any tips for someone looking to start out in that direction?

I’ve touched on this subject before, in An Exceptionally Stupid Idea, which tells the story of what I did. That post may be best applicable if you’re still in college, but there is a certain truth to it regardless of where you are. Time is money however, and with anything in life  you’ll need to do investments… so seeing where you could free up time is a first step.

What do do with the time once you have it? Well, the games industry is looking for a few things:

  • Skilled programmers
  • … who know the language
  • … and with some experience of games

The third is actually somewhat optional, though most recruiters would never admit that. Becoming a good programmer is a hard topic to cover — more than half the stuff on this blog is already devoted to that, so I’m not going to comment further on that one.

Chances are slim you’ll be coding anything but C++ if you code games, so if you’re not already very familiar with the language, you should get familiar with it. It’s often said that good programmers learn new languages quickly, and to a certain extent I agree with this… but if the problem is complicated enough, you need to be a language expert.

Finally, getting some form of portfolio is good, even if it’s “just a side project”. That could also be a good project to use as practice if you’re not too familiar with the language. Further, it helps if you’re a gamer and stay on top of what’s going on in the industry.

This actually ties into another comment, which was the most compact piece of information:

C++

If you dislike C++, turn elsewhere. I personally think it’s an extremely capable language once you learn to harness it properly. It is dangerous without the safety equipment though, and sadly some of that equipment doesn’t work with games.

Other languages are starting to appear when it comes to games coding. I’ve heard examples of LUA, java and C# being used as scripting languages, and of course there’s UnrealScript. These can be extremely beneficial for iteration times and such, but the grunt of the software is still going to be C++.

Update: I should also mention another old post of mine about this: Let’s Make a Game Engine!

Games Programming

I tried to avoid getting into the details of hardware and the coding that goes with it in the previous post, since I love talking about these sort of things and I didn’t want it to become a rant but hey, you asked!

Console hardware (I’m looking at you, PS3) is made for pretty graphics demos, not simulation. If you work on the AI or physics, be prepared to focus your energy on low level optimisation and cache misses, because your AI code is never going to be any more sophisticated than a state machine.

Well… I’m the lead AI coder on Frostbite, and while there are lots of things to be said about the Frostbite AI, “no more sophisticated than a state machine” is not one of them. I agree, some things (especially physics queries) are expensive on the hardware, but that simply means you need to re-think how you do stuff.

SPU code is a vastly different beast from your average code. There are some bad programming habits that can completely destroy your code for SPUs… and among those bad habits are the ones that would lead you to get stuck on low-level optimizations. Once you learn how it works, there is an incredible amount of power in the PS3. I’d dare to say it’s still relatively untapped, and that as time passes we’ll see more sophisticated uses of it.

The limitations of console hardware is different. That doesn’t mean you can’t implement physics or AI, it just means maybe you’ve got to challenge your assumptions about how you implement physics and AI.

I guess the Parallelism approaches are a little different in both worlds. I bet you gamedev guys have been working with Data Parallelism for a while (i.e: programming the Playstation2 Vector units. I don’t think life is getting any easier on you guys with all those Cell SPEs to squeeze!).

In the enterprisey side, task parallelism is an emerging topic with languages like Erlang, Clojure and Haskell offering different abstractions for spreading computations over different hardware threads/cores.

The vectorization units of the PS2 are a quite limited way to do data-parallel work, so I disagree with you here — with the SPUs on the PS3, it actually is easier, because it’s less limited in what you can do with them. Vectorization units and other primitive forms of data-parallelism often work in lockstep, whereas the PS3 actually has a bunch of individual, highly capable although slightly quirky processors.

Games are full of data-parallelisable problems as well. Rendering is the classic example — the reason GPUs have been such a hot development the last few years is that rendering lends itself so well to parallelism. But there are many other things as well — the aforementioned AI is ideal in some ways, as it tends to be made up of lots of separate processes for different actors or entities.

Task parallelism is also something that can be utilized to a great degree in games since there are simply so many orthogonal tasks to complete. Update the UI, do physics simulations, calculate character skinning, play audio… I can’t go into details on that, but we do a whole lot of it in Frostbite. Sadly, you do end up needing to care about many of the details that using an abstracted language would let you ignore though.

Still, it’s one of the most exciting aspects of coding for me, since games are one of those applications that can actually use all the power of parallel computers.

WordPress Themes