Question

Il m'a frappé l'autre jour que je sais presque rien sur le matériel que j'attends mon logiciel pour fonctionner. Je suis un dev pendant environ 5 ans, mais je ne l'ai pas regardé dans la théorie du matériel / conception depuis que je suis parti de l'Université. Je ne construis pas même mes propres machines plus parce que, être brutalement honnête, je préfère payer les quelques dollars supplémentaires et laissez-le Comp abandon Sci le construire à la boutique pour moi.

Alors qu'il est clairement important d'avoir une bonne compréhension des bases de ce qui se passe sous le capot, il est abstraire si loin de nous que devs nous ne vraiment pas besoin de nous préoccuper des subtilités de Programmed I/O ou Memory-Mapped I/O etc, ..

Ou nous?

Notez que je parle de tous vos jours LOB dev ici et non les gars dédiés en métal nu.

Alors, définissez « moyenne » comment vous mais dans l'ensemble, la profondeur si un programmeur compétent capable de plonger?

Était-ce utile?

La solution

Cela dépend de haut niveau de votre développement est.

  1. Si vous développez des systèmes embarqués, cela signifie beaucoup de connaissances du matériel (proche d'un niveau d'EE).
    • Si vous êtes dans un domaine spécialisé, comme à faible niveau de programmation graphique 3D pour les jeux, vous devez savoir tenants et les aboutissants de cartes graphiques spécifiques.
    • Si vous faites des applications Web ou de bureau, sans doute pas tant.

Mais dans tout développement, vous devriez probablement connaître les fondamentaux. Par exemple.

  1. Où sont les goulots d'étranglement dans l'architecture von-Neumann.
    • Comment fonctionne le cache du processeur (important dans le multi-threading).
    • Comment la planification du système d'exploitation sera différent sur un seul processeur CPU multi-processeurs (encore une fois, important dans le multi-threading).
    • La façon dont IO fonctionne et pourquoi lorsque vous écrivez un fichier ne signifie pas nécessairement que vous les données sont immédiatement persistant.
    • Comment est lent IO et pourquoi plus applications de base de données sont IO-liés.
    • Pourquoi le réseau est encore plus lent et moins fiable que IO (et réseau sans fil encore plus).

Par contre, je ne pense pas connaître les détails comme ce que IO mémoire mappée est, ou connaître la différence entre NAND et NOR est vraiment important pour un développeur moyen * (bureau / web). Même la connaissance de l'architecture d'un processeur moderne va probablement être une science en soi de voir la complexité qu'ils ont au cours des dernières années, pour ne pas mentionner que le

Autres conseils

Je trouve qu'il est extrêmement utile de pouvoir comprendre le langage d'assemblage émis par le compilateur, C ++ dans mon cas. Ceci est très utile lors de l'examen des questions telles que l'optimisation et la résolution des problèmes de débogage difficiles.

Il est certainement possible d'obtenir sans que rien savoir sur le matériel sous-jacent. Cependant, même en sachant un peu, par exemple, la façon dont fonctionnent les caches et quelles opérations sont rapides / lentes sur votre machine cible particulière vous aidera à prendre beaucoup de meilleures décisions de conception lors de la conception du logiciel.

Sur une note personnelle, je pense qu'il ya une grande satisfaction de savoir comment la machine je passe au moins 10 heures par jour au travail;)

Et puis pourquoi se contenter de la moyenne?

Dans de nombreux cas, vous ne savez pas quel matériel que votre programme sera exécuté, donc trop se soucier des détails spécifiques d'une machine n'a pas de sens. Les utilisateurs peuvent exécuter votre exécutable Win32 dans une machine virtuelle sur certains matériels 64Bit RISC, qui sait. À moins que vous connaissez certainement le matériel cible, il est préférable d'utiliser les abstractions que le système d'exploitation et les libs standards vous donnent, et de les utiliser comme prévu. Faites confiance à des gens qui construisent le système d'exploitation, le compilateur, les libs de faire leur travail correctement.

Les développeurs OS font un excellent travail afin de faire abstraction du monde physique sous-jacente. Leur but est de fournir au développeur moyen d'une interface commune à de nombreux hardwares afin qu'il puisse se concentrer sur son application et développer un code qui est portable, facile à entretenir et en mesure d'obtenir des optimisations sur les mises à jour OS.

Donc, pour un développeur moyen de faire une demande moyenne, je pense qu'il est préférable de ne pas poser trop de questions sur le matériel.

scroll top