Il est clair que la connaissance des éléments de bas niveau est très importante dans notre travail.
Mais dans une situation où vous développez déjà un logiciel commercial à un niveau élevé, et lorsque vous avez déjà une direction choisie mais que vous n’avez aucune compétence en assemblage, n’est-il pas plus raisonnable de se concentrer sur l’étude de choses liées à votre direction? Ou y a-t-il une raison pour que vous passiez du temps à apprendre les bases de bas niveau de toute façon?
Quand est-il trop tard et quand ce n'est pas le cas? Et s’il n’est pas trop tard, comment l’apprendre de manière optimale (en ne dépensant pas trop de temps pour approfondir et comprendre)?
Réponses:
Je ne peux pas croire que personne n'a mentionné le débogage ...
Je n'ai pas écrit de code d'assemblage depuis plusieurs années. Mais je le lis assez souvent. Le débogage de haut niveau est intéressant lorsque vous avez les informations de source et de symbole, mais lorsque votre bibliothèque sophistiquée lève une exception non gérée sur les ordinateurs clients, il est trop tard pour exiger son inclusion dans la licence ...
Mais je peux toujours ouvrir le désassembleur et voir ce que votre logique de haut niveau a fini par faire , retracer l'origine des données erronées, trouver qui a modifié le registre de contrôle FPU ...
Cela a sauvé mon bacon plus souvent que je ne pense à y penser. Et il n’est jamais trop tard pour apprendre. Il existe de nombreuses références et didacticiels de qualité sur le Net, et pratiquement tous les programmes exécutés sur votre ordinateur peuvent fournir un environnement pratique.
la source
Vous n'avez pas besoin d'apprendre le langage d'assemblage, il vous suffit de comprendre comment cela fonctionne. Vous devez savoir ce qu'est XOR et compter en binaire dans votre sommeil, etc. Mais je n'ai jamais eu besoin de code d'assemblage dans mon travail, jamais.
Ainsi, comme vous le dites, la connaissance des éléments de bas niveau est importante, mais les connaissances pratiques en matière d'assemblage ne le sont pas.
la source
Si vous n’avez vraiment aucune compétence en programmation de bas niveau, je vous recommande fortement d’en apprendre quelques-unes pendant votre temps libre. Vous n'avez pas besoin de devenir un expert en la matière. juste atteindre un certain niveau de compétence. Vous devez faire beaucoup de travail mathématique vous-même, plutôt que de dépendre du compilateur ou des bibliothèques pour le faire à votre place. Cela vous aidera à comprendre la lisibilité en programmation, car la plupart des instructions d'assemblage correspondent à une instruction de processeur. Vous devez gérer vous-même la complexité de programmes légèrement plus grands, sans bénéficier d'avantages tels que
if...else
. Cela vous aidera à écrire des programmes de haut niveau plus simples, car l’expérience de l’assemblage vous aurait appris à quel point il est facile de lire.De plus, rappelez-vous que le montage n'est pas une langue! Il s’agit d’un terme générique, qui désigne le jeu d’instructions d’un processeur qui a été résumé à un langage symbolique. Différents processeurs ont différents jeux d'instructions, et donc différents langages d'assemblage. Lorsque vous apprenez «assemblage», vous apprenez un processus et non une langue.
la source
Vous aurez toujours intérêt à être sous la couverture et à comprendre un peu mieux ce qui se cache sous l'abstraction sur laquelle vous vous trouvez. Comme un de mes professeurs de collège l’a dit une fois "tous les bons programmeurs comprennent le matériel" - vous ne devez pas être capable de créer et de manipuler des circuits, mais vous devez avoir une idée de ce qui se passe là-bas - cela ne fera que rendre tu ferais mieux.
Essayez l'organisation et la conception de l'ordinateur
la source
Oui - L'apprentissage continu tout au long de la vie est une composante essentielle d'une carrière dans le développement de logiciels. Si vous souhaitez continuer à apprendre la programmation et à améliorer votre travail, vous devez apprendre l'assemblage, car il vous exposera à un nouveau langage et à une nouvelle façon d'écrire du code. Pour la même raison, je recommande d'expérimenter avec de nombreux langages / styles de programmation, notamment Ruby / Python (langage dynamique), Haskell / F # (langage fonctionnel pur), Lisp / Scheme (langage fonctionnel), etc.
Je dirais qu'il est trop tard si vous ne souhaitez plus en savoir plus sur le métier de programmeur. Par exemple, si vous avez atteint le point de votre carrière où vous passerez peut-être bientôt de la programmation à un autre domaine, tel que la gestion, l’ingénierie des systèmes, les ventes / marketing, etc. Au cours des prochaines années, je me concentrerais davantage sur les compétences nécessaires pour développer dans ce domaine, plutôt que sur la programmation.
la source
Vous devriez savoir ce que c'est et ce que fait l'ordinateur. Apprendre quelque chose comme Knuth MIX vous aidera. Surtout pouvoir juger de l'efficacité de votre code. Allez chercher l’art de la programmation informatique et lisez-le. Cela fera de vous un programmeur plus intelligent.
la source
Répondre:
la source
Je pense que vous atteignez un point de rendement décroissant à mesure que votre carrière avance. C'est-à-dire que vous devriez apprendre le langage d'assemblage tôt, car il permet une meilleure compréhension fondamentale de tout ce qui vient après. Toutefois, si vous êtes déjà sur le marché du travail et que vous avez quelques années d'expérience, vous aurez déjà une idée de la façon dont les choses fonctionnent. Par conséquent, apprendre les détails pratiques ne vous donnera peut-être pas autant d'indications. .
la source
Je ne sais pas combien il serait utile d'étudier l'assemblage. Mais au moins, faire de la programmation dans une langue comme C serait bénéfique. J'ai récemment eu à faire de la programmation en C et je l'ai trouvée plutôt éclairante. C supprime une grande partie de l'abstraction présente dans les langages de niveau supérieur. Ces abstractions ne sont pas sans coût. Vous devez gérer davantage de détails de niveau inférieur en C, où ces détails sont gérés pour vous dans un langage de niveau supérieur. En faisant de la programmation en C, vous devrez prendre conscience de ces détails. Ainsi, lorsque vous serez de retour dans votre langue de tous les jours, vous aurez toujours cette conscience et pourrez mieux apprécier ce qui se passe réellement. Cela devrait vous aider à devenir un meilleur programmeur.
la source
Dans la profession d’enseignant, du moins ici au Royaume-Uni, les enseignants doivent être beaucoup plus qualifiés que ce qu’ils enseignent. Un enseignant du secondaire devrait avoir un diplôme dans la matière qu’il enseignait, et les enseignants du primaire ont aussi un diplôme et doivent maîtriser toutes les matières principales jusqu’à un bon niveau du GCSE (secondaire). examens de fin d’études? Pas de véritable équivalent à l’échelle américaine).
Pourquoi? Parce que pour bien enseigner ou bien utiliser quelque chose, il faut le comprendre. Cela nécessite de comprendre la structure sous-jacente, la chaîne de décisions avant celle avec laquelle vous travaillez qui l'a menée. Pour bien comprendre le code de haut niveau, vous devez comprendre la couche sur laquelle il est construit, son fonctionnement, ses forces et ses faiblesses. Ceci est récursif, pour comprendre la couche inférieure, vous devez également comprendre la couche inférieure.
En fin de compte, c’est la raison pour laquelle les cours décent en informatique des universités et des collèges exigent avant tout une bonne aptitude en calcul, car c’est là l’essentiel.
Si vous manquez de connaissances dans ces domaines, votre compréhension est alors compromise. Plus le niveau que vous exploitez est proche, plus il est important de le mettre à la terre.
So: Avez-vous besoin de connaître l'assembleur en tant que codeur de haut niveau? Ça aidera.
la source
Cela avait été très important dans ma vie antérieure en tant que gourou des super-ordinateurs. À l’époque, j’avais l’impression que vous ne compreniez pas une machine avant d’avoir écrit au moins plusieurs centaines de lignes d’assembleur, et d’avoir bricolé avec elle pour essayer d’exprimer ses performances. Comme très peu de programmeurs voulaient aller aussi loin, cela me rendait vraiment indispensable. Et je parle toujours un langage commun lorsque je parle avec des types de concepteurs matériels.
Mais, vraiment, le besoin / bénéfice pour ceci est principalement vieux de deux décennies. Entre les avancées du compilateur et l'exécution avancée dans le désordre HW, il est très difficile de pouvoir jouer le héros en écrivant assembleur. Bien que je pense utile de comprendre comment les choses fonctionnent. Je prévois d’enseigner à mes enfants (étudiants de première année de classe majeure) à programmer dans un assembleur très simplifié sur une simple machine virtuelle, afin qu’ils aient une idée de ce qui se passe. Espérons que nous pourrons jouer avec des tâches telles que le déroulement, le traitement en pipeline de logiciels, les caches, la pré-extraction, le chargement par le bas, etc. Ainsi, au moins, ils sauront qu’à un certain niveau, ces tâches sont en cours.
la source