Do you think that old programming practices have caused people to fall into bad habits that make working on modern architectures harder?
It's interesting, because I think that probably the oldest programming methods are the most relevant today. It's the habits over the last five or eight years that are struggling, and it's interestingly the people that are more recently out of school that are going to have the most trouble, because the education system really hasn't caught up to how the real world is, how hardware is changing and how development is changing.
The kinds of things that they're teaching specifically about software as it's own platform is teaching people to abstract things and make them more generic - treating software as a platform, whereas hardware is the real platform - but performance, and the low-level aspects of hardware, aren't part of the education system. People come in with a wrong-headed view on how to develop software. And that's the reason why Office 2007 locks up my machine for two minutes when I get an e-mail.
So you think universities should be putting more emphasis on parallel and heterogeneous processing?
I think we're finding that in the past couple of years universities have started to address parallel processing - MIT and Georgia Tech both have good programmes - so we're starting to see trends there on that. As far as low-level programming, yeah, I'd like to see that covered - you have a lot of people leaving school now who not only have never written any assembly but don't even understand how it works in general.
They use a high-level or compiled language, and it’s like a magic box to them. But it's something that as a professional programmer you should know - it should be part of the job description - and I think fundamentally what's missing is an understanding of hardware and how it works and how it fits into the programming ecosystem. So maybe what they should be blending is an electronic engineering degree along with a computer science course.
Insomniac is now on its third-generation PS3 game - what lessons have you learnt during the development of Resistance and Ratchet & Clank Future: Tools of Destruction that you're now applying on Resistance 2?
It's a lot of little things, right. I mean, we had an idea of what to expect with the Cell before, but there were definitely some hard-learnt lessons. One that I can think of is to not treat the SPU as a co-processor. It's not a way to take work off of the PPU, that's a wrong-headed view of the SPU - it's all about programming for the SPUs first and putting stuff on the PPU only when necessary. You don't use the SPUs to optimise the PPU.
What do you think separates a first-gen title from a third-gen title on the PS3?
Certainly the amount of work we're doing on the SPUs. Probably what would be an interesting point is to look at engines as they're developing on the PS3, because the PS3 is so flexible on what kind of work you would do on the SPUs, how you would design for them - I think we're starting to see a lot of distinguishing features between second- and third-generation PS3 titles.
Uncharted, which was developed by our friends at Naughty Dog, who we share a lot of stuff with, is a very different game from Ratchet, not from a gameplay point of view but technically – the things they do and the things they optimise are very different from us. I think we'll see a lot more distinguishing features in the sorts of things people do as we get further into the PS3 lifecycle. And from our point of view, it's just sheer volume of things that we're doing. We're just doing a lot more interesting things, and that gives our artists and designers a lot more choice, which is a good thing obviously.
Insomniac is independent but has always stayed loyal to Sony platforms - do you think that specialisation allows you to get more out of the systems?
I've read some internet chatter, and seen that people say 'It's great that this works for Insomniac, but it wouldn't fly if it was cross-platform games, because they're totally different.' The truth is, though, that we weren't born in Insomniac - most of us worked somewhere else before we came here, and as a company and a group of developers we do understand cross-platform development.
In general, we're in agreement that if we were doing multi-platform we'd approach in much the same way. So I don't think it makes as much of a difference as some would like to think it does, it's that sort of 'it doesn't apply to me'-syndrome. If it's an idea that's different, unconventional or controversial, people will say that it doesn't apply to them by looking at the differences between us and them.
But at the same time, yes, of course, we can concentrate all of our efforts on one platform, so that's more energy concentrated. There's no arguing that. But at the same time, we like this platform, we're excited about it - everyone here is a big fan of the PS3 and of the Cell architecture of particular, so I don't even know if we'd want to do anything else right now.
The vast majority of our lessons have been general - getting used to parallel processing, working on small memory footprints - these are the sort of fundamental lessons that'll be applied going forward no matter what the hardware looks like in the future - and certainly are applicable to any platform now.
In fact, I'd go as far as to say that if we went back in time and re-did our PS2 engine, we'd be able to take a lot of these lessons and make an even better engine. So sure, of course, there's stuff that's particular to the PS3 - low-level SPU assembly, specific things for the DMA controller, that sort of thing - but we can practice learning hardware, and the ability to learn hardware is a skill that engine programmers need, and the more you do that the easier it is to do that the next time.
[img :244]Mike Acton is engine director at California-based Insomniac Games. He also runs CellPerformance.com, a website dedicated to techniques for getting the most out of the Cell processor. For the previous part of this interview, click here.