Apprendre l'architecture informatique en tant que programmeur [fermé]

12

Je rencontre généralement des gourous à SO et à d'autres endroits (instructeurs, auteurs de livres, etc.) qui diraient quelque chose dans le sens "This will cause alignment issues"ou d'autres informations de bas niveau.

Je veux en savoir plus sur tous ces petits morceaux qui sont relevantà la programmation. Maintenant, généralement, quand je vois des livres de bas niveau (livres d'architecture informatique par exemple), ils sont trop bas et s'adressent aux personnes dont le principal domaine d'intérêt est l'architecture informatique et non la conception de logiciels.

Avez-vous des recommandations pour les livres qui passent par des trucs de bas niveau qui sont pertinents pour les programmeurs?

Samaursa
la source
4
Vous voulez des "livres qui passent par des trucs de bas niveau" mais vous ne voulez pas des livres qui sont trop "de bas niveau"? L'apprentissage de l'architecture pour certains programmeurs peut être extrêmement avantageux. Analogue à un développeur Web qui comprend la pile TCP / IP. Ce n'est jamais si utile que si vous en avez vraiment besoin. \
Chris
1
@Chris: Je voulais dire "bas niveau pour les programmeurs" ... techniquement, nous pouvons aller jusqu'à une architecture CPU complète, et cela sera sans doute utile un jour, mais étant donné que nous avons tous un temps limité, un livre qui enseigne des choses de bas niveau que tous les programmeurs devraient connaître seront parfaites.
Samaursa
Dans ce cas, tout livre d'introduction vous amènera dans la bonne direction, où vous le prendrez ensuite, c'est votre choix en fonction des besoins ou du désir.
Chris
Une personne qui conduit une voiture avec une transmission automatique profite de savoir ce qu’elle est et comment elle fonctionne pendant la conduite. Je crois que vous devenez un meilleur programmeur en apprenant à programmer au moins un peu, en langage assembleur, de la même manière que je pense que vous devenez un meilleur pilote lorsque vous apprenez à "piloter le stick".
Warren P

Réponses:

16

Un bel ensemble de livres précisément à cet effet est la série "Write Great Code" de Randall Hyde ( Vol.1 Vol. 2 ): description de l'architecture de la machine explicitement du point de vue de ce que vous devez savoir pour écrire du code efficace dans des langages de haut niveau .

Kilian Foth
la source
À quelles langues de haut niveau cela s'appliquerait-il? Cela inclurait-il Python, JavaScript, C #, Scala par exemple?
Job
@Job - Je n'ai pas lu les livres, mais je dirais que cela s'appliquerait à tous ceux qui pourraient / pourraient tirer parti de choses comme le multithread et le traitement 64 bits. L'exécution des langues que vous avez mentionnées rendrait probablement ces connaissances utiles (surtout si vous êtes également administrateur de serveur ou exécutez ces langues en dehors d'un environnement Web).
Shauna
Hyde est un gourou des langues d'assemblage, donc pour lui, «de haut niveau» signifie principalement C. Mais son contenu est tout aussi important pour les utilisateurs de langues encore plus élevées; Les chaînes, les appels de procédure, etc. ne sont vraiment pas si différents au niveau matériel, qu'ils soient déclarés en C ou en Python.
Kilian Foth du
Je pense que tout langage natif compilé (C, C ++, Pascal, Objective-C) qui permet également un peu de langage d'assemblage, bénéficierait le plus de ce livre. Cependant, les gens qui utilisent Python et écrivent des extensions pour cela en C, ou même ceux qui utilisent java et n'utilisent aucune méthode native, pourraient faire un peu plus de réflexion sur le coût de ce qu'ils font, et comment faire leur travail efficacement au sein de la plateforme qu'ils utilisent.
Warren P
Bien que je n'aie pas encore lu les livres, je vais sélectionner cette réponse comme correcte en fonction des critiques / résumés du livre.
Samaursa
6

