Generacje języków programowania to sposób na klasyfikację języków programowania komputerowego zgodnie z ich całkowitą odległością od rzeczywistego generowanego kodu maszynowego i, pod pewnymi względami, łatwości ich użycia przez programistę. Istnieją trzy ogólnie akceptowane generacje języków programowania i kilka, których definicje nie są jasno uzgodnione. Język programowania komputerowego pierwszej generacji to prosty kod maszynowy bez abstrakcji. Języki drugiej generacji to abstrakcyjny kod maszynowy, taki jak język asembler, który jest powiązany z konkretną architekturą systemu, ale jest czytelny dla człowieka i musi zostać skompilowany. Najbardziej powszechną formą są języki trzeciej generacji, w tym języki standardowe, takie jak C i Java®, natomiast języki czwartej generacji lub nowsze mają różne definicje.
Kiedy generacje języka programowania zostały po raz pierwszy stworzone do opisu języków, termin ten był używany głównie do wskazania języków trzeciej generacji. Oznacza to, że języki pierwszej i drugiej generacji zostały sklasyfikowane jako takie tylko w celu podkreślenia możliwości języków trzeciej generacji. Czwarta i piąta generacja języka programowania były w dużej mierze używane jako terminy związane z marketingiem języków, które były w fazie rozwoju. W marketingu i niektórych obszarach akademickich generacje języków o wyższych numerach są używane w niestandardowy sposób, aby wskazać, że jeden język jest nowszy lub ma więcej funkcji niż inny.
Pierwsza z generacji języka programowania wskazuje na kod maszynowy. Oznacza to napisanie programu jako sekwencji bajtów lub, w skrajnych przypadkach, bitów, które mogą być bezpośrednio wykonywane przez komputer. W większości przypadków odnosi się to do systemu, który akceptuje dane wejściowe za pośrednictwem zakodowanych na stałe przełączników lub innych mechanizmów fizycznych.
Języki programowania drugiej generacji są uważane za języki w stylu asemblera. Są to języki napisane za pomocą czytelnego dla człowieka kodu i poleceń, które nadal są powiązane z określonymi architekturami systemu, ale prezentują łatwiejsze środowisko programistyczne i pewną abstrakcję. Języki asemblerowe nigdy nie przestały być używane, począwszy od 2011 roku i są nie tylko niezwykle wydajne, ale także mogą być używane jako instrukcje wbudowane w językach programowania wyższego poziomu, fałszując pogląd, że generowanie języka jest równoznaczne z jego szybkością lub mocą.
Języki programowania trzeciej generacji w jeszcze większym stopniu oddzieliły kod od procesora, umożliwiając tworzenie kodu wykorzystującego bardziej czytelne instrukcje. Ponadto opracowano kompilatory, które mogą przekształcić pojedynczy wiersz kodu w wiele instrukcji asemblera na wielu platformach, a ostatecznie w dziesiątki lub więcej instrukcji kodu maszynowego. Prawie wszystkie języki komputerowe, które mogą kompilować natywne pliki binarne i biblioteki, są uważane za języki trzeciej generacji.
Ogólnie rzecz biorąc, język czwartej generacji jest postrzegany jako język przeznaczony do używania pewnego rodzaju języka programowania, który jest bardzo naturalny dla użytkownika. Można go również zdefiniować jako język, który wykorzystuje elementy wizualne do budowy końcowego programu. Trzecia definicja to język programowania stworzony do określonego celu, taki jak język programowania baz danych lub język szybkiego tworzenia aplikacji (RAD).
Luźna definicja języka komputerowego piątej generacji to taka, która pozwala programiście przedstawić komputerowi problem, który następnie próbuje rozwiązać. Większość języków, które są wymienione jako języki piątej generacji, ma głównie charakter akademicki. Inne generacje języków programowania, takie jak szósta i siódma, były wykorzystywane przez programistów języków komercyjnych w celach marketingowych.