Game programming, a subset of game development, is the software development of video games. Game programming requires substantial skill in software engineering and computer programming in a given language, as well as specialization in one or more of the following areas: simulation, computer graphics, artificial intelligence, physics, audio programming, and input. For multiplayer games, knowledge of network programming is required (the resultant code, in addition to its performance characteristics, is commonly referred to as the game's netcode by players and programmers alike). In some genres, e.g. fighting games, advanced network programming is often demanded, as the netcode and its properties (e.g. latency) are considered by players and critics to be some of the most important metrics of the game's quality. For massively multiplayer online games (MMOGs), even further knowledge of database programming and advanced networking programming are required. Though often engaged in by professional game programmers, there is a thriving scene of independent developers who lack a relationship with a publishing company. Development process 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 experiments. For example, game designer Will Wright began development of The Sims by getting programmers to experiment with several ideas. Prototyping 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. Game design Though the programmer's main job is not to develop the game design, the programmers often contribute to the design, as do game artists. The game designer will solicit input from both the producer and the art and programming lead for ideas and strategies for the game design. Often individuals in non-lead positions also contribute, such as copywriters and other programmers and artists. Programmers often closely follow the game design document. As the game development progresses, the design document changes as programming limitations and new capabilities are discovered and exploited. Production During production, programmers may create a great deal of source code to create the