Principe
Un avantage de la programmation générique consiste à abstraire un ensemble de concepts cohérents pour construire des algorithmes au-dessus indépendamment de leur implémentation. Ainsi la fonction de tri de la STL a besoin en entrée d'itérateurs aléatoires sur une collection d'objets et d'une fonction de comparaison sur ces objets ; cela rend ainsi cette fonction utilisable dans de très nombreux contextes.
Ce mécanisme permet une programmation générique purement statique puisque l'ensemble des résolutions de types est fait au moment de la compilation.
Par exemple, si l'on veut créer une liste générique, une déclaration (ici en utilisant les templates de C++) serait : List, où T représente un type. À l'instanciation, on pourrait créer une List ou une List<Animal>. La liste est ensuite traitée comme si le type correspondant avait été spécifié.
Langages d'implémentation
La programmation générique est supportée par certains langages à typage statique dans lesquels il est possible d'utiliser des types génériques ou « templates ».
La toute première implémentation fut en Ada 83, bien avant les templates de C++ qui ont popularisé la programmation générique, en permettant d'écrire du code sans considérer explicitement les types de données avec lesquels le code sera utilisé. Ceci est intensivement utilisé dans la Standard Template Library (STL).
D'autres langages de programmation, comme Java depuis la version 1.5 ou encore Eiffel, supportent la programmation générique. Objective Caml permet également une programmation générique assez subtile et très puissante grâce au système de modules paramétrés qu'il propose. VB.NET et C# la supporte depuis la version 2.0 du framework .NET.