Cela dépend de ce que vous faites.
Si vous êtes un développeur intégré (et que vous écrivez très près du métal dans un très petit appareil), vous devez connaître chaque entrée et sortie de chaque composant du système.
Si vous êtes un développeur de systèmes (et que vous écrivez des systèmes d'exploitation ou des pilotes de périphériques ou peut-être même des bases de données), vous aurez besoin de tout savoir sur les interfaces matérielles de bas niveau.
Si vous êtes un développeur de jeux et tard dans votre projet (où vous optimisez les choses), vous devez connaître les tenants et les aboutissants du cache du processeur et des architectures graphiques que vous utiliserez.
Si vous êtes un développeur d'applications, vous n'avez pas besoin de savoir quoi que ce soit, sauf de maintenir l'utilisation de la mémoire à des niveaux raisonnables.
Si vous êtes un développeur Web, il est pratique de connaître les protocoles Internet, mais aucun de ces autres éléments n'est nécessaire, sauf comment gérer les problèmes de mémoire.
Non, ce n'est pas obligatoire , mais je pense que c'est une excellente idée. Apprendre un aperçu général de la façon dont les choses fonctionnent au niveau logique m'a vraiment aidé dans le développement.
la source
Je pense que les commentaires sur les développeurs d'applications et les développeurs Web sont faux.
Par exemple, si quelqu'un développe une application Web qui implique beaucoup de choses de sécurité comme ssh ou un autre algorithme de chiffrement, il est très important de savoir sur quel type de matériel il s'exécute afin de déterminer si la machine peut réellement gérer la charge de travail. Un autre exemple pourrait inclure un serveur qui héberge une sorte de contenu téléchargé. Vous connaissez mieux les capacités du lecteur de disque et quel que soit le type d'interface de bus auquel il est connecté si vous attendez un nombre raisonnablement élevé de demandes.
Du point de vue de l'application, si vous développez une sorte de programme de CAO, ou quelque chose qui fait un rendu 3D, vous pouvez vous attendre à ce que ces applications soient intensives en calcul à la fois algorithmiquement et graphiquement. Il serait prudent de comprendre le matériel pour vous assurer que l'application est réactive et utilisable.
Je ne dis pas que vous devez aller jusqu'à comprendre les tenants et aboutissants de quelque chose comme le protocole PCI, mais vous comprenez mieux ce dont l'interface et le matériel sont capables.
En fin de compte, c'est important quel que soit le type de développement que vous faites. Le niveau de détail nécessaire à votre compréhension est discutable.
la source
Pour un programmeur professionnel, je considère cela comme une approche holistique pour comprendre l'ensemble du système , plutôt que de simplement connaître la syntaxe d'un langage de programmation donné du jour . Je trouve que cela aide les programmeurs (et les analystes) à prendre des décisions de conception intelligentes et à faire des choix d'algorithmes et de structure de données plus éclairés.
D'après ma propre expérience, les meilleurs programmeurs ont tendance à connaître le fonctionnement interne, à des degrés divers, qu'il s'agisse de comprendre le jeu d'instructions d'assemblage natif pour une plate-forme cible, un cours d'introduction à l' informatique à l'école, l'électronique numérique rudimentaire ou d'être capable de comprendre en détail descriptions des cœurs CPU et GPU dans les derniers modèles, les meilleurs ont une connaissance plus complète que leurs pairs moins stellaires.
la source
Je ne sais pas si cela aide, mais je me sens plus à l'aise lorsque j'en sais plus sur le système sur lequel je travaille que je n'en ai vraiment besoin. Quand j'étais plus jeune, je n'aimais pas ne pas connaître le langage d'assemblage du système sur lequel je travaillais; soit j'ai changé, soit j'en ai appris suffisamment pour qu'un de plus n'augmente pas beaucoup ma perception du système. Je n'ai jamais été un grand amateur de matériel, mais je peux démonter un ordinateur et nommer les différents sous-systèmes et comment ils interagissent.
la source
Le peu que je sais que j'ai appris dans un cours d'architecture informatique il y a près de 25 ans, et sur une architecture non réelle.
Je fais principalement de la programmation d'applications sur une variété de plateformes. Il y a eu une période où je développais du code pour fonctionner non seulement sur du matériel de base x86, mais également sur Sparc, PA-RISC et d'autres architectures de serveurs. La connaissance à ce niveau n'est tout simplement pas requise pour le travail que je fais.
la source
J'enseigne la programmation Java en tant que classe de lycée AP. J'ai constaté que lorsque les étudiants connaissent quelque chose sur le fonctionnement interne d'un ordinateur, cela les aide à comprendre les concepts de programmation.
Je ne vais pas trop loin - juste des concepts simples tels que la façon dont les choses sont stockées en mémoire semblent aider les élèves.
la source
Je vais répondre à cela comme demandé dans le titre:
Oui, un développeur doit connaître le fonctionnement interne du matériel. Le montant dépend du type de développeur et de ses objectifs, du temps disponible et de l'intérêt personnel. La priorité devrait, bien entendu, être accordée aux outils, techniques, etc. immédiats qu'ils emploient dans leur domaine. Cette opinion va dans le sens d'un individu bien équilibré. Plus vous en savez sur des choses en dehors de votre métier, sans sacrifier votre métier, mieux c'est.
Cela ne signifie pas que vous devez devenir fou avec le Cheese Whiz. Avoir une bonne vue d'ensemble du matériel, comment les pièces interagissent, comment les systèmes d'exploitation les utilisent. Dans ce sens, je suggère de lire un livre de concepts de systèmes d'exploitation pour tous les développeurs.
Est-ce que je sais tout ça? Heck non. J'ai oublié tellement d'informations inutiles sur SCSI que ce n'est même pas drôle. Cependant, l'apprendre a été une expérience inestimable. J'ai également oublié beaucoup d'autres détails liés au matériel, mais rappelez-vous les concepts importants que j'ai appris de cette connaissance.
Donc, je suggère certainement d'en apprendre davantage sur le matériel. Faites-le à un rythme raisonnable, selon vos besoins. Apprenez autant de détails que possible, mais concentrez-vous sur les concepts.
la source
Chaque développeur doit connaître les concepts de base associés à l'ingénierie informatique: arithmétique binaire, conversion de base, algèbre booléenne, portes logiques, composition d'un CPU (et ce que font les composants), cache, mémoire virtuelle, compression, détection et correction d'erreurs ...
La mesure dans laquelle ces informations doivent être connues dépend du travail du programmeur. Comme d'autres l'ont dit, un développeur de systèmes embarqués devrait être beaucoup plus familier avec les capacités matérielles et la façon d'écrire un logiciel qui utilise le mieux le matériel que, par exemple, un développeur Web.
la source