I launched the Game Programming Gems book series in 2000, and it quickly became a popular source for credible technical information on game programming: written by programmers, for programmers. Each book contained 40-70 short chapters, or “gems”, with each gem tackling a common game programming problem. By encouraging professional game developers to share their hard-earned technology wisdom with others I hoped that it would free all of us up to focus on greater problems. No more re-inventing the wheel! The series grew over time to include 9 books (Gems 1-8 and a “best of” volume), and a number of other great books have spun off from the series over time.
Long version of the history of the books
In the late 1990’s game development was still by and large an arcane branch of computer science passed along via apprenticeship more often than through individual study. At that time the Nintendo64 and PlayStation game consoles had both been on the market for a few years, with the Sega Dreamcast becoming the hot new game console on the scene for a brief period of time. PC games were distributed via CD and DVD, not via the Internet. Most video games were 2D, but primitive 3D graphics had recently arrived, and the transition from 2D games to 3D was a bumpy one for game developers. Programmers found themselves suddenly needing to wrestle with linear algebra, 3D camera control systems, and hierarchical articulated character skeletons.
For people interested in learning game development, resources were scarce. One could certainly learn programming languages such as C++ or Pascal from books or courses, but modern information about game-specific algorithms for artificial intelligence or animation was hard to come by. Few game development books were on the market, and those that were available focused on specific technologies such as Macromedia Flash, or Microsoft’s DirectX. The Internet weblog (“blog”) had only recently been created, and had yet to gain real prominence, so programming resources on the Internet – let alone game programming resources – were also very thin.
I had come to the game industry in 1993, and joined Nintendo in 1995, bringing a background in 3D computer graphics and real-time algorithms. At Nintendo I became part of the team building up the platform for Nintendo64, specifically seeking to help game developers grapple with the challenge of real-time 3D graphics. The Nintendo64 was the first game console specifically designed with a focus on 3D, and game developers were not at all used to it. During the early prototyping stages of hardware development I spent most of my time looking at ways to smooth the on-ramp for game developers, to help them more quickly understand the Nintendo64 hardware architecture and use it effectively to create 3D games.
By 1999 the Nintendo64 was well established, and most game developers working on the device had shipped several 3D games. But new game developers were still coming to the Nintendo64 and wrestling with the same challenging concepts. Game developers on the PC were also now fighting the same issues, due to the rise in popularity of 3D graphics cards for the PC during 1998 and 1999. Learning the techniques of game development was challenging enough, but now joining the game industry meant needing to overcome the additional hurdles of understanding the complicated math required by 3D – and this was off-putting to say the least.
There were two bright spots for people seeking to break into game development at that time: Game Developer magazine and the annual Computer Game Developers Conference. As a small monthly publication, Game Developer magazine introduced just a few technical articles to its readers each month, but the pieces were well chosen and well written. The annual conference was an oasis for programmers, but as it happened just once a year, and was rather expensive to attend, its impact on the industry was muted. Yet, the tome of presentation material produced for each year’s conference proceedings was invaluable.
How could we spread the much-needed expertise of the game developer community as communicated through the magazine and conference more widely, and at lower cost? The Internet was not a well-established place at the time for sharing substantial technical information – that role belonged almost exclusively to books. But game technology had expanded to the point where no one person could be an expert in the breadth of it, so who was going to write the canonical game programming technology book?
In late 1999, after writing a successful article for Game Developer magazine on an implementation of curved surfaces for the Nintendo64, I thought hard about this dilemma and pitched a solution to book publishers – what if we could gather the best programmers from each area of game development, and have them write articles sharing what they’d learned during the process of making games? In this way, we could create a single resource spanning all of game development, which aspiring game programmers could use to give themselves a head start and perhaps break into the game industry. We could create a book that would give the reader a base level understanding of all the technology required to build a game, freeing them to spend time thinking about the more complex algorithms they would build on top of it. In the mid-1980’s a similar style of book had been created for the computer graphics industry (“Graphics Gems”), and we adopted it as our model.
We composed the book “Game Programming Gems” over the next nine months, launching in August 2000. With 70 articles, from 40 authors, the book covered a base level of knowledge for most game programming topics. Almost none of the authors had written an article before, so the creative process of building the book was challenging, yet the final result proved to be powerful. The CD which accompanied the 600-page book contained a wide variety of production-ready code written by the authors, useful for everyone seeking to jump into game programming.
“Game Programming Gems” was very well received by the game development community, and the book was quickly translated for the markets in Japan, Korea, Poland, and Germany. A Chinese translation was done as a labor of love by a Chinese student, and was also later published as a book.
The “Gems” book was a success financially, and became a book series, with eight additional volumes created in the following decade. But a more substantial and noticeable impact over time was the cumulative effect of many “Gems” authors writing new articles and books of their own. Some of their books were modeled on the “Gems” format, and some also became successful book series. In fact, as game programming became more and more highly specialized over this past decade, the field-specific books created by some of the original “Gems” authors, such as “AI Game Programming Wisdom” (artificial intelligence) and “ShaderX” (graphics) performed exceptionally well, becoming long-lasting book series with avid followers who work specifically in those sub-fields of game programming.
Now, the Internet provides us with exceptionally high availability of all manner of technical information. Aspiring game programmers have an incredible amount of educational material available to them. For most game developers, the Internet is the most likely place they will spend their time learning their craft. The role of books is to provide hand-selected overview material, or well-edited and well-researched papers on new techniques. The “Gems” series, once an only source, has become simply one of many. But the evolution of the “Gems” series – and its siblings – over the past decade, will always serve as a detailed historical record for the evolution of game programming during a formative period of the game industry. My hope is that what once was educational for people breaking into the game industry becomes valuable again to people seeking to learn how the industry evolved.