Update: Better late than never, my talk is now on my site.

Happy New Year!

For those that don't know, in May (or so) I moved from Boston to Charlottesville, VA. Thankfully, the awesome people at Fire Hose have allowed me to stay with them and work remotely, so I haven't moved companies. I have, however, moved communities.

Charlottesville isn't a huge center for game development, but I think if could be a great place for game companies in the future. There's a lot of talent to be had from the neighboring universities (UVA, JMU, GMU, Virginia Tech, and William and Mary are all fairly close) and it's just a great place to live. It's not a big city, but that's actually what I like about it.

To try to help this along, I've created the Charlottesville Game Developers meet-up group. We've had a few small meetings so far, with mostly me talking, but coming up over the next few months, we're going to have some great talks about starting companies, working with the city of Charlottesville, and maybe more! (By the way, if you'd like to come visit Charlottesville and give a talk, let me know and we'll work something out).

Tonight, I'm giving a talk on tips for game jams. Since UVA has been nice enough (at my urging) to host a Global Game Jam site this year, I'm making sure everyone comes in prepared. Most of the tips come from my previous post mortems of game jams, but there will be some new stuff in there. I'll try to be sure to post the slides tomorrow as well, so everyone can get the benefit.

Anyway, if you're in the Charlottesville area, come out to our meetings! I'm really looking forward to seeing what the Charlottesville community can produce over the next year.

GDC is over, and my talk "From College To Industry: 20 Lessons Learned for Getting the Most out of Your Early Career" went fairly well I think.  The room was packed, which was no small feat considering how big it was, but I think that was mainly because those attending the Career Seminar had nowhere else to go during that time.  I could be wrong, though.  The title could have been that good.

Regardless, the slides for the talk are now posted and available for anyone.  I've been asked to give this talk a few more times, but I think I'm going to revise it a bit.  I really want to emphasize the two points about knowing business and making sure all the founders of a company are on the same page.  Of all the points in my talk, these two feel like the most important, but also the most belabored by other speakers, and also the most ignored.  They may be lessons that you have to learn the hard way, but want to do everything I can to really hammer those points home.  Hopefully I can accomplish that with revisions.

If you attended the talk, I'd love to hear your opinions and feedback.

Just to keep people in the know, I'm giving two talks in the coming months. The first will be at Games Forum Germany (site is in German, obviously, thought the talk will be in English) on either January 27th or 28th, I don't really know which. The talk is titled "Data Driven is Half the Battle" and will be talking about why just setting up data driven code isn't enough, and how (both from a high level and a low level) you can create a system for giving others on your team the ability to edit your data quickly and easily.

The second talk will be at GDC, as part of the Game Career Seminar, which takes place on the Friday of the conference and is focused at students. That talk is called "From College to Industry: 20 Lessons for Getting the Most out of your Early Career" and is about, well, getting the most out of your early career. It is basically a lessons learned talk about my 10 years attending GDC, and my 6 years in the game industry. While that isn't a really long time in the game industry (anymore), I feel that some of the lessons I've learned over that time will only really be apropos to students for a short time, and thus it is most useful for me to give the talk now, when it will be most useful to them. I will be practicing this talk twice in front of student groups around the Boston area, once at WPI and once at a local SIGGRAPH meeting, to make sure that the talks really hit all the right notes and lessons and are as useful as possible to the GDC student population.

Both talk's slides will be posted on line after the talks, and the GFG talk will probably be cross posted to the Toolsmiths, since it is a tools related talk.

I've been thinking a lot recently about motivation. Specifically, what was my motivation for wanting to get into the game industry? What was it that drew me towards it despite horror stories of crunch, burnout, and under-appreciation? I decided to get into the game industry despite all of that, but why?

I know for many, the answer is simple: they love games. Others love the community of game developers.

I got into the game industry for a different reason. Sure I loved games. Sure I loved the community of game developers, but I wanted more.

In his recent retirement letter, J Allard talks about his initial decision to work at Microsoft:

During every interview, I'd challenge, "'A computer on every desk and in every home' is quaint, but why stop there?" and the typical response would be along the lines of, "That's just our ante." I liked that... +1 Microsoft.

