Depende do que você faz.
Se você é um desenvolvedor incorporado (e está escrevendo muito próximo ao metal em um dispositivo muito pequeno), precisa conhecer tudo dentro e fora de cada componente do sistema.
Se você é desenvolvedor de sistemas (e está escrevendo sistemas operacionais ou drivers de dispositivo ou talvez até bancos de dados), precisará saber quase tudo o que há para saber sobre interfaces de hardware de baixo nível.
Se você é desenvolvedor de jogos e está atrasado no seu projeto (onde está otimizando as coisas), precisa conhecer os meandros do cache da CPU e das arquiteturas gráficas que usará.
Se você é desenvolvedor de aplicativos, não precisa saber nada, exceto manter o uso da memória em níveis razoáveis.
Se você é desenvolvedor da Web, é útil conhecer protocolos da Internet, mas nada disso é necessário, exceto como lidar com problemas de memória.
Não, você não precisa , mas acho que é uma excelente ideia. Aprender uma visão geral de como as coisas funcionam no nível lógico realmente me ajudou no desenvolvimento.
fonte
Eu acho que os comentários sobre desenvolvedores de aplicativos e web estão errados.
Por exemplo, se alguém estiver desenvolvendo um aplicativo da Web que envolva muitas coisas de segurança, como ssh ou algum outro algoritmo de criptografia, é muito importante que eles saibam em que tipo de hardware estão executando, para que possam determinar se a máquina pode realmente lidar com a carga de trabalho. Outro exemplo pode incluir um servidor que hospeda algum tipo de conteúdo baixado. É melhor conhecer os recursos da unidade de disco e qualquer tipo de interface de barramento à qual ela esteja conectada, se você espera uma quantidade razoavelmente grande de solicitações.
Do ponto de vista do aplicativo, se você estiver desenvolvendo algum tipo de programa CAD ou algo que renderize em 3D, poderá esperar que esse aplicativo seja intensivo em computação, tanto algoritmicamente quanto graficamente. Seria prudente entender o hardware para garantir que o aplicativo seja responsivo e utilizável.
Não estou dizendo que você precisa ir tão longe quanto entender os meandros de algo como o protocolo PCI, mas entende melhor do que a interface e o hardware são capazes.
Por fim, é importante, independentemente do tipo de desenvolvimento que você faz. O nível de detalhe necessário para você entender é discutível.
fonte
Para um programador profissional, considero isso uma abordagem holística para entender todo o sistema , em vez de apenas conhecer a sintaxe de uma determinada linguagem de programação do dia . Acho que ajuda os programadores (e analistas) a tomar decisões inteligentes de design e a fazer escolhas mais informadas sobre algoritmos e estrutura de dados.
Na minha própria experiência, os melhores programadores tendem a conhecer o funcionamento interno, em vários graus, se isso é entender as instruções de montagem nativas definidas para uma plataforma de destino, um curso introdutório de organização de computadores na escola, eletrônica digital rudimentar ou ser capaz de entender detalhes Nas descrições dos núcleos de CPU e GPU nos modelos mais recentes, os melhores têm um conhecimento mais completo do que seus pares menos estelares.
fonte
Não tenho certeza se isso ajuda, mas me sinto mais confortável quando sei mais sobre o sistema em que estou trabalhando do que realmente preciso. Quando eu era mais jovem, não gostava de não conhecer a linguagem assembly do sistema em que estava trabalhando; ou mudei ou aprendi suficientemente que mais uma não vai expandir muito meu sentimento pelo sistema. Nunca fui muito fã de hardware, mas posso desmontar um computador e nomear os diferentes subsistemas e como eles interagem.
fonte
O pouco que eu sei que aprendi em uma aula de arquitetura de computadores há quase 25 anos e em uma arquitetura que não é do mundo real.
Faço principalmente programação de aplicativos em uma variedade de plataformas. Houve um período em que eu estava desenvolvendo código para rodar não apenas em hardware x86 comum, mas também em Sparc, PA-RISC e outras arquiteturas de servidor. O conhecimento nesse nível simplesmente não é necessário para o trabalho que faço.
fonte
Ensino programação em Java como uma turma do ensino médio de AP. Descobri que, quando os alunos sabem algo sobre o funcionamento interno de um computador, isso os ajuda a entender os conceitos de programação.
Eu não exagere - apenas conceitos simples, como como as coisas são armazenadas na memória, parecem ajudar os alunos.
fonte
Vou responder isso conforme solicitado no título:
Sim, um desenvolvedor deve conhecer o funcionamento interno do hardware. Quanto depende do tipo de desenvolvedor e seus objetivos, tempo disponível e interesse pessoal. A prioridade deve, é claro, estar nas ferramentas, técnicas etc. imediatas que eles empregam em sua área. Essa opinião é semelhante à de um indivíduo bem-arredondado. Quanto mais você souber de coisas fora do seu ofício, sem sacrificar o seu ofício, melhor.
Isso não significa que você precise ficar louco com o Whiz de queijo. Tenha uma boa visão geral do hardware, como as peças interagem, como os sistemas operacionais as utilizam. Nessa linha, sugiro a leitura de um livro de conceitos de sistemas operacionais para todos os desenvolvedores.
Eu sei tudo isso? Parreira não. Esqueci tantas informações inúteis sobre o SCSI que nem sequer é engraçado. No entanto, aprender sobre isso foi uma experiência inestimável. Também esqueci muitos outros detalhes relacionados a hardware, mas lembre-se dos conceitos importantes que aprendi com esse conhecimento.
Então, eu certamente sugiro aprender sobre o hardware. Faça isso em um ritmo razoável, dependendo de suas necessidades. Aprenda o máximo de detalhes possível, mas concentre-se nos conceitos.
fonte
Todo desenvolvedor deve conhecer os conceitos básicos associados à engenharia da computação: aritmética binária, conversão de base, álgebra booleana, portas lógicas, composição de uma CPU (e o que os componentes fazem), cache, memória virtual, compressão, detecção e correção de erros ...
A extensão em que essas informações devem ser conhecidas depende do trabalho do programador. Como outros já disseram, um desenvolvedor de sistemas embarcados teria que estar muito mais familiarizado com os recursos de hardware e como escrever o software que melhor utiliza o hardware do que um desenvolvedor da Web.
fonte