Demandez à Hackaday : Apprendre l’assemblage en premier, en dernier ou jamais ?

Il y a quelques jours, je suis tombé sur un article en ligne dans lequel quelqu’un m’a signalé le livre « Apprendre à programmer avec l’assemblage » et a demandé si quelqu’un avait déjà appris le langage d’assemblage comme premier langage de programmation. J’ai dû sourire car, si vous avez un certain âge, votre premier langage a peut-être bien été l’assemblage, même si c’était l’assemblage pour des machines qui n’ont jamais existé.

Bien sûr, c’était il y a longtemps. Il est plus probable, de nos jours, si vous avez plus de 40 ans, que vous ayez d’abord appris le BASIC. Si vous êtes plus jeune, vous commencerez à vous orienter 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 ?

Le langage d’assemblage est une représentation textuelle du code machine que votre CPU exécute

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 trouver de nombreux tutoriels, bien sûr (dont certains de moi). Il existe de nombreux cas où quelques lignes d’assemblage embarquées peuvent faire une grande différence dans un programme. Le débogage d’un mauvais compilateur peut également nécessiter des côtelettes d’assemblage. Il semble donc qu’au moins certaines personnes aient encore besoin d’apprendre l’assemblage. Cela laisse 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 dès que possible. Mais c’est peut-être parce que c’est comme ça que je l’ai fait 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 plaider ma cause.

Le cas du début

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 être un programmeur de haut niveau, vous devrez y faire face tôt ou tard. L’apprendre tôt a certains avantages. Si vous comprenez ce qui se passe réellement au niveau du processeur, un pointeur en C ne semble pas être un concept difficile. Être capable de regarder la sortie d’un compilateur et de comprendre ce que cela signifie est souvent éclairant lorsque vous essayez d’apprendre quelque chose de nouveau.

Cependant…

Le seul problème est que le langage d’assemblage moderne est difficile. Les jeux d’instructions du processeur sont étranges et il existe des problèmes avec les processeurs qui s’exécutent dans le désordre. Ensuite, il y a le code relocalisable et d’autres détails sur lesquels il est facile de trébucher et qui ne sont pas très utiles pour en savoir plus.

Même si vous ne pouvez pas vous permettre un Altair, vous pouvez obtenir une réplique. Ou restez simplement avec l’émulation logicielle

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 y a une tonne de ressources disponibles. Vous n’avez pas de matériel comme ça ? On s’en fout? Utilisez un émulateur. Vous pouvez probablement même en trouver qui s’exécutent dans le navigateur et qui ont 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 recommanderais peut-être pas même si je l’aime moi-même. Il est par contre très simple à apprendre. Le PDP-8 ou le PDP-11 sont d’autres bons candidats, bien que certaines façons de faire des mini-ordinateurs soient 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 ont également des émulateurs modernes. Si vous deviez en choisir un, je 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 un ordinateur quantique, du moins.)

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 vieil adage : il faut ramper avant de marcher et marcher avant de courir.

Le cas du retard

Vous pourriez aussi facilement discuter de l’autre côté. Peut-être que le langage d’assemblage a plus de sens une fois que vous comprenez 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 avez un bogue insoluble et que vous soupçonnez que le compilateur optimise votre code de manière incorrecte. Ou à l’heure de minuit avant une date limite lorsque vous devez raser ce petit peu supplémentaire de votre code.

Qu’en penses-tu?

C’est, après tout, « Ask Hackaday », alors dites-nous ce que vous en pensez dans les commentaires. Expliquez pourquoi personne n’a besoin d’apprendre l’assemblage. Ou dites-nous votre avis sur le meilleur processeur à apprendre. Apprendre dans le navigateur ? Nous ne suggérons pas WebAssembly, mais peut-être que vous n’êtes pas d’accord. Quels sont les meilleurs ressources et livres en ligne ? Quelle est votre histoire préférée à propos de cette époque où la connaissance de l’assemblage a sauvé la situation ?

(Effet de pluie numérique de [Rezmason]du générateur.)

François Zipponi
Je suis François Zipponi, éditorialiste pour le site 10-raisons.fr. J'ai commencé ma carrière de journaliste en 2004, et j'ai travaillé pour plusieurs médias français, dont le Monde et Libération. En 2016, j'ai rejoint 10-raisons.fr, un site innovant proposant des articles sous la forme « 10 raisons de... ». En tant qu'éditorialiste, je me suis engagé à fournir un contenu original et pertinent, abordant des sujets variés tels que la politique, l'économie, les sciences, l'histoire, etc. Je m'efforce de toujours traiter les sujets de façon objective et impartiale. Mes articles sont régulièrement partagés sur les réseaux sociaux et j'interviens dans des conférences et des tables rondes autour des thèmes abordés sur 10-raisons.fr.