I couldn't believe it, but it was impossible to dismiss the similarity and authenticity I felt in every conversation. On the flight home, I contemplated these discussions, the passion and IQ of the people I had encountered and their invitation to create my own space to drive a bigger agenda alongside them. It clicked. The "computer on every desk..." rhetoric was a ruse, the real purpose and ambition of these people was much, much broader:

"Make the world a better place through technology."

Like every idealistic college hire, this was the unicorn I was looking for. I wanted to do something bigger than me – "change the world!" – with a bunch of people who respected and could augment my superpowers. I had visited the Justice League of Geeks and they had invited me in and had shown me the secret handshake.

When I wanted to join the game industry, I had a similar thought process. I wanted to make the world a better place through games. That bears repeating.

I wanted to make the world a better place through games.

I think my problem now is that I was also very specific on how I wanted to do this. Certainly, there are ways to make the world better through educational games, games for health, or so called "serious games," but this wasn't particularly what I was thinking.

Growing up enjoying adventure games (specifically Sierra adventure games, many of which had more serious tones than other games in the genre) as well as many really good books, I wanted to see games reach a level of literary expression that rivaled our best works of literature. I wanted to see games deal with more mature themes, not in terms of sex and violence, but in terms of how we, as people, interact. I wanted games to take a hard look at subjects like ethics, racism, political freedoms, war, peace, trust, and betrayal among others. I felt games were in a unique place to do this because, if they allowed you to make hard decisions and see the impacts of those decisions, the lessons would necessarily be more poignant. And I believed it was all possible through story, given enough talent and enough thought.

Interestingly, for my first 7 years of GDC, every GDC only made me more convinced that this was possible, and that there were others out there thinking the same things. I would leave every year more invigorated at the possibilities of our medium, and that it was only a matter of time before we started seeing really good literary quality games.

2010 was year 8, and I came out of it a little less hopeful, for a few reasons.

First, I've realized GDC is a self-selecting group of individuals who want to discuss the "hard problems" of making games. These are the types of people that, even if they don't want the same things I do from games, they do want to discuss it. They are excited by the possibilities, even if they don't believe it to be interesting or possible. And with that said, there were fewer people talking about the hard problems this year. It's hard to explain, but GDC this year (for me at least) felt like the industry had exhaled, so to speak. Some of the spark was gone.

Second, I haven't seen games moving toward that direction in a long time. Investigations into actual ethics in games, and real consequential action I think hit its peek with Ultima 4, and with the exception of a few bright spots here and there (Ultima 6, Deus Ex), it hasn't resurfaced. And I feel both the game industry and the gaming culture moving away from such games.

Third, even if I was able to write such a game, I don't think the audience is there for it. Not enough people would buy the game for anyone to justify the effort needed to make it happen. Such a game doesn't work as a small, simple game, or in bite-size chunks. It's an undertaking that seems to provide very little reward. Generally, I think this is true for culture across the board, not just for games. Our media consumption is leaning towards pop-fiction in all forms. Don't-make-me-think media, or (more likely) tell-me-what-to-think media.

Lastly, even if the market were there, I cannot point to a company who shares this ideal. I can point to people (some indie developers, some of the art game crowd, some IF writers), but no groups. There are no Microsoft's. Even Microsoft isn't Microsoft anymore, in the game industry or out of the game industry.

I wanted to make the world a better place through games.

So my question is, given that I've found that my original motivation for entering the industry fading, how do I keep myself motivated? I don't want to leave the industry, but without this initial motivating factor being made manifest….. perhaps there are better ways to make the world a better place? Through technology? Through other ways?

I know this whole blog post sounds ridiculously whiney and / or pompous. And I'd like to be clear that I'm not leaving the industry any time soon, but I still feel my old motivations hanging over me. Maybe I'm getting older, and getting excited over little steps isn't cutting it for me anymore. Now, I'm sure someone can point out games or movements that I'm missing, but from where I'm sitting, I feel like real innovation and evolution, especially in the story department of games, is hard to come by, which is making it hard for me to see a place where I'd be comfortable. Maybe I'm just wearing blinders and ignoring signs that this is taking place? Here's hoping.

