Na terminologia de programação de computadores, as linguagens de programação são frequentemente separadas em linguagens de "alto nível" e "baixo nível". A diferença entre os dois é uma questão de interação de hardware. Simplificando, as linguagens de baixo nível residem "inferiormente" no sistema do computador, mais próximas da interação real do hardware. As linguagens de alto nível são abstraídas do hardware. O resultado dessa abstração pode resultar em código mais rápido e legível, mas benefícios de velocidade mais baixa e menos acesso aos recursos do sistema.
Abstração
O que diferencia as linguagens de alto nível das linguagens de baixo nível é o nível de abstração que uma linguagem tem dos recursos do sistema. Lidar com recursos do sistema diariamente pode se tornar lento e doloroso. Linguagens de alto nível foram criadas para lidar com esse problema, manipulando o sistema para o programador, liberando-o para concluir tarefas mais avançadas, ignorando os mínimos detalhes do sistema, como gerenciamento de memória. No entanto, isso tem uma desvantagem, pois um programador pode se encontrar em uma situação em que o acesso ao sistema é necessário e uma linguagem de alto nível não pode fornecer esse acesso. Uma linguagem de alto nível normalmente não é adequada para programação de sistemas.
Velocidade
As linguagens de alto nível são tipicamente linguagens "interpretadas" em vez das linguagens de baixo nível "compiladas". "Interpretado" significa simplesmente que uma linguagem usa um interpretador que executa o código-fonte uma linha por vez, em vez de compilar um arquivo binário. No entanto, os intérpretes geralmente são programas escritos em linguagens compiladas. Por causa disso, a linguagem interpretada -- Python, por exemplo -- roda apenas em cima do interpretador Python, que é escrito em C. Isso aumenta a memória e o tempo gasto para programas interpretados, e eles geralmente executam mais lentamente.
Peculiaridades do sistema
Uma aparente força do código de alto nível é sua portabilidade. O código de alto nível pode ser executado em qualquer sistema que tenha o interpretador apropriado instalado. No entanto, quando um programa é compilado para um computador, ele leva em consideração todo o ambiente desse sistema em sua compilação. Uma linguagem interpretada já está abstraída do sistema a tal ponto que o programa interpretado não sabe nada sobre o sistema, exceto o que o interpretador pode fornecer.
Limites de programação
Devido à natureza das linguagens de alto nível, existem certas tarefas para as quais elas não são adequadas, ou pelo menos ainda não são adequadas. Sem acesso aos recursos do sistema, é difícil desenvolver aplicativos rápidos e nativos do sistema operacional. Além disso, mesmo o desenvolvimento de um sistema operacional se torna problemático. À medida que mais softwares se movem on-line, esse fato se torna menos preocupante, mas, para uso comercial e industrial, as linguagens interpretadas podem funcionar muito lentamente ou muito distantes da interação do hardware.