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

14

Cite da Wikipedia sobre o artigo "Linguagem de programação de alto nível":

A high-level programming language is a programming language with strong abstraction from the details of the computer. In comparison to low-level programming languages, it may use natural language elements, be easier to use, or be more portable across platforms. Such languages hide the details of CPU operations such as memory access models and management of scope.

Ou seja, à medida que o nível de linguagem de programação aumenta, quanto mais longe o programador vai do hardware em que o programa é executado.

Agora, não conheço as estatísticas dos usos da linguagem em todos os níveis, mas suspeito que as linguagens de nível superior estão cada vez mais substituindo as linguagens de nível inferior. Se sim, isso pode levar a um déficit de programadores com conhecimento de arquitetura de computadores? Isso seria um problema para o setor?

    
por gablin 01.10.2010 / 15:21
fonte

4 respostas

16

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 as que têm terão empregos e receberão mais, enquanto aquelas que não o fizerem terão empregos onde isso não é necessário (e ainda pode ser pago mais ... quem sabe?).

É útil saber? Absolutamente. Você provavelmente será melhor. É necessário na maioria dos casos? Não. É por isso que a abstração é tão grande que estamos nos ombros de gigantes sem ter que ser gigantes (mas sempre haverá gigantes ao redor).

    
por 01.10.2010 / 15:52
fonte
9

Eu acho que sim. É uma tendência que me preocupa. Nenhuma abstração é perfeita ; se houvesse uma maneira perfeita de simplificar qualquer problema complexo, 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 retroativa quanto com a física).

O que isto significa é que toda vez que você usa uma abstração, há uma parte importante da complexidade essencial que está se escondendo de você. Se você não sabe o que é isso, porque está lá e o que está fazendo, você acaba escrevendo acidentalmente grandes destroços de trem e não saber como consertá-los porque você não sabe o que realmente está acontecendo.

Qualquer um que tente 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 gasta uma boa porcentagem de todas as estações de TV e rádio nos EUA. À medida que as estações e redes se tornam maiores e mais complexas, técnicas rápidas e sujas que funcionaram bem para projetar um produto para uma pequena estação acabaram 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 um profundo entendimento de como o banco de dados funciona, nossos codificadores nunca seriam capazes de fazer a escala do produto com sucesso.

Esta também não é uma história isolada. O software continua a crescer mais e mais complexo, não mais simples, e temo que esse nível de conhecimento técnico se torne uma espécie de arte perdida, e os programas de amanhã serão piores do que os de hoje, não melhores.

    
por 01.10.2010 / 16:25
fonte
5

Sim, acho que as pessoas entenderão muito menos o hardware à medida que as linguagens progridem (e, da mesma forma, com o progresso dos conjuntos de instruções). 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 idiomas continuarem fazendo seu trabalho para tornar a abstração eficiente, e se as pessoas continuarem usando essas abstrações adequadamente, o entendimento da arquitetura do computador não é totalmente necessário; pelo menos um conhecimento completo não é fundamental para ser um bom programador nos dias de hoje.

    
por 01.10.2010 / 15:54
fonte
1

Não, isso não levará a um déficit de programadores com conhecimento de arquitetura de computadores. 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, de acordo com seus recursos.

Na realidade, quais domínios realmente precisam de conhecimento da arquitetura do computador? Isso precisa estar ligado a uma arquitetura de hardware específica? Sistemas operacionais? Drivers de dispositivos? 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 tempo de execução da linguagem.

Em essência, linguagens de programação mais abstratas resolvem problemas para os quais 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 dependentes da máquina. As pessoas que precisam resolver problemas dependentes da máquina continuarão a usar idiomas habilitados para máquinas. Este não é um problema de soma zero.

    
por 21.10.2010 / 15:04
fonte