My good friend and educator Bill Crosbie is asking some tough questions on Twitter, specifically about what to teach fledgling game programmers to make them the most marketable to game companies when they graduate. Now, you might not be able to tell from the Twitter conversations, but Bill is actually very concerned about giving his students a good, foundations based, computer science education, while also giving them the opportunity to make games, and giving them skills that they can immediately transfer into the workplace, all in less than the two years he happens to have them. And what he's asking are actually really hard questions, and got me thinking: What would I want out of programmers coming out of two year and four year programs, both those that are focused on game development, and those that aren't? What can I tell Bill to do to make sure that I would at least consider hiring his better students?

The Never Ending Conflict

This comes down to a never ending conflict that educators are well aware of: the conflict between giving a student marketable skills, teaching them the tools and technologies that are relevant "right now" that they can put on a resume and will immediately generate hits on job search websites, and giving them an actual solid education in computer science and software engineering. Ask most programmers in the game industry (at least the ones I know) and they will tell you the later is more important, but look at who actually gets hired and the former plays a very obvious role. The problem is that when I'm hiring a programmer, I want someone who's smart and gets things done, but I also don't want to take the time to teach them all of the skills that they're going to use on a daily basis. It's a tough balance, and getting programmers that don't understand things about your core technologies, or at least their underlying principles, can be dangerous.

In addition, technologies go out of date so fast that teaching one specifically can be counterproductive. C++ has been the de facto standard in the game industry almost since inception, as we've needed the control and power that C++ provides, but the technology that we're working with under the hood can dictate exactly how we can use C++. Students taught to think about single threads of execution on x86 processors, using primitives that would be perfectly fine in other industries (like stl vectors and strings) would be screwed in today's game industry, an industry which is (now) all about squeezing as much performance as possible out of multiprocessor, multicore systems on x86, x64, PPC and Cell chipsets. And interestingly, this is exactly what's happened. Students taught to think ONLY in an object oriented paradigm have trouble parallelizing their code and thinking in terms of small executable chunks that don't suffer from things like race conditions and cache misses, if they even know what those are.

But what's academia to do? Most game developers won't even look at a programmer unless they have C++ experience, understand OO concepts, have done at least some work in DirectX, OpenGL, or Win32 programming, and has as a significant portfolio of work. This leaves professors looking to help game industry hopefuls little time to discuss things that are essential to computer scientists, like the benefits and pitfalls of functional languages, strong and weak typing, lazy evaluation, early and late binding, combinatorics, state machines and automata theory, synchronization patterns (semaphores versus critical sections), common concurrency issues and how to avoid them, and even compiler and virtual machine theory. Even if they get through all that theory, how many schools will be able to talk about the inner workings of modern chipsets, cache coherency, synchronization primitives, compiler intrinsics, and virtual memory? If you're a recent college graduate that can actually give me a definition on all of those terms, explain how they're relevant to modern computer software and game programming, and has a fundamental understanding of any modern game API, you're way better than I was when I graduated, and maybe better than I am now because I'm not sure even I could do it. And I can't tell you how much of it is important to know when you graduate, and how much you can learn either on the job, or on your own. Even the IGDA curriculum framework lists so much stuff that it would be almost impossible to push through in a 2 or even 4 year program. You have to pick and choose.

So if I can't figure it out, what's an educator supposed to do? Take a best guess I suppose. Fundamentally, though, I think they need to teach what colleges and universities have said they're teaching for years.

Teaching How To Think, How To Learn, and How To Work With The Tools

Most liberal arts colleges and universities still say they teach their students how to think. They're not necessarily teaching skills, and I like that. That's what I want from my programmers: I want them to know how to think, and, more importantly, how to learn. But there's nothing that says that this must all be done with theory, or that it should be done purely with theory. In my mind, the problem is that Computer Science and Computer Game Programming programs come out of science and math programs, and follow their pattern for how to structure classes: either 3 credit classes with focused homework assignments with little to no cross class application, or 4 credit labs where a single lab is considered enough to create a program that demonstrates theory. This is not only not enough time, but it doesn't encourage long examinations of hard topics, it doesn't encourage learning by failure, and it doesn't encourage learning why it all works the way it does.

