Citação da Wikipedia do artigo "Linguagem de programação de alto nível":
Uma linguagem de programação de alto nível é uma linguagem de programação com forte abstração dos detalhes do computador. Em comparação com linguagens de programação de baixo nível, ele pode usar elementos de linguagem natural, ser mais fácil de usar ou ser mais portátil entre plataformas. Essas linguagens ocultam os detalhes das operações da CPU, como modelos de acesso à memória e gerenciamento de escopo.
Ou seja, à medida que o nível da linguagem de programação aumenta, mais longe o programador fica do hardware no qual o programa é executado.
Agora, não conheço as estatísticas do uso de idiomas em todos os níveis, mas suspeito que os idiomas de nível superior estão substituindo cada vez mais os idiomas de nível inferior. Em caso afirmativo, isso pode levar a um déficit de programadores com conhecimento em arquitetura de computadores? Isso seria um problema para a indústria?
Acho que sim. É uma tendência que me preocupa. Nenhuma abstração é perfeita ; se houvesse uma maneira perfeita de simplificar qualquer problema complexo, ele substituiria o original muito rapidamente. (Isso aconteceu no passado, ocasionalmente com computadores, e com muito mais frequência em outros campos que não se preocupam tanto com a compatibilidade com versões anteriores quanto nós, como a física.)
O que isso significa é que toda vez que você usa uma abstração, há uma parte importante da complexidade essencial que ela está escondendo de você. Se você não sabe o que é isso, por que está lá e o que está fazendo, acaba acidentalmente escrevendo grandes destroços de trem e sem saber como corrigi-los porque não sabe o que realmente está acontecendo.
Quem tenta dizer o contrário está vendendo óleo de cobra ou simplesmente não tem muita experiência com software sério. No trabalho, trabalho em um programa que executa uma boa porcentagem de todas as estações de TV e rádio nos EUA. À medida que as estações e as redes ficam maiores e mais complexas, técnicas rápidas e sujas, que funcionavam bem para projetar um produto para uma estação pequena, acabam atingindo grandes paredes técnicas quando implementadas para uma rede com 50 estações e 200 canais! Sem um entendimento profundo de como o idioma funciona (e um idioma eficiente em primeiro lugar) e um entendimento profundo de como o banco de dados funciona, nossos codificadores nunca seriam capazes de fazer o produto escalar com êxito.
Também não é uma história isolada. O software continua a crescer cada vez mais complexo, e não mais simples, e tenho medo de que esse nível de conhecimento técnico se torne uma arte perdida, e os programas de amanhã serão piores que os de hoje, não melhores.
fonte
javascript:alert("Hello world")
exige um doutorado em teoria das cordas.Sim, acho que as pessoas entenderão muito menos o hardware à medida que os idiomas progridem (e, da mesma forma, à medida que as instruções progridem). Mas, como já foi observado em muitos outros lugares, a principal restrição na maioria dos programas atualmente não é o tempo ou a eficiência da CPU, mas o tempo do programador. Se as pessoas que projetam linguagens continuam realizando seu trabalho para tornar a abstração eficiente, e se as pessoas continuam usando essas abstrações corretamente, não é inteiramente necessário um entendimento da arquitetura do computador; pelo menos um conhecimento completo não é fundamental para ser um bom programador atualmente.
fonte
Não, isso não levará a um déficit de programadores com conhecimento em arquitetura de computadores. Os idiomas são usados para resolver problemas em um domínio específico. Se você quiser resolver um problema específico, use o idioma apropriado ou um bom o suficiente, considerando seus recursos.
Na realidade, quais domínios realmente precisam de conhecimento da arquitetura do computador? Isso precisa estar associado a uma arquitetura de hardware específica? Sistemas operacionais? Drivers de dispositivo? Claro, mas mesmo assim apenas partes desse código precisam de conhecimento arquitetural específico.
Melhoria de desempenho? Sim, você pode aplicar o conhecimento da arquitetura do computador para melhorar o desempenho dos algoritmos. Mas dois outros fatores têm um impacto maior no desempenho: o uso de melhores algoritmos e o conhecimento do ambiente de tempo de execução da linguagem.
Em essência, linguagens de programação mais abstratas resolvem problemas para os quais não são necessários detalhes da arquitetura do computador. Eles permitem que mais problemas sejam resolvidos. As pessoas que os usam não os usam para resolver problemas dependentes da máquina. As pessoas que precisam resolver problemas dependentes de máquina continuarão usando linguagens capazes de máquina. Este não é um problema de soma zero.
fonte