Programming is the process of developing computer programs. (There are of course other concepts of programming, such as television programming, and in a larger concept web that included them we would relabel this concept as "computer programming.") Its operations include writing, testing, debugging, and extending programs.
Models of the programming concept include both programming carried out manually by humans (programmers) and automatically by computer programs (program generators such as compilers). The "manual" programming activity of human programmers is often aided by programming tools which themselves are usually computer programs (text-editors, compilers, debugging systems, documentation aids, etc.).
Refinements of this concept include what are often called "programming paradigms," such as procedural programming, functional programming, object-oriented programming, logic programming, and generic programming. Each of these deserves expansion into a concept web. In this document we concentrate on generic programming. The way we define terms is based on classic definitions of algorithms and computational methods such as Knuth's , but generalized to encompass generic programming.