How many schools actually look to the art world for inspiration? In most art schools, you have 3 credit studio classes, which last actually 6 to 10 hours per week, have only 2 to 3 projects per semester, and are combined with classes on fundamentals that can help improve project work. I don't think I ever had a class structured this way during my computer science education. The closest I ever got was a Software Engineering class, which wasn't really about software engineering as much as software planning, which is completely different. But, for programmers, these project classes should not necessarily be introducing new technology. At least at the start, students should work from the base competencies of whatever the school was teaching the previous semester, and early project classes should expect failure (though not say this out right), and encourage students to spend several days at the end of projects to examine their work for flaws in their design and flaws in their process, not flaws in the final product. This is where we teach students how to learn, and how to find the problems in their own work: by screwing it up royally.

In addition, I feel that early theory classes should be kept separate from those that are teaching applications of programming, especially those that are focused on programming in specific languages. However, the two classes should be linked together and move in conjunction. Each class on algorithms and data structures should be paired with the class that teaches its specific application to the language they're working in, thereby teaching both programming and theory. This I think is the major failing of most CS programs. They teach programming, usually in a specific language, and expect the students to pick up theory on the way. In the worse cases, the students return later to have classes specifically on theory, which is sometimes a repeat of what they already learned, just presented as theory instead of a feature of the specific language. By making that clear separation of learning theory and learning practice in two separate but joined classes, your students should progress faster in both. It also creates a flow in teaching and a reason to move to languages as you progress. When theory classes are ready to introduce things like how memory works, caches, cache coherency, pointers, and the like, that's when you can move your classes on programming into teaching C++. As you learn concepts in functional languages, you can start teaching ML in programming classes. As they learn the theory, they can see how it was applied in the language they're learning.

Finally, by the end of any given program, students should be spending a majority of time in studio classes, working on projects that utilize everything they've learned with frequent review of architecture and progress from their professor. However, this should be supplemented with theory classes that go beyond what they'll need to use on simple projects, like topics in programming languages, lexer / parsers, and the ability to prove algorithms correct, and include seminars in currently relevant technology and concepts (guest speaker series are great for this).

Doesn't Answer The Question

Interestingly, I'm not sure if this actually answer's Bill's questions, but it gets a lot of thoughts off of my head. I actually had an entire set of semester plans that went with this post, but scrapped it when I realized I have absolutely no experience in that regard. I can tell you what I want, which is basically separate theory and practice classes joined at the hip in early stages, followed by advanced topics in CS and software engineering paired with Studio classes. But, for me to tell you exactly how those classes should be structured doesn't make any sense.

So hopefully, without answering the question, I've been at least a little helpful.

I apologize for being quite silent on this blog recently. I've been super busy with work, personal projects, and my new blog, the Toolsmiths. In general, I'm super excited about the success of the Toolsmiths. We've been hit on reddit twice (with HUGE traffic spikes both times) and the comments have been generally excellent. I'm hoping that the momentum will continue straight into GDC, when I'll be hosting the Tools SIG roundtable to discuss the various ideas for the direction of the SIG in the coming year. The blog was a great start, and I think it has gotten people excited about the Tools SIG again by making it visible. Now we need to leverage that into community projects that can actually help the community.

As a side note, I can really only act on all of these plans if I'm elected Tools SIG chair. If you haven't voted yet, please remember to vote soon, as elections close on Friday.

In addition to the Toolsmiths, I've been working on some small side projects, including a port of Sort to XNA, and a port of Angel to XNA. I know a lot of people are interested in the Angel port, and so far it's coming along very nicely, though it does have a lot of differences from the original Angel (especially in the rendering department, obviously). Hopefully I'll have my first alpha for that available after GDC, but we shall see.

So, if you haven't noticed, this blog has been a little quiet recently.  It's not because I don't have a lot to say, but because I haven't had the time to say it.  One of those reasons for that is because I've been spending a lot of time working with the IGDA Tools SIG (which I've talked about before) to launch a new collaborative blog: The Toolsmiths!

The new blog has two other great authors, Geoff from Insomniac and Dan from Robotic Arm Software.  I'm really looking forward to the content we'll have over the next year or so, and I hope anyone interested in game tools will take some time out to read our posts.

My first post, on continous integration and build systems, will appear on Wednesday.  Hope you enjoy the new blog!

