ti-enxame.com

O aumento do uso de linguagens de programação cada vez mais avançadas pode levar a um déficit de programadores com conhecimento de arquitetura de computador?

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 as linguagens de programação de baixo nível, 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 o programador se afasta do hardware no qual o programa é executado.

Agora, eu não sei as estatísticas de uso da linguagem entre os níveis, mas suspeito que as línguas de nível superior estão cada vez mais substituindo as línguas de nível inferior. Em caso afirmativo, isso pode levar a um déficit de programadores com conhecimento de arquitetura de computadores? Isso seria um problema para a indústria?

15
gablin

Pode, mas provavelmente não causará problemas.

É apenas economia. Se a grande maioria das pessoas perder a capacidade de entender a arquitetura subjacente e ainda houver uma enorme NECESSIDADE de entender a arquitetura subjacente, então aqueles que o fizerem terão empregos e receberão mais, enquanto aqueles que não o fizerem terão apenas empregos onde isso não é necessário (e ainda pode receber mais ... quem sabe?).

É útil saber? Absolutamente. Você provavelmente ficará melhor. É necessário na maioria dos casos? Não. É por isso que a abstração é tão grande, nós nos colocamos sobre os ombros de gigantes sem ter que ser gigantes (mas sempre haverá gigantes por aí).

16
Ryan Hayes

Acho que sim. É uma tendência que me preocupa. Nenhuma abstração é perfeita ; se houvesse uma maneira perfeita de simplificar qualquer problema complexo, ela substituiria o original muito rapidamente. (Isso já 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 cada vez que você usa uma abstração, há alguma 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, você acaba acidentalmente escrevendo grandes destroços de trem e não sabendo como consertá-los, porque você não sabe o que é realmente acontecendo.

Qualquer pessoa que tentar 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 dirige uma boa porcentagem de todas as estações de TV e rádio dos EUA. À medida que as estações e redes ficam maiores e mais complexas, técnicas rápidas e sujas que funcionaram bem para projetar um produto para uma pequena estação acabam atingindo grandes paredes técnicas quando implementadas para uma rede com 50 estações e 200 canais! Sem uma compreensão profunda de como a linguagem funciona (e uma linguagem eficiente em primeiro lugar) e uma compreensão profunda de como o banco de dados funciona, nossos programadores nunca seriam capazes de fazer o produto escalar com sucesso.

Esta não é uma história isolada também. O software continua a ficar cada vez mais complexo, não mais simples, e temo que esse nível de especialização técnica se torne uma espécie de arte perdida e os programas de amanhã sejam piores do que os de hoje, não melhores.

9
Mason Wheeler

Sim, acho que as pessoas entenderão o hardware muito menos à medida que as línguas progridem (e, da mesma forma, conforme o progresso dos conjuntos de instruções). Mas, como foi observado em muitos outros lugares, a principal restrição na maioria dos programas hoje em dia não é o tempo ou a eficiência da CPU, mas o tempo do programador. Se as pessoas que projetam linguagens continuam fazendo seu trabalho para tornar a abstração eficiente e se as pessoas continuam usando essas abstrações corretamente, então um entendimento da arquitetura do computador não é inteiramente necessário; pelo menos um conhecimento completo não é fundamental para ser um bom programador estes dias.

5
David Hollman

Não, isso não levará a um déficit de programadores com conhecimento de arquitetura de computador. Os idiomas são usados ​​para resolver problemas em um domínio específico. Se você quiser resolver um problema específico, use a linguagem apropriada ou uma boa o suficiente para seus recursos.

Na realidade, quais domínios realmente precisam de conhecimento da arquitetura do computador? Isso precisa estar vinculado a uma arquitetura de hardware específica? Sistemas operacionais? Drivers de dispositivo? Claro, mas mesmo assim apenas partes desse código precisam de conhecimento arquitetônico 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 execução da linguagem.

Em essência, linguagens de programação mais abstratas resolvem problemas para os quais os detalhes da arquitetura do computador não são necessários. Eles permitem que mais problemas sejam resolvidos. As pessoas que os usam não os estão usando para resolver problemas que dependem da máquina. Pessoas que precisam resolver problemas dependentes de máquina continuarão a usar linguagens capacitadas por máquina. Este não é um problema de soma zero.

1
Huperniketes