Malheureusement, je ne connais pas d'équivalent moderne aux microprocesseurs: le point de vue d'un programmeur par R. Dewar. Le plus proche que je connaisse est Computer Organization and Design, Fourth Edition: The Hardware / Software Interface par David A. Patterson et John L. Hennessy, mais je ne suis pas sûr que vous ne le considérerez pas trop bas; vous le ferez à coup sûr pour leur autre opus, Computer Architecture, une approche quantitative.

En ligne, ce http://www-uxsup.csx.cam.ac.uk/courses/Architecture/course.pdf vous donnera peut-être ce que vous voulez.

AProgrammer
la source
Le lien vers le pdf est mort.
2015
5

Pour les plates-formes x86, récupérez une copie des manuels des processeurs Intel IA-32 et Intel 64 . Le manuel de référence sur l'optimisation aborde un grand nombre de ces problèmes d'un point de vue bas pour les processeurs Intel x86. AMD propose également des manuels similaires couvrant les mêmes problèmes.

La plupart des autres architectures de CPU ont des manuels similaires qui traitent des problèmes de performances. ( Par exemple ARM et PowerPC .)

gris-fondu
la source
3

Je trouve que "Computer Architecture: A Quantitative Approach" par Hennessy et Patterson ( lien Amazon ) est une approche très solide et solide de l'architecture informatique, avec pas mal d'études de cas directement liées à la programmation.

Il est utilisé à divers degrés dans plusieurs cours d'architecture CS de premier et deuxième cycles aux États-Unis.

Il a également obtenu une excellente critique sur Ars Technica il y a quelque temps.

Bitgarden
la source
1
Bien que j'aime ce livre - je possède les quatre éditions - il est réalisé en tant qu'architectes informatiques, pas en tant que programmeurs.
AProgrammer
3

C'est ce que j'utilise dans ma classe Computer Systems maintenant Computer Systems: A Programmer's Perspective (2nd Edition) et alors que la classe vient de commencer, je l'ai étudié et j'aime vraiment ça.

Voici la description du livre:

Peu d'étudiants en informatique ou en génie informatique auront jamais l'occasion de construire un système informatique. D'un autre côté, la plupart des étudiants devront utiliser et programmer des ordinateurs presque quotidiennement. Systèmes informatiques: le point de vue d'un programmeur présente les concepts importants et durables qui sous-tendent les systèmes informatiques en montrant comment ces idées affectent l'exactitude, les performances et l'utilité des programmes d'application. L'approche pratique du texte (y compris un ensemble complet de laboratoires) aide les étudiants à comprendre le fonctionnement «sous le capot» d'un système informatique moderne et les prépare à de futurs cours sur des sujets liés aux systèmes tels que les compilateurs, l'architecture informatique, les systèmes d'exploitation, et le réseautage.

Jetti
la source
C'est un livre incroyable !!
Armando
2

C'est beaucoup de travail, mais la pragmatique du langage de programmation peut être exactement ce que vous recherchez. Le livre est théoriquement principalement sur l'analyse et la compilation (qui sont des connaissances essentielles pour ceux qui veulent vraiment apprendre la programmation) et dans le processus, vous finirez par apprendre comment les concepts du langage se traduisent en ce qui se passe à un niveau bas. Mieux encore, vous apprendrez cela pour de nombreuses langues à la fois et vous pourrez comparer et contraster intelligemment le fonctionnement de différentes langues.

Je ne peux le recommander que si vous pouvez consacrer plusieurs mois à l'apprentissage du matériel. Ce n'est pas le genre de choses que vous venez de survoler et que vous êtes soudainement éclairées. Mais si vous êtes sérieux, je le recommande vivement.

btilly
la source
2

C'est peut-être faux en biologie, mais en informatique, "l'ontogenèse récapitule la phylogénie" à peu près. Un aperçu historique des architectures informatiques depuis les premiers ordinateurs est un excellent moyen de comprendre le sujet de l'architecture informatique du point de vue d'un programmeur; les conceptions informatiques sont presque toutes des améliorations des conceptions antérieures.