This weekend, I was fortunate enough to attend (and present at) Boston Gameloop. I was fortunate enough, partially, because it was co-organized by my boss, but that's beside the point. I presented two sessions, one on distributed version control (which I gave twice), and the other was a co-talk with me and IF luminary Andrew Plotkin about agency / complicity in games. I'm hoping someone took notes at that talk because I think it was pretty awesome, and being able to basically have a public discussion about agency / complicity with Andrew was pretty awesome. In addition to presenting, I was able to attend talks on implied ethics in game rules, see some demos / a presentation on dynamic animation of virtual actors, and spend a little bit of time in a round table on Scrum, all of which was awesome.

So all in all GameLoop was definitely a great experience, and props to both Darius and Scott who organized the whole thing. I'm looking forward to the conference occurring again next year!

Hot on the heels of me praising the Xbox Live Community Marketplace comes this opinion piece on Gamasutra that's actually fairly angry at Microsoft's practices in this regard. I definitely see his problems with the promotion thing, but almost everyone did. That was the single most asked question at GameFest, so I'm sure you'll see a change in policy about it before the fall launch, or probably very shortly after. The exchange rate issue is… interesting… to say the least, but that said, I can see how it's very difficult for Microsoft to track how points were purchased and in what country. I'm sure it hurts foreign developers a lot more than it hurts Americans though.

So, although I think a few of Ron's complaints are understandable, I think he's missing one key component of the XBLCM vision: lowering the barrier for entry so that anyone can make games for a console. As I pointed out in my last post, this is the first time any console manufacturer has ever done this, so, obviously, they may get a few things wrong. The comparisons to WiiWare / PSN I think were completely misplaced here, since hobbyists can't actually develop for those platforms without hacking around the systems. Even then, both Nintendo and Sony have tried to stop such hacks, effectively attempting to close off their console as much as possible.

So I think Microsoft took a very brave step in the right direction. Not only that, but I think it's WAY more than what most hobbyist / community game creators were expecting. To have their games "published" on an actual console, with potential for pretty large returns. I can understand the backlash from indies, since once you have a budget you can get shafted from the XBLA point of view, and price caps, royalty and exchange rates may hurt your actual prospects as a developer, but, honestly, look at this for what it is: a very positive move for creating a new caste of developer who have no budget, no team, and a desire to see their own game on a console, and maybe make some money while they're at it.

If you have problems with the rest of the system (which you should), that's something between you and the XBLA team. I feel pretty good about XBLCM.

So, if you haven't heard, Microsoft announced at GameFest that they'd be deploying a new community market place this fall on the Xbox 360, and that developers will be able to keep (up to) 70% of the revenue generated from games on the community marketplace. While not unexpected, this is pretty huge news.

Before getting on to commentary, I'd like to quickly point out how revolutionary this whole set up is. This is the first time in my knowledge that a major console company has actively encouraged (or even allowed) development on a retail console at any price (Sony had a version of the PSOne you could develop for, but it was not a retail kit). In addition, this is certainly the first time that any console manufacturer has encouraged a community in which to share those games (the Creators Club) and even more importantly, this is the first time a console manufacturer has created a marketplace where anyone can download created games and anyone can make money off of those games. Even with the fact that you are limited to a .NET sandbox, this is pretty huge, and I'm pretty excited about it.

That said, when Community Arcade was announced, and later when they announced Community Marketplace, I was nervous, though I couldn't figure out why. It struck me when I was at a game store over the weekend. There are a lot of freaking games out there now. A ton. And, honestly, 90% of them aren't any good. There are also a lot of XBLA games, and, honestly, about 90% of them aren't any good. With Community Arcade/Community Marketplace, you can be sure 99% of games on there won't be any good. It makes it really hard and frequently frustrating attempting to find those hidden gems that really make it all worth it. Certainly, community reviews, Metacritic, and similar sites help find games, but what do you do for those games that are fringe (and therefore generally ignored or given low Metacritic and community scores), but awesome? Certainly the viral aspects that Microsoft is putting in (send this to a friend and, hopefully, a rating system) will help, but even then many fringe games get overlooked because there's just too much else coming out right at the same time. I just hope that the game industry isn't a victim of its own success, having so much content that none of it makes any real money.

Regardless, I'm not sure it's an actual issue. You can be sure I'm already working on XNA prototype games. I'm not going to miss this opportunity.