Developer Spotlight: Dave Eberly
game software games code development experience people good engineering
If you are a regular reader of our forums, you'll recognize these are some questions that occasionally pop up - and for which it's sometimes pretty hard to get an answer. So why not ask them to industry professionals? We did.
This series (because yes, it is a short series of interviews) is just about that: asking questions to successful and sometimes famous game developers around the world, and bringing back their answers to you. It's all about experience, philosophy and game development.
So, who are you? Can you give us a brief biography / history?
After becoming disenchanted with the university system and after being in the non-games industry, I hooked up with Numerical Design, Ltd. (NDL) and produced NetImmerse, which later became Gamebryo. I have written a few books about computer graphics and physics, all motivated by the topics I encountered when developing a graphics/game engine. I had my own company, Geometric Tools, Inc., for six years, doing contract work in medical image analysis and computer graphics, but sold the company. Now I work for 2XL Games, Inc. on a game that will run on current-generation consoles. By NDA, I may not provide you with details. This company has a team of very smart and very experienced game developers. I am fortunate to be involved with them, and it is a joy to show up to work each day and interact with them.
How did you become interested in game development? What drove your interest/passion for game development at that time? What about today?
I would say that I never had a passion for games. My favorite games were the Myst series and the Syberia series (adventure games). My passion is more for game technology and software engineering. I like building things that other people can use.
Next-gen platforms, mobile gaming, massive online games... it looks like there is a revolution underway. In your opinion, what is the future of game development?
I would call this "evolution" rather than "revolution". People want more realistic games and technology that supports them, so the hardware and platforms evolve to meet that need. As these evolve, people imagine they can have even more realistic games. So the hardware and platforms evolve...
Can independent and hobbyist game developers fit in this future? What could be their role?
The cost of entering into game console development is large, especially just to get your hands on a development kit for a console. And then you have the business side to worry about--advertising, marketing, distribution. Whether an independent developer, a hobbyist, or a professional developer, you fit in as long as you know a lot. To be effective in developing games, chances are that you need to be employed by a company that has funding through a publisher, and that publisher will take care of the business side.
We had a fair amount of controversy on recent independent games like Super Columbine Massacre RPG. Do you think that games (and in particular independent games) are a good medium to express artistic, political or social messages?
Expressing political or social messages is something that occurs regularly in the film industry and in book authoring. Games are just one more outlet for such messages. I do not always agree with those messages. But no problem--I have control over which films I watch, which books I read, and which games I play. I do not like violent games, have never played them, and prefer they not be made. I also do not tell people what I think they should or should not be doing. I like developing software that people can use. How they use it is up to them. In the words of Werner von Braun: "Once the rockets go up, who cares where they come down. That's not my department."
As you may know, the audience of GameDev.net is made up of a large number of dedicated hobbyists and independent game developers. What would you say to those who want to find their way into the mainstream game development industry?
The most important thing is to learn as much as you can about computer science, mathematics, physics, graphics, and other topics applicable to games. This is true, even if your role in a game does not always include such topics. Being a generalist can only help improve the chance of your game's success. If you are not fond of the sciences, welcome to the new world of consoles with multiple processors and the ability to use multithreading. Just when you thought programming was easy...
When you design a piece of software (as complex as your Wild Magic engine), what process/methodology do you typically apply? In other words, how do you design software?
My goals for Wild Magic are on the educational side rather than commercial side. I design the software to illustrate algorithms and their implementation. As such, I do not spend as much time on testing and ensuring robustness as you would with a commercial product. I am trying to remedy this in my spare time away from game development, but testing/maintenance requires a large time commitment. No code is bug free, mine included. But as long as the code continues to evolve and be maintained, eliminating bugs is naturally part of the process. When working on commercial software, especially game software, I focus more on testing and robustness. The resulting source code does not always look like Wild Magic source code, but then again, such code is not meant for redistribution to the general public.
I also design the software to be easy to use. This is especially true for the real-time graphics part of the Wild Magic code, choosing to give up some performance for ease-of-use (and for portability). Designing an efficient collection of interfaces that are reasonable and easy to use is not always an easy task. I have seen a lot of software where the interfaces were chosen to be what the programmers *thought* was the way clients would use the code. In practice, they find out that the clients have a much different idea of what the code is supposed to do, and the initially provided interfaces just get in the way.
I prefer a layered approach to interfaces. The top-most layer is the easiest to use and satisfies most users. If the users want to get more control and get into the details, they can drill down through the layers, each layer presumably more complicated than the previous one. Naturally, you do not want to have a large number of layers, because that makes the code difficult to read and understand.
Finally, I try to design my code knowing that it possibly needs modifications or new features later. This amounts to anticipating where those changes might be needed and designing the initial pass so that when the changes are needed, the amount of work required to do so is minimum and disrupts the least amount of related code. Effectively, this has to do with the object-oriented concepts of modularity and continuity.
If you were to chose only one of these three possibilities, which one would you consider to be the most important for a game programmer: a solid math/physic/formal knowledge, good software engineering skills, or a solid experience in the game industry? Can you explain why?
From my experiences, you really do want ALL THREE. You need the technical skills, because 3D games inherently need them. Good software engineering skills are important, because a game is a large project, and the team needs to protect the integrity of the source code and art assets. Experience in the industry is also important, because you have to know how to make trade-offs that balance quality software versus meeting milestones and getting the game out the door. You also need the experience to know what the problems are going to be, especially knowing the limitations of game consoles (slow disk loading, limited memory, dealing with the usual multithreading/multiprocessor issues, etc.).
That said, I would vote most for good software engineering skills, at least to get you started. The technical skills can be learned along the way. Experience is gained, well, with experience I believe, though, that many people in the industy would rank experience *before* good software engineering skills. I believe that one should never argue, though, that having a lot of experience frees you from having to use good software engineering practices. The bottom line is that if you are sloppy with development, you will get bit in the arse.
My slant towards good software engineering practices is that when such practices are not used, maintenance and finalization of the game code/art (*end* of project) are more difficult when attention has not been paid to them at the *beginning* of the project. The end of the project is a time when you really want to focus on eliminating all the bugs and problems so that you can ship a robust and solid game. If the code/art is well maintained at the beginning, the bugs and problems are easy to fix. Regarding maintenance, if you are sloppy in building the game framework at the beginning and you find out later that your choices led to bad consequences, it can be a nightmare to rearchitect what you have. The process of rearchitecting will be disruptive to the entire team, potentially causing you to miss milestones or even the deadline for releasing the game.
What is one secret you would like to share with our readers?
My stock answer to this question is: "There are 2 rules to success in life. Rule #1: Never tell people everything you know."
Seriously, though, I have no secrets. Learn as much as you can, and never shy away from topics that scare you. Work hard. Eat healthy food. Exercise regularly. It works for me