A philosophy of programming which emphasizes
algorithms as the central concepts of software, as opposed to
objects.
Abstraction is viewed as a tradeoff rather than a virtue.
The primary tools in generic programming are:
Generic Programming's intellectual founder and main proponent (in 2000) is
Alexander Stepanov. His enormously successful
Standard Template Library, which he wrote in collaboration with
Ming Lee when they both worked for
Hewlett-Packard Corporation, was an expression of these ideas.
Generic Programming is, in part, a reaction to
OOP, many of whose techniques have been overhyped, and whose misuse has damaged countless schedules and hurt program performance. Of couse there are other
negative reactions to OOP.
Despite this, Stepanov has chosen
C++ as the only language his ideas can be adequately expressed in, at least
for the time being.
Many people who have been exposed to Generic Programming seem to think that Stepanov's objections to OO are limited to the notion of
polymorphism, the central overhyped feature in the silly propaganda about the wonderfulness of OOP. These people imply that if polymorphism were de-emphasized, he wouldn't object so much. Maybe so, but my own
reading between the lines seems to indicate that he doesn't think
encapsulation's all its cracked up to be.