Generično programiranje je ena priljubljena vrsta računalniškega programiranja, napisana na tak način, da ustvari najučinkovitejšo možno kodo, hkrati pa omogoča, da se koda uporablja v čim več situacijah, ne da bi bilo treba spremeniti izvirno kodo. Ko je koda napisana, lahko izvaja le točno tiste funkcije, za katere je bila napisana. Z uporabo generičnega programiranja za ustvarjanje kod, ki delujejo v številnih različnih situacijah, medtem ko še vedno opravljajo isto osnovno, splošno funkcijo, lahko programerji uporabljajo en sam kos kode v različnih programih, ne da bi kdaj spremenili izvirnik.
V sedemdesetih letih prejšnjega stoletja se je generično programiranje pojavilo v programskih jezikih Ada in CLU. Kmalu zatem so drugi programski jeziki, kot sta Java in C++, začeli uporabljati generično programiranje za poenostavitev programske kode, hkrati pa so omogočili uporabo iste kode v več scenarijih. Vsak programski jezik ima poseben način uporabe te kode in različne izraze, ki jo opisujejo. »Generiki«, »predloge« in »parametrizirani tipi« so bili na neki točki uporabljeni za sklicevanje na primere generičnega programiranja.
Za razumevanje te vrste programiranja je pomembno poznati osnovne koncepte delovanja programskega jezika. Če na primer Paul želi napisati program, ki sešteva dve številki, bi vtipkal računalniško kodo, da bi seštel dva predmeta. Nato bi računalniku povedal, da sta ta dva predmeta številki in da mora biti končni odgovor tudi število.
Čeprav bo program deloval, dokler Paul sešteva dve številki, se bo zrušil, če bo poskušal sešteti še kaj drugega. Če bi se Paul odločil združiti stavke v odstavek, bi se program zrušil, ker bi našel črke in ne številke. Paul bi to težavo lahko rešil z uporabo generičnega programiranja, da bi izvirnemu programu povedal, da sprejme številne spremenljivke – tako številke kot črke – in tako lahko program ustvarja stavke ali izvaja seštevanje.
Vsi programski jeziki ne potrebujejo koncepta generičnega programiranja, da bi bili učinkoviti. Tisti, ki ga uporabljajo, so statično tipizirani jeziki. To preprosto pomeni, da je koda tako rekoč trdna in je ni mogoče spreminjati, medtem ko se program izvaja. Iz tega razloga, če je programer določil, da bo vnos od uporabnika v obliki črk, in uporabnik vnese številko, program ne bi mogel uporabiti vnosa. Tako programerji poskušajo predvideti vse logične vrste podatkov, ki jih uporabnik lahko vnese, naj bodo to številke, črke ali simboli, in ustvariti program, ki se lahko ustrezno prilagodi.