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

15

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?

gablin
fonte

Respostas:

16

Pode , mas provavelmente não levará a um problema.

É 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, quem fizer isso terá empregos e será pago mais, enquanto aqueles que não o terão apenas empregos onde isso não é necessário (e ainda pode ser pago mais ... quem sabe?).

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

Ryan Hayes
fonte
4
Mas todas as abstrações são vazadas. Conhecer a arquitetura subjacente é essencial se você deseja ser o principal responsável por solucionar problemas de abstrações com vazamentos.
dsimcha
5
@dsimcha, Concordou, mas para ser o cara que você precisa, "os outros" o procuram ;-) Se todo mundo precisa saber tudo, a abstração falhou miseravelmente.
Preets
1
@Preets, E é por isso que muitas abstrações têm falhado miseravelmente. Até mesmo ter espaço para que um profissional experiente exista é a prova de que uma abstração já falhou.
Pacerier 27/08/14
@ Ryan, na verdade, levará a um problema em que no futuro o mundo será inundado com aplicativos cheios de bugs sutis devido a camadas e mais camadas de abstrações com vazamentos. É incrível o suficiente agora que empresas como o Google, com recursos infinitos , ainda podem ter bugs em seus aplicativos principais.
Pacerier 27/08/14
3
O @Pacerier google possui longe de recursos infinitos e eles tornam aplicativos com várias ordens de magnitude mais complexas e que consistem em várias ordens de magnitude com mais linhas de código do que a maioria das outras. alegar que todos deveriam saber coisas de computador de baixo nível, porque todas as abstrações podem vazar é como dizer que todos deveriam saber como construir uma casa do zero, sem usar ferramentas, porque uma tempestade pode vir e destruir sua casa. simplesmente não é viável (ou inteligente) gastar recursos assim.
Sara
9

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.

Mason Wheeler
fonte
5
Eu ouvi isso expresso como "você precisa conhecer a abstração uma camada abaixo de onde trabalha". Bem, foi um pouco mais expressivo; minha memória está falhada. Portanto, se você estiver trabalhando em C ou Delphi, deve saber como a montagem funciona. Se você estiver trabalhando em Smalltalk ou Java, deve saber como sua VM funciona. (Indiscutivelmente, você sempre deve saber algo sobre montagem!) Se estiver trabalhando com TCP, deve saber como o IP funciona. E assim por diante.
precisa saber é o seguinte
1
Quero dizer, você poderia levar ainda mais longe: por que basta apenas conhecer a montagem? isso é apenas uma abstração de alto nível de mãos dadas sobre as instruções binárias da CPU. mas espere! Código da máquina? isso é apenas uma abstração! você precisa aprender como a CPU é construída usando transistores para construir portas lógicas! e o ônibus e os registros. mas espere! transistores? isso é apenas uma abstração para uma certa configuração de átomos. e átomos são apenas uma abstração das flutuações nos campos quânticos. no final, isso javascript:alert("Hello world")exige um doutorado em teoria das cordas.
Sara
1
@kai Você está sendo um pouco ridículo . Costumo concordar com você que geralmente não é o caso de você precisar entender várias camadas para a maioria dos aplicativos. Mas estamos falando de casos extremos, não de coisas cotidianas. Claro, você não precisa saber como o encanamento funciona para lavar a louça. Mas se a água suja começar a encher a pia, você provavelmente deve aprender um pouco antes de tentar consertá-la. Ou você pode simplesmente colocar um pedaço de vergalhão no ralo até que ele funcione novamente e quem se importa para onde a água vai. (cont ...)
DrewJordan
1
@DrewJordan Meu argumento é apenas isso: a menos que você seja um profissional que precise conhecer e corrigir uma certa classe de questões (ou apenas tenha um grande interesse privado), é francamente absurdo afirmar que você precisa conhecer o funcionamento interno e sutilezas estranhas de todas as ferramentas que você está usando. Simplesmente chamei o ponto de vista para sua conclusão lógica. Certamente, saber como um cabo Ethernet é construído permitiria que você construa um novo, com as ferramentas certas quando sua conexão à Internet falhar, mas gastar tempo e dinheiro adquirindo conhecimento quando você trabalha 20 camadas acima é um desperdício.
Sara
1
@DrewJordan, é claro, ALGUÉM precisa saber tudo isso para que alguém possa consertá-lo quando uma abstração for interrompida, mas o ponto principal das abstrações é manter o número de pessoas que precisam conhecer os detalhes ao mínimo para que a grande maioria possa se concentrar em fazendo coisas. onde você arbitrariamente desenha a linha de onde as coisas ficam "em um nível muito baixo" depende apenas do que você trabalha pessoalmente, como ilustrado no meu argumentum ad absurdium (que não é uma falácia, você sabe!)
sara
5

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.

David Hollman
fonte
2
Em teoria, sim, mas esses são alguns ifs bem grandes .
Mason Wheeler
1

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.

Huperniketes
fonte