C++ FAQ Celebrating Twenty-One Years of the C++ FAQ!!!
(Click here for a personal note from Marshall Cline.)
Section 6:
[6.4] What's the big deal with generic programming?

C++ supports generic programming. Generic programming is a way of developing software that maximizes code reuse in a way that does not sacrifice performance. (The "performance" part isn't strictly necessary, but it is highly desirable.)

Generic components are pretty easy to use, at least if they're designed well, and they tend to hide a lot of complexity. The other interesting feature is that they tend to make your code faster, particularly if you use them more. This creates a pleasant non-tradeoff: when you use the components to do the nasty work for you, your code gets smaller and simpler, you have less chance of introducing errors, and your code will often run faster.

Most developers are not cut out to create these generic components, but most can use them. The process for creating them is a non-process. You fiddle, you scratch your head, you wake up a 3 a.m. with a great idea, you rip your code up over and over (and over and over). In short, you iterate. You're trying to put 10 pounds of stuff into the proverbial 5-pound bag. People who don't like to think — to solve puzzles — need not apply.

Fortunately generic components are, um, generic, so your organization does not often need to create a lot of them. There are many off-the-shelf libraries of generic components. STL is one such library. Boost has a bunch more. There are many.