Different types of computer programming software are involved with each phase of the development of a new program. Compilers perform the essential work of translating human programming languages into machine language that can be processed by a computer. Other software can be used to aid in debugging and in monitoring the efficiency of a program at performing specific tasks and using system resources. Integrated development environments combine several of these varieties of computer programming software into a single cohesive product.
The most basic variety of computer programming software is the compiler. Programmers write code in a programming language, such as C++, Python, or Basic. This code can typically be written using any type of text editor, although dedicated editors that provide color-coding and check for technical mistakes are very helpful. Once this source code has been written, a compiler is used to translate it into language that can be directly executed by a computer. In some cases, a decompiler may later be used to translate a program back to source code readable by humans.
Debuggers are a useful and common type of computer programming software. A debugger allows a programmer to test and monitor his code. Most enable source code to be partially compiled and executed. This permits the debugger to monitor the values of variables, to check the targets of pointers, and to show a programmer precisely which instructions are being executed at a given moment. This ability to step through code line-by-line makes tracking down small errors much easier.
Programmers also rely on applications that monitor the accuracy of their work. Some programs run different values through a program to ensure that it generates the correct responses, especially in unusual or marginal cases. This is especially helpful in determining what happens when a user provides improperly-formatted input or input that falls outside of the expected ranges of values.
All programs make use of system resources, and some computer programming software exists to track the efficiency with which those resources are used. These programs allow for the detailed examination of memory management, disk access, and network use, among other things. These tools are particularly helpful for programmers designing applications to work on mobile devices where resources may be especially scarce.
Integrated development environments are very powerful and popular tools. This sort of computer programming software combines purpose-built versions of several different programming tools. A typical example might include an editor for writing source code, a compiler, a debugger, some tools for memory management, and a program to automatically generate a rough draft of documentation explaining the functioning of the software.