Autrement dit, je recommande d'étudier des conceptions de systèmes plus anciennes et complètes, plutôt que des livres théoriques sur "l'architecture informatique" qu'ils vous donnent en informatique. Comprendre vraiment la conception des systèmes et faire un excellent travail d'écriture de logiciels. La compréhension intuitive de l'architecture des systèmes informatiques nécessite la maîtrise de nombreux concepts. Je pense que si vous commencez à l'époque où les architectures informatiques étaient plus faciles à gérer en taille et en portée, vous pourriez aider votre père à écrire un meilleur code.

(Cette série de livres "écrivez un bon code" qu'un autre gars a mentionné a fière allure, au fait, et j'ai édité ma question pour supprimer toute aspersion que j'avais précédemment jeté sur l'apprentissage à partir d'un livre, car elle a fière allure! )

Certaines choses qui enseignent très bien l'architecture informatique:

  1. J'aime choisir des machines des années 80 comme points de départ pour expliquer et démontrer des choses aux gens, car c'est à ce moment-là que j'ai commencé à utiliser les ordinateurs. J'ai utilisé le guide de référence du programmeur commodore 64 pour montrer aux gens un lieu de saut où la connaissance de la programmation et la connaissance de l'architecture informatique se rencontrent. Avec un tel livre, et peut-être un émulateur commodore 64 fonctionnant sur votre PC pour que vous puissiez essayer des choses, vous apprendrez comment les systèmes informatiques dans l'incarnation classique des années 80 de l'architecture informatique, sont vraiment construits. À mon avis, un exemple concret est un meilleur point de départ, qu'une douzaine de modèles théoriques auxquels il manque les détails du monde réel qui font fonctionner les choses. Si vous savez ce qu'est un registre, ce qu'est une ALU, ce qu'est un bus et ce qu'est une horloge, et quels systèmes de signalisation sont utilisés dans une ancienne conception des années 80, qui vous donneront les bases que vous devez savoir pour comprendre quelque chose de récent, comme "l'architecture de pont de sable" d'Intel. Historiquement, regardez en arrière sur les originaux, par exemple recherchez l'architecture "Von neumann", sur wikipedia.

  2. Aller de l'avant de mon premier point quelques années; Découvrez l'architecture IBM PC d'origine, le langage d'assemblage 8086 et le bus ISA. À partir de cela, et de ses limites, la compréhension de ce que contient un processeur "Intel COre i7", de ce que font les bus PCI et PCI-e et pourquoi vous en avez besoin, peut se dérouler plus naturellement. L'architecture PC d'aujourd'hui a encore un peu de "gueule de bois" par rapport à la conception originale du PC IBM. La façon dont le chargement (démarrage) du programme initial (système d'exploitation) se produit sur un PC 2011 doit encore beaucoup à l'héritage du PC IBM d'origine et de son BIOS ROM, et de ses paramètres CMOS dans un PC d'origine.

  3. Utilisez et modifiez une version préconfigurée de Linux qui fonctionne sur certains périphériques non PC intégrés, et vous en apprendrez beaucoup sur l'architecture informatique intégrée, non seulement sur l'architecture technique, mais aussi sur la raison pour laquelle certaines fonctionnalités sont présentes. Un bel exemple qui est disponible à bas prix est le TS-7200, qui a un joli PC-104 (bus ISA, comme dans le PC d'origine). Les ordinateurs PC-104 (bus ISA 16 bits intégré compatible avec les broches de l'ère IBM PC / AT 80286) sont un excellent moyen pour un non-concepteur de cartes de construire un système intégré, car les modules sont empilables. Vous voulez des E / S supplémentaires ou des périphériques? Empilez simplement quelques modules. Le TS-7200 a un cœur non x86 (un processeur ARM9) qui est capable d'exécuter soit big-endian soit little-endian. Si vous n'avez pas encore rencontré "l'endianisme" dans votre parcours d'apprentissage de l'architecture, c'est un bon endroit pour le rencontrer.

Warren P
la source
0

La plupart des livres sur le langage d'assemblage discuteront des fonctionnalités d'architecture pertinentes, mais généralement uniquement pour l'architecture que le livre cible. Vous obtiendrez donc des informations sur les déversements de cache et les techniques de mappage de pages MMU, mais probablement rien sur l'endianité.

TMN
la source