A term originally used in Ada to denote a subprogram or package that can be parameterized with parameters that can be types and subprograms as well as values and variables. A generic package or subprogram provides a template from which a particular instantiation can be produced by providing the appropriate parameters. Many languages now implement generics.