Um desenvolvedor deve conhecer o funcionamento interno do hardware dos computadores? [fechadas]

13

Não estou falando exatamente como a memória é atribuída e o gerenciamento de memória (coisas que você pode aprender com C, por exemplo), mas o aspecto do hardware e como cada componente do hardware do computador funciona internamente e como eles se comunicam.

Quantos de vocês sabem tudo isso?

Adrian
fonte

Respostas:

31

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.

greyfade
fonte
20
Conhecer sua máquina sempre o torna um desenvolvedor melhor, mesmo que você faça apenas aplicativos de linha de negócios. Esse conhecimento pode não ser necessário, mas é certamente importante.
Robert Harvey
@ Robert Harvey: Correto, e é por isso que digo "não preciso saber". Certamente não dói saber essas coisas de qualquer maneira. :)
greyfade
2
+1, mas conheço (mais de) alguns desenvolvedores da Web que nunca consideram o uso de memória.
Tim Post
-1 para "Se você é desenvolvedor de aplicativos, não precisa saber nada disso, exceto mantendo o uso da memória em níveis razoáveis". Alguns dos problemas maiores nos sistemas por aqui são causados ​​por designers de aplicativos que não sabem usar bancos de dados e culpam os dbas quando "as coisas estão ficando lentas, e esse não é o meu código; veja, existe o perfil".
Andrew Hill
@AndrewHill: Quando isso importa um hardware e não um algoritmo? A questão é entender o comportamento do hardware de baixo nível, não os algoritmos de alto nível.
greyfade
12

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.

Michael K
fonte
6

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.

Pemdas
fonte
2

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.

mctylr
fonte
1

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.

David Thornley
fonte
0

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.

John Bode
fonte
0

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.

melhor atendimento
fonte
0

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.

George Marian
fonte
0

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.

Thomas Owens
fonte