Game programming, a subset of game development, is the software development of video games. Game programming requires substantial skill in software engineering as well as specialization in one or more of the following areas, which overlap heavily to create a game: simulation, computer graphics, artificial intelligence, physics, audio programming, and input. For massively multiplayer online games, additional areas, such as network programming and database programming are often included. Though often engaged in by professional game programmers, many novices may program games as a hobby.
Professional game development usually begins with a game design, which itself has several possible origins. Occasionally the game development process starts with no clear design in mind, but as a series of experimentation. For example, game designer Will Wright began development of The Sims by getting programmers to experiment with several ideas.
Programmers are often required to produce prototypes of gameplay ideas and features. A great deal of prototyping may take place during pre-production, before the design document is complete, and may help determine what features the design specifies.
Prototypes are developed quickly with very little time for up-front design and mostly act as a proof of concept or to test ideas. They are not expected to work flawlessly, but are developed to try out new, sometimes exotic, ideas.