Given that the definition of computer programming is so broad and the use of programs so pervasive, there actually are many types of computer programming, often defined in starkly different ways. The most basic kinds of computer programming can be broken down by the programming language — such as C, Lisp or Java® — used by the programmer. In other contexts, there are might only be two types of computer programming — system and application. Some distinctions are made between network programming, web-based programming and desktop programming. The different kinds of programming sometimes can be separated by the target platform, such as embedded systems programming, real-time system (RTS) programming or database programming.
The different types of computer programming often are defined by the language used to write software. There are many languages available, but they broadly fall into either structured languages such as C or object-oriented languages such as Java®, with both being commonly used by professionals for different tasks. Languages also can be imperative, like the previously mentioned ones, or functional, like Lisp, in which programs consist of a series of functions instead of commands. Some computer programming is done purely with scripting languages, which are interpreted human readable documents that perform operations within another framework.
There traditionally has been a distinction between two broad kinds of computer programming. The first is application programming and involves writing programs that can be directly used for some function. Alternately, there is system programming, which seeks to design programs for the management of hardware or frameworks in which applications can run, such as operating systems.
As the technology for networking and remote communications became more widely used, certain kinds of programming started to distinguish themselves from the other fields of computer programming. Network programming is considered different because of the required knowledge of network protocols and hardware interfaces. Programming web-based applications or servers requires specific knowledge of security restrictions, Internet protocols and unique programming design patterns.
There also are types of computer programming that are specific to a certain field or target hardware. Database programming involves using special query languages, scripts and other elements to interact with specific database infrastructures. Game programming involves knowledge of graphics hardware, graphics algorithms and sometimes special optimization techniques. Embedded systems, such as hand-held devices or consoles, can involve unique hardware specifications and knowledge of vendor libraries. More advanced real-time system programming can involve writing failsafe control software for nuclear power plants or military hardware.