from Wikipedia, the free encyclopedia

Programming (from ancient Greek πρόγραμμα prógramma "publicly and in writing announced message, command") refers to the activity of creating computer programs. This is a part of software development .

Computer programs are formulated (“coded”) with the help of a programming language. The programmer 'translates' the given requirements (e.g. in the specification sheet ) and algorithms into a desired programming language. Code generators are sometimes used for this , which automatically generate parts of the program code on the basis of models (which were created in the design).

When programming, essential aspects of software quality must be taken into account and implemented through the design of the source code. See as examples: programming style , usability , reusability / modularity , maintainability .

In addition to creating code, 'programming' in a broader sense includes numerous other activities, such as testing (developer test) the program or creating programming documentation . Delimiting the notion of programming other activities can be adapted for software development, such as the project management , the requirements analysis or data modeling .

Depending on the procedural model used , the programming activities run in project phases separated from one another , in parallel or iteratively. In practice, programming is often done in teamwork, with modern development methods (such as agile software development ) and programming tools .

Similar meanings: Colloquially, the configuration of household or other electrical devices is sometimes referred to as "programming". Also organizational units of companies where software will be developed, or were named in part "programming".


Charles Babbage described a programmable machine, the Analytical Engine , in 1834 , which, however, was never built. In 1843, Ada Lovelace translated an originally French description of the Analytical Engine by Federico Luigi Menabrea into English and added her own notes. These notes included a tabular plan for calculating the Bernoulli Numbers, what is referred to as the first program. In 1941 Konrad Zuse realized the first program-controlled calculating machine with the Z3 , and from 1942 he developed Plankalkül, the first high-level programming language . In 1949, mathematician Grace Hopper created the first compiler that translates source code into machine code.

Quality criteria

The quality of software arises to a large extent in the context of programming activities, especially regarding the following quality criteria:


A program must correctly implement the specifications made in the draft. To do this, it usually has to be error-free, whereby two different types of errors usually occur during programming:

  1. Syntax error : Incorrectly formulated source code - you use formulations or constructs that do not appear in the programming language used (typing errors, ignorance, ...). Syntax errors can be detected by the compiler / interpreter or parser during compilation and prevent i. d. Usually the program execution.
  2. Semantic errors: The program does not behave as desired because the algorithm or its implementation may have been incorrect. Semantic errors can usually not be recognized automatically, but only found through conscientious testing - for example in the form of unit tests .

The transition between these two types of errors is fluid. For example, a typo in the code (e.g. ">" instead of "<" in a comparison command) will result in a valid executable program, but the result is likely to be incorrect. Elsewhere, the same error could be a syntax error.


Statistically speaking, most of the time is spent developing code in order to react to errors or unusual application or hardware environments. A program text that reacts sensibly to unforeseen errors or unusual environments is described as robust or portable. Experienced programmers can assess the possible errors and runtime environments well and structure the program and its source code accordingly. The time pressure when developing applications always places the highest demands on this criterion, even for experienced programmers.


In order for software to work permanently, it must be maintainable . This means that changes such as bug fixes , adjustments and new features must be able to be entered without great effort. Above all, this requires that the programmer should not create too short, "cryptic" source text (or source code ) that other developers cannot understand or only understand with a long training period.

To avoid such problems, there are often naming conventions in which, for example, self-explanatory (or “speaking”) identifiers / names for variables etc. are recommended / prescribed for use - or the use of meaningful comments in the code. A sensible division of the code into intuitively understandable functions and classes also contributes to understanding and clarity.


As a rule, a program has only limited resources ( runtime , memory consumption, bandwidth) available. Good programming can help reduce unnecessary consumption of resources. For example, this is done by not copying the entire data set in each case when using large amounts of data in several places in the program, but only transferring the address at which the data is stored.

Efficient programming

According to Niklaus Wirth , good programming is characterized on the one hand by the fact that the functions provided by the programming environment used are used as efficiently as possible . In particular, it is a matter of not constantly reinventing the wheel for new tasks when certain functions are already provided (for example by the programming environment in the form of program libraries ). It is characterized above all by the fact that it provides a good overview of the basic scope of functions and the systematics of the functions provided by the programming environment (which can be tens of thousands). For a defined task, an available function can then be quickly determined, used and, if necessary, expanded in appropriate documentation.

Work equipment

Theoretically, a simple text editor and a compiler / interpreter for the respective programming language are sufficient for programming. In practice, however, a number of tools are also used to simplify typical programming work. These include, for example, text editors with special features such as syntax highlighting , autocomplete and refactoring - whereby the transition to the integrated development environment (IDE) is fluid.

There are also various tools for troubleshooting, so-called debuggers , and programs for performing static and dynamic tests . A profiler can also be used for performance analysis.

If several developers are working on the same software, versioning systems are usually used that save the code including previous versions on a central server to which all programmers involved have access.

See also

Web links

Wiktionary: Programming  - explanations of meanings, word origins, synonyms, translations
Commons : programming  - collection of pictures, videos and audio files
Wikibooks: The "Programming" bookshelf  - learning and teaching materials

Individual evidence

  1. ^ Wilhelm Pape , Max Sengebusch (arrangement): Concise dictionary of the Greek language. 3rd edition, 6th impression, Vieweg & Sohn, Braunschweig 1914. 1914, accessed on December 9, 2015 .
  2. Learn to program Difference between programming and software development
  3. Sebastian Dörn - Learn to program and understand algorithms. Retrieved January 12, 2018 .
  5. ^ Ada Lovelace , accessed June 7, 2016
  7. ^ Grace Hopper , Yale University, accessed June 7, 2016
  8. Ulrich Kohler, Frauke Kreuter: Data analysis with Stata: General concepts of data analysis and their practical application . 4th edition. Oldenbourg Wissenschaftsverlag, 2012, ISBN 978-3-486-70921-6 , p. 113 ( - data analysis with Stata: General concepts of data analysis and their practical application - with “descriptive variable names” in section “5.6 Labeling of variables”).
  9. ^ Niklaus Wirth : A Brief History of Software Engineering . In: IEEE Annals of the History of Computing . tape 30 , 3, July-September, 2008, pp. 32–39 , doi : 10.1109 / MAHC.2008.33 ( [PDF; accessed April 30, 2009]).