Demandez à Hackaday : Apprenez l'assemblage en premier, en dernier ou jamais ?
MaisonMaison > Blog > Demandez à Hackaday : Apprenez l'assemblage en premier, en dernier ou jamais ?

Demandez à Hackaday : Apprenez l'assemblage en premier, en dernier ou jamais ?

Jul 15, 2023

Il y a quelques jours, je suis tombé sur un article en ligne dans lequel quelqu'un faisait remarquer le livre « Apprendre à programmer avec Assembly » et demandait si quelqu'un avait déjà appris le langage assembleur comme premier langage de programmation. J'ai dû sourire car, si vous avez un certain âge, votre langue maternelle pourrait bien avoir été l'assemblage, même s'il s'agissait de l'assemblage de machines qui n'ont jamais existé.

Bien sûr, c'était il y a longtemps. De nos jours, il est plus probable que si vous avez plus de 40 ans, vous ayez d'abord appris le BASIC. En rajeunissant, vous commencez à vous tourner vers Java, Javascript ou même C. Cela m'a cependant fait réfléchir : les gens devraient-ils apprendre l'assemblage, et si oui, quand ?

Je ne suis pas étranger aux langages d'assemblage, mais je ne suis pas sûr de connaître une réponse moderne et défendable à cette question. Vous pouvez bien sûr trouver de nombreux tutoriels (dont certains de moi). Il existe de nombreux cas où quelques lignes d'assembly embarqué peuvent faire une grande différence dans un programme. Le débogage d'un mauvais compilateur peut également nécessiter des tâches d'assemblage. Il semble donc qu’au moins certaines personnes doivent encore apprendre l’assemblage. Reste la question de savoir quand l’apprendre et, en corollaire, qui doit l’apprendre.

Ma réponse traditionnelle serait que tout le monde devrait l’apprendre le plus tôt possible. Mais c'est peut-être parce que c'est comme ça que je procédais il y a des années. Je ne suis pas convaincu que ce soit la bonne réponse pour tout le monde aujourd'hui. Cependant, je vais faire valoir mon point de vue.

Si vous êtes satisfait d'écrire du code pour valider les codes postaux en Javascript, vous n'avez probablement pas besoin d'apprendre l'assemblage. Mais si vous voulez vraiment devenir un programmeur de haut niveau, vous devrez y faire face tôt ou tard. L’apprendre tôt présente certains avantages. Si vous comprenez ce qui se passe réellement au niveau du CPU, un pointeur en C ne semble pas être un concept difficile. Être capable d'examiner la sortie d'un compilateur et de comprendre ce que cela signifie est souvent éclairant lorsque vous essayez d'apprendre quelque chose de nouveau.

Le seul problème est que le langage assembleur moderne est difficile. Les jeux d'instructions du processeur sont étranges et il existe des problèmes avec les processeurs qui exécutent dans le désordre. Ensuite, il y a le code déplaçable et d'autres détails sur lesquels il est facile de trébucher et pas très utiles à connaître.

Il y a donc deux façons de procéder. Tout d’abord, choisissez un processeur plus ancien. Quelque chose comme le Z80, le 1802 ou le 6502 n'est pas si difficile à apprendre, et il existe une tonne de ressources disponibles. Vous n'avez pas de matériel de ce type ? Qui s'en soucie? Utilisez un émulateur. Vous pouvez probablement même en trouver qui s'exécutent dans le navigateur et disposent d'excellentes capacités de débogage non disponibles dans le matériel réel. J'ai programmé sur des dizaines de processeurs, et ils sont tous assez similaires. Compte tenu de l’étrangeté du 1802, je ne le recommanderai peut-être pas même si je l’aime moi-même. C'est par contre très simple à apprendre. Le PDP-8 ou le PDP-11 sont d'autres bons candidats, même si certaines méthodes de fonctionnement des mini-ordinateurs sont rarement vues aujourd'hui.

Ou choisissez une machine qui n’existe pas. La plupart d’entre eux ont été conçus pour l’apprentissage, c’est donc un plus, et beaucoup d’entre eux disposent également d’émulateurs modernes. Si vous deviez en choisir un, je vous suggèrerais Mix. Les livres de Knuth sont classiques et utilisent Mix. Ils ont influencé tout le monde, vous verrez donc des échos des idées de Knuth dans chaque système informatique que vous toucherez. (Ce n'est pas du moins un ordinateur quantique.)

Ne remontez pas trop loin. La programmation de l'EDSAC, du TUTAC ou du 4004 n'est probablement pas du tout représentative de l'informatique moderne. Honnêtement, aucun de ces processeurs ne l’est. Mais ils peuvent aider à préparer le terrain pour s’attaquer à des processeurs plus avancés si nécessaire. Comme le dit le vieil adage : il faut ramper avant de marcher et marcher avant de courir.

Vous pourriez aussi facilement argumenter l’autre côté. Peut-être que le langage assembleur aura plus de sens une fois que vous aurez compris pourquoi vous avez besoin de pointeurs pour créer des listes chaînées et pourquoi le saut conditionnel est une chose. Si vous programmez depuis un certain temps, certaines idées telles que les nombres hexadécimaux et les adresses vous sont peut-être déjà familières.

Cependant, le mauvais moment pour l'apprendre est probablement lorsque vous rencontrez un bogue insoluble et que vous soupçonnez que le compilateur n'optimise pas correctement votre code. Ou à minuit avant une date limite lorsque vous devez supprimer ce petit plus de votre code.