FORTRAN foi a primeira linguagem erradamente denominada de "alto nível", antes só se usava linguagem de máquina ou assembler. O primeiro compilador ficou pronto em 1958, um esforço de Backus et al. na IBM. Naquela época não havia muita noção do que era necessário para descrever um algoritmo e principalmente como se deveria descrevê-lo de modo que pudesse ser interpretado por um computador (computadores não executam programas, interpretam-nos!). Quando ela foi desenvolvida, estava se pensando em como a máquina poderia interpretar os comandos com eficiência, e não como os programadores poderiam descrever seus algoritmos com mais simplicidade, com mais corretude e em menos tempo. A primeira linguagem imperativa que foi desenvolvida para descrever algoritmos foi ALGOL -- o relatório dela, usando a sintaxe Backus-Naur foi em 1960, projetada com a finalidade de descrever algoritmos. Mas mesmo ela ainda estava muito próxima da estrutura interna dos computadores. A prova disso é o uso de if...then...else... e da malha for, claramente inspiradas na estrutura das linguagens de máquina. Infelizmente, os projetistas de linguagens de programação sempre tiveram a máquina como objetivo, e não o programador ou, muito melhor ainda, os problemas. Pode-se notar que qualquer malha for ou while processa conjuntos de dados; o correto sempre deveria ter sido haver comandos para processar conjuntos e sequências de dados. Em lugar de if...then...else... dever-se ia usar tabelas de decisão.
Dou um exemplo de como as linguagens não se adaptam aos problemas: desde FORTRAN as linguagens algorítmicas não contém nem o tipo nativo data nem o moeda. Encontrem um programa que não tenha uma ou as duas dessas estruturas. Excel e Access as contêm, pois foram projetadas para resolver problemas.
Um evento histórico extraordinário na computação foi o advento da série 5.000 da Burroughs, mais tarde série 6.000, onde hardware foi implementado para interpretar chamadas de procedimentos (hoje erradamente chamados de funções) encaixados em procedimentos com muita eficiência, por isso as cadeias estática e dinâmica de chamadas de procedimentos eram implementadas em hardware. A razão disso, foi o objetivo de implementar programas em ALGOL com muita eficiência. Foi a primeira máquina projetada pensando numa linguagem algorítmica.
Como a linguagem C foi desenvolvida tendo em mente o PDP-11, um minicomputador da época, e ele não tinha o hardware para implementar a cadeia estática, o que fez o Dennis Ritchie? Em lugar de entortar a máquina, entortou os programadores, impedindo que se declarasse uma função dentro de outra. E isso foi herdado na Java. E com isso a implementação da herança de classes virou um lixo.
Curiosamente, hoje em dia a linguagem de programação é o que menos há a aprender. Cada uma delas vem com um enorme ambiente de procedimentos e funções já programados, que têm que ser aprendidos para cada uma, pois diferem de uma linguagem para outra. Veja só algumas das toneladas de funções nativas da Python: