I recently visited Cambridge University and spoke to some of the lecturers, researchers and visiting school teachers there about the teaching of computer science. It has been a long time since I was studying computer science at university. During that visit I volunteered to help to write a user manual for the Raspberry Pi so that anyone, ANYONE, that gets one can have a go at using it to learn about computing. Since I started, it has been so very tempting to write a section on “How to Make a Video Game” but I don’t think is the best start to learn about computing.
I re-read the Livingstone-Hope report (Next-Gen.) and watched the promotional videos. I was really encouraged by it initially but in hindsight it seems to put forward the picture that skills in art, maths, physics and some programming are needed for a job in game development and visual effects. The emphasis on computer science seemed to be lost in favour of programming skills in association with other sciences. As a post-doctoral computer scientist I was a little aggrieved. I began to think that after 16 years of making video games I’ve lost an appreciation of where computer science fitted into video game developer.
After doing some research and talking with some ‘real’ computer scientists, I was reminded what defines computer science. Simply put, it is the study of the application of algorithms to data. As Niklaus Wirth’s book was entitled, “Algorthms + Data Structures = Programs”. When we write a program, we are simply manipulating data and presenting the results. Consider the famous Turing Machine. Computer science takes the ideas we have to manipulate data and wraps rigorous methods around them. Methods for the creation of machines and techniques on those machines that enable processing of data.
Computer science is pure discipline like mathematics, physics, chemistry, biology, and so on. However, an understanding of computer science is not required to become a video game programmer. This is, perhaps, the reason that having other skills like maths and physics (depending on the game genre) is really important to game development teams. It is when these disciplines are married to computation thinking, that a great video game developer emerges.
Computational thinking is something exercised through our attempts to understand computers. As a scientist formulates an algorithm for processing quantities of data to convert it in an alternative and more useful form, they are thinking computationally. If they can get create or utilise a machine to enact this algorithm they can apply new data to the algorithm to get new results. This ability to understand how data and algorithms work together is what benefits us to get optimal results during game development. Although we mimic physics and utilise mathematical methods, good computer scientists in the game development team will be able to take abstract problems outside these domains and invent new ways to manipulate the input data stream to get desired results.
While I am happy to say you do not need to be a graduate computer scientist to develop video game programs, I think it will help you become great at it. The best video game programmers are those that have either an innate ability to develop algorithms through computational thinking, or have exercised their ability through the study of computer science.
I would recommend that anyone considering or even undertaking a degree in computer game programming or game technology or similar, review what that course is offering with respect to computational thinking and computer science. Similarly anyone currently involved in computer programming of games (or anything else), consider how much you are exercising your computational thinking. You will grow and develop as a software engineer if you do.
Finally, while writing the Raspberry Pi manual, I am very aware of the “excitement quotient”. That is, the tendency to chose topics that are exciting over those that are computationally challenging, just to capture an audience. While it casts a wide net to catch those that would enjoy computer programming, I feel it is dangerous for us to encourage them too much down the learn a programming language route. To look for a metaphor, it is akin to encouraging future building architects to learn carpentry, bricklaying and roof tiling. They will have the pure skills to build some of a house but they could never understand the whole house building methodology. Dijkstra famously remarked, “Computing is no more about computers than astronomy is about telescopes.”. Inventiveness keeps us successful, and without it we will have many people that can create software to order, but they cannot push the boundaries of computer technology
So, if you want to be a highly sought after engineer in a video game studio or visual effects house, take a degree in computer science, exercise your computational thinking ability and apply that to innovating new game development technologies. Avoid a narrow minded approach by learning only programming in C++ with DirectX (say).
/end of line