W terminologii programowania komputerowego języki programowania są często podzielone na języki „wysokiego” i „niskiego poziomu”. Różnica między nimi polega na interakcji sprzętu. Mówiąc najprościej, języki niskiego poziomu znajdują się „niżej” w systemie komputerowym, bliżej rzeczywistej interakcji sprzętowej. Języki wysokiego poziomu są oderwane od sprzętu. Wynikiem tej abstrakcji może być szybszy, bardziej czytelny kod, ale korzyści z mniejszej szybkości i mniejszy dostęp do zasobów systemowych.
Abstrakcja
Tym, co odróżnia języki wysokiego poziomu od języków niskiego poziomu, jest poziom abstrakcji języka od zasobów systemowych. Codzienne zajmowanie się zasobami systemowymi może stać się powolne i bolesne. Aby poradzić sobie z tym problemem, stworzono języki wysokiego poziomu, obsługując system dla programisty, zwalniając jej, aby wykonać bardziej zaawansowane zadania, ignorując najdrobniejsze szczegóły systemu, takie jak pamięć kierownictwo. Ma to jednak wadę polegającą na tym, że programista może znaleźć się w sytuacji, w której wymagany jest dostęp do systemu, a język wysokiego poziomu nie może go zapewnić. Język wysokiego poziomu zazwyczaj nie nadaje się do programowania systemów.
Wideo dnia
Prędkość
Języki wysokiego poziomu są zazwyczaj językami „interpretowanymi”, a nie „skompilowanymi” językami niskiego poziomu. „Zinterpretowany” oznacza po prostu, że język używa interpretera, który wykonuje kod źródłowy po jednym wierszu na raz, zamiast kompilować plik binarny. Jednak interpretery to często programy napisane w językach skompilowanych. Z tego powodu interpretowany język — na przykład Python — działa tylko na wierzchu interpretera Pythona, który jest napisany w C. Zwiększa to narzut pamięci i czasu na interpretowane programy, które często działają wolniej.
Osobliwości systemu
Pozorną siłą kodu wysokopoziomowego jest jego przenośność. Kod wysokiego poziomu można uruchomić w dowolnym systemie, w którym zainstalowano odpowiedni interpreter. Jednak gdy program jest kompilowany na komputer, podczas kompilacji uwzględnia on całe środowisko tego systemu. Interpretowany język jest już wyabstrahowany z systemu do tego stopnia, że interpretowany program nie wie nic o systemie poza tym, co interpreter może mu dostarczyć.
Ograniczenia programowania
Ze względu na naturę języków wysokiego poziomu istnieją pewne zadania, do których nie są one przystosowane lub przynajmniej jeszcze do nich nie nadają się. Bez dostępu do zasobów systemowych tworzenie szybkich aplikacji natywnych dla systemu operacyjnego jest trudne. Co więcej, nawet tworzenie systemu operacyjnego staje się problematyczne. Ponieważ coraz więcej oprogramowania przenosi się do sieci, fakt ten staje się mniej niepokojący, ale w przypadku zastosowań komercyjnych i przemysłowych języki interpretowane mogą działać zbyt wolno lub zbyt daleko od interakcji sprzętowej.