I’ve been thinking this week about young people looking to get into the games industry, this is mainly as we’ve had a couple of really great work experience students working with us in the office and also I’ve been doing a couple of talks at schools in our area.
I wanted to make games from the moment I got my first computer at 5/6 years old and was lucky enough to be able to teach myself BASIC through to C++ as I grow up first with the CPC and then early PCs and the internet in the very early 90s (IRC, the demoscene, newsgroups).
It’s always interesting to think about how we’re going to educate people wanting to join the industry and also what to say to young people asking what their best path would be.
The current popular path (based on CVs we receive – for programmers) is a games development course at University, in some cases with a computing course in the final years of high school perhaps covering Visual Basic or perhaps Java. For the most part though these people tend to be writing their first line of code only 3/4 years before entering the industry.
I want to say there are still people learning and coding at a much younger age (certainly the 15 year old student we had work with us this week has been programming in Flash/AS/PHP a while and was keen to learn C++ and Lua with us).
I’d like to look at a current state of play for young people wanting to learn to develop games (this has a programming tint to it apologies). I’m going to try and come up with good / bad points on the various areas to balance things out against how I found things while learning.
Obviously a massive resource of everything games development / programming related over the last 20 years, very cheap to access (even if that happens to be at a public facility like a school or library) and available everywhere with modern mobile devices.
- Access to free tools (GCC, XNA, Unity, Python, Lua, everything Open Source), tutorials and Q&A, features on games development.
- A huge community of other people learning and wanting to collaborate on projects and to encourage others.
- The ability to publish and make money via digital distribution.
- Copy + Paste culture is encouraged, googling a particular problem is likely to come up with working code and I’ve spoken to people currently learning programming admit that they’ve copied code without completely understanding what it was doing. In that particular case when they later had problems with that code they learnt the lesson about actually understanding everything they add to their project but I think we all know of people relying on Google way too much.
- Other distractions on the internet! WoW and online gaming (Minecraft!) not to mention Facebook procrastination. I used to pay for every minute of internet access so I made sure I spent my time well when online
When I was learning to program there were still lots of languages but I had to purchase compilers via shareware discs (charged per disc) so I stuck to Assembler + C. My first language was BASIC. Nowadays there is a huge variety of languages to choose from as a new programmer (despite C++ still being the primary development platform).
- Huge amount of choice is good in that people can find something that fits with their understanding or that provides the easiest learning experience. Once you have mastered one language moving to others is a lot simpler process.
- Experiencing different styles, concepts and patterns is good for your overall programming knowledge and helps you apply the best tool for the job.
- Choosing a bad language (in terms of your career) and sticking with it. This can make you end up with a set of portfolio apps that bear little relevance to the industry.
- Not mastering one particular language and just having an ok understanding of several may not help in terms of applying for jobs.
This is an area I don’t have a huge personal experience with, I planned to go into university education as a path into the industry but was fortunate enough to be offered a great job and felt that experience was worth more than education anyway (which I still believe funnily enough!).
From the point of view as a recruiter though :-
- University courses are constantly improving and in the UK at least there are moves by government and trade associations to link industry to academia.
- Industry experts are actually working more closely with universities in terms of guest lectures and we’re seeing a lot of industry veterans moving into teaching.
- I’ve seen signs of some programming being taught later on in high school and apparently LOGO Turtles are still used in primary education (controllable robots via a simple movement / pen drawing interface).
- At university level there still seem to be a lot of formerly ‘media production’ courses that are just being renamed to ‘Games development’ just to get the numbers on the courses up.
- I’d really like there to be more focus on programming / logic development at a younger age, technology is everywhere in young peoples lives and a better understanding of the logic (whether it’s through simple electronic teachings or focused on programming) would be great.
There are a huge amount of platforms and genres available now.
- There are truly games for everyone whether you prefer social games on PC, motion controller based party games or more traditional hardcore FPS games. This gives us a bigger audience of young people wanting to get into games – which hopefully includes more female developers as well as males who wouldn’t previously have been interested in games development.
- Successful (simpler) iPhone titles can be seen by people as something they could feasibly make themselves given enough time.
- I’m not sure how much of a problem this is but modern AAA games are so big with such huge budgets that perhaps getting involved with the development of them may feel out of reach to them.
Modern computers / Operating systems
This is the usual reason that gets discussed with learning programming now versus 20 or so years ago.
On pretty much every platform you were first presented with a command prompt of some kind and even running a game from disc / tape required you to enter a command. Most users nowadays wouldn’t even know about the command line let alone understand any of the goings on behind the applications they work with. The bad points to this are kind of obvious but at the same time without this uninviting command prompt (to the majority of the public) home computers have grown in popularity to make the industry what it is today.
This is by no means a full analysis of the state of things but just a few areas I’ve been thinking about, young people with the determination can easily develop their skills quickly and they have access to many experienced professionals and equally intelligent amateur developers via the internet. With better education the future should be bright for the new talent entering the industry both in terms of AAA studios and the independent teams.
Things we’ve been enjoying this week
The last few weeks we’ve been working on the initial version of a Game Design Document for a new project we’re working on.
We’re pretty much required to produce one for our publisher as it’s important to communicate the project as the game was signed off a higher level concept. It’s also very useful to us internally though as it helps us run through the ins and outs of the mechanics and the balancing issues that we’ll be facing on the project.
The topic of usefulness of GDDs has come up in recent weeks on a few forums, spawned by Sean Murray of Hello Games calling them insane (for their team and possibly he meant for Joe Danger) http://www.eurogamer.net/articles/2010-10-02-hello-games-design-docs-are-insane
My current opinion on GDDs would be
- It’s very useful to write down ideas, it helps identify issues before you start coding which you might have missed in your mental map / whiteboard discussions or even prototypes (depending on which way round you’re doing things). Also some people’s brains are wired so that actually writing down or voicing an idea makes them analyse it in a certain way. I certainly find this with difficult coding issues that talking it through with someone I’ll sometimes realise I’ve got an answer locked away.
- Having a GDD makes it easy to send out to contractors and to give to employees new to a project. They can quickly understand the full project, the designers intention and the planned implementation for it.
- Linked to the above point it’s vital for providing to QA teams who need to verify that things are functioning as they’re intended, especially in terms of edge cases with particular mechanics.
- And as I originally stated they’re almost required for certain projects to provide to everyone from our external producers, external marketing and business teams (who need to understand the game early in the development process to plan / look at possible opportunities) and lawyers to understand what we’re aiming to pull off with the project.
- The biggest problem with GDDs is the amount of change that occurs especially in early development and the GDD not being updated to replace it. This effectively gives GDDs a use-by date after which you need to take it with a pinch of salt. Companies tend to use wikis and other live documentation systems to counter this but unless someone is actively maintaining it things can still easily slip when more important production tasks come up.
- Even worse than not updating the GDD is people not actually reading it! The initial GDD I’ve been writing is 50 pages in total (and will get longer as information on particular items and NPCs is inserted) and more than a few read-throughs could be time consuming. Highlighting changes and structuring the document well for referencing is essential to aid with this.
- Wasted development time – writing / maintaining / reading the GDD could be spent just developing, testing and iterating on the project and for smaller teams as Sean mentioned this can be a much more efficient route.
Iteration is vital to the design process which Sean hinted towards, you can’t just write down the recipe for the game you need to actually cook it (and then experiment).
We’re fortunate in that we’ve organised our current pre-production to occur before we deliver what we deem to be ‘THE’ GDD and TDD for our project, this should hopefully get us closer to the line on the documents than we normally would be at this stage in a project.
Personally I find the writing and structure elements of GDDs the hardest. I’ve regretted going from OneNote to Word too early in the process – a few days were spent cutting + pasting parts around the document trying to get the flow of things right.
It’s also important to keep a consistent writing style to allow easy reading and also getting across the fun of what you’re describing (especially when selling the idea to marketing who may not be as invested in the project at an early stage). I’m not sure how well I’ve mastered this yet but fingers crossed 😉
Hopefully I’ll be able to talk a bit more about our pre-production process over the coming weeks.
Things we’ve been enjoying this week
- A great post by industry veteran Simeon Pashley showing the breakdown of costs involved with running a games studio. He has stolen one of my future blog post ideas but I couldn’t have done as good a job as he has
- This shows how much being a solo dev working from home / remote team can earn you extra on a title with decent sales. There are benefits to having and running a studio however which is why we still do!
- EA have open sourced their WebKit implementation which also includes some of the EA STL. I presume they are forced to due open source a lot of this due to some of the viral source licenses in there. Looks like they’ve packaged it nicely and pushed it out to the public though which could be useful for some people.
It’s been a bit of a crazy week again over at FDL towers (I *say* tower – we’re on the top floor of an office building) and I left it late to decide on a topic for this week while we hold off a little more on talking about our current projects!
Looking back on the previous posts the open source libraries and sales posts were certainly very popular so along similar lines I’m going to talk about a couple of sources of useful code snippets (and slightly larger) I’ve found around the web which could be good reference for learning or even directly solve a problem in certain situations. As always be aware of license stipulations with any code you’re using online however. Again this isn’t by any means a complete list but hopefully a couple will be new to some of you!
- Bit twiddling hacks – some very useful bit twiddling tricks that you may not be aware of, some of these operations now have specific instructions for them on chipsets but these are still a fun set to look through and hopefully understand
- John Ratcliff’s Code Suppository – posted in the open source libs post and some of these are slightly larger than snippets
- Paul Nettles memory manager, a drop in debug memory manager which was has been popular for a very long time, we certainly got some ideas from this for our own debug memory manager and we still rely on these occasionally today when we run into issues
- A blog I’ve only discovered recently but has a very well written ‘efficient Gaussian Blur’ article with code . Look forward to some of the other posts over there.
- Another memory manager related blog, the BitSquid guys are posting some very interesting content and I thought this one on custom memory allocation could be useful
- A very neat looking UTF-16 <-> UTF-8 en(de)coder, haven’t tested but the results look fairly well investigated.
- Saw a link to this the other day, a single header command line option parser with pretty much all the features you’d ever want
- Another recent discovery, a GLUT alternative for Linux, Windows, Mac called PEZ
Couple of the big boys now..
- Microsoft – Some of the DirectX SDK code is a little scary side in terms of the handling of certain Win32 edge cases (in terms of handling input/windows/resizing/multiple monitors) but if you’ve not had to work through the pain yourself before you should check out the DX SDK for tips. Of course it’s a great reference for certain graphic techniques as well
- PowerVR – Providers behind a lot of the graphic / combined chips used on our modern smartphone devices, the SDK contains some useful reference code and emulation for PC
- NVIDIA – As well as PowerVR there are some great references (and free online versions of the very good GPU Gems books) at NVIDIAs developer site
- ATI / AMD – Took me a few seconds to track down the right page but ATI have also always worked very openly supporting developers
- GameDev.net still looks to be going strong and has some good articles / snippest within the reference section
- Stackoverflow is a very popular site and for non-games work I’ve done it’s normally shown up issues I’ve encountered higher up google searches than the iPhone reference materials. Note there is also a game developer stackexchange site (i.e. based on the same system as stackoverflow) which will hopefully increase in quality overtime.
- Mike Actons site CellPerformance including his concurrency and data design sketches, a very good read if you’re thinking about highly optimal code writing.
- Charles Blooms blog – previously mentioned this in the things we’ve been enjoying list but looking at my Google Reader profile I probably ‘star’ more of this blog than any other, some really interesting insights
- Paul Bourkes geometry, surfaces, curves , polyhedra page – a great reference
- GafferOnGames – Some great notes on physics and networking from Gaffer (Glenn Fiedler) someone I remember hanging around with on IRC many moons ago
- Emil ‘Humus’ Perssons pages – lots of different graphic technique samples for DX and GL.
- Wolfgang Engels blog – less in terms of code snippets but some great graphical technique discussion and even includes a few iPhone tips
- Bit of a shout out for iDevBlogADay as well here as it’s getting some really high quality posts, I was about to list some favourites but I think there have been so many high quality posts recently it would be unfair!
Not so small snippets
- Aras Pranckevičius has two great projects available from his great work on Unity, both very useful and ones I’m hoping to integrate with our work very soon
- Lock-free structures library, looks pretty interesting.
- .mischief.mayhem.soap.blog written by Maciej Sinilo contains some really interesting articles and some useful looking code snippets including a Win32 crash reporting, memory tracing system, his own ‘STL’ type classes and thread pool job system.
Things we’ve been enjoying this week
- Surviving Oktoberfest and not being thrown out of iDevBlogADay by mysterycoconut for my unfinished scheduled post on Saturday.
- Google announced webP this week a new image format for the web using VP8s intra frame encoding to encode static images as an alternative to JPEG. Jason Garrett-Glaser is one of the x264 developers and writes a great blog in which he’s posted about this as well
- Canabalt tuning article from Semi Secret
Just a bit of a news update, You Are The Ref 1.1 update is out today featuring Game Center (and AGON as fallback), Retina Display, an Art Gallery and more.
Also we’ve been working with Microsoft the last few months to bring our hit title QuizQuizQuiz to Windows Phone 7 and that will hopefully be available very soon to you all.
UPDATE: Many apologies to everyone involved with iDevBlogADay, I drafted this post earlier in the week and planned to update before Saturday from Germany however due to lack of decent connectivity, the correct EU plug convertor, WordPress app fails (and possibly beer) this didn’t occur! Won’t happen again!
A little bit of an apology to start with, this week isn’t normal service!
At the time this post is going live I’m in Munich in Germany enjoying the Oktoberfest beer festival and so haven’t had time for my usual Friday night sketching out of the post and Saturday morning fleshing out. Hopefully I’ve built a bit of credit up with some fairly lengthy posts the past few weeks!
This weeks post is going to be based on a Facebook thing doing the rounds, with a maximum of 15 minutes you need to list in no particular order 15 games that will always stick with you. I’m preparing the basis for this post on Wednesday night and imagine I’ll be rewriting this list of 15 a few times, I’m going to try and be true to myself rather than go with what I should be writing down though
I presume whoever started the idea didn’t intend for game developers to write their lists, I think we’ve all got some game projects which will always stick with us (for better or worse!!)
In no particular order!
1. Counterstrike Beta
2. Everquest (PvP)
3. Eye of the beholder
4. Dizzy games (all of them)
6. Day of the tentacle
7. Dune 2
9. Indy 500
11. Championship Manager
14. Return to Zork
15. FIFA ’96
I don’t want to reduce the rest of iDevBlogADay to similar posts for the week but it would be interesting to see a few of the other contributors if they get a few minutes at the end of their posts this week!
Thanks for reading!
Things we’ve been enjoying this week
- John Carmack trying to kick off a TCR list for iOS games, something I’ve been begging Apple to force on us for a while (so that we can actually test against the same list they are and be more sure about whether we’ll be approved or not!)
- Khan Academy is an awesome teaching resource and this last week it received funding from Google to produce more content. If you’ve not had a look before I really recommend it.