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 massively multiplayer online games (MMOGs), knowledge of additional areas such as network programming and database programming are required. Though often engaged in by professional game programmers, some may program games as a hobby.