L'assembleur est-il essentiel pour coder ?

Le problème exposé dans ce sujet a été résolu.

Je suis toujours dubitatif devant ce genre de réponses, près de 6 mois après la dernière, qui n’apporte en soi pas grand chose. Parce que bon, quand on est développeur web, je ne suis pas convaincu que connaitre l’assembleur aide en quoi que ce soit. Je dirai même que ça pousse vers ce qui est, dans ce domaine, de mauvaises pratiques.

Aujourd’hui, il y a tout plein de gens qui font du calcul haute performance, et qui ne descendent pas plus loin que le C. C’est le moment ou jamais de rappeler qu’il existe un langage plutôt haut niveau, bien vieux, et très performant : le Fortran ; et je ne suis pas convaincu qu’apprendre l’assembleur aide à coder correctement en Fortran…

+3 -0

Avec une 20aine d’instructions machine, on doit faire un programme

fatov

Moui. Le jeu minimal ARM c’est 31 instructions (et selon les versions il y en a des spécifiques), x86 en dénombre plus d’un millier.

L’assembleur apporte également de la connaissance technique indispensables pour des logiciels demandant un maximum de rapidité (Jeux, par exemple)

fatov

A part si tu développes des choses dans les fin-fonds d’un moteur de jeu, tu n’auras jamais besoin d’assembleur. Et même dans le fin fond d’un moteur, c’est plutôt sa connaissance qui est nécessaire pour comprendre comment avoir une meilleure génération de code. Pas pour développer directement. C’est trop coûteux à développer, impossible à maintenir et complètement dépendant de la version de l’architecture selon ce que tu fais. Hors de ce scénario là, pas besoin d’assembleur. Donc en gros pour le jeu, assembleur c’est niet.

Non puis accessoirement même pour les OS embarqués, on code à plus de 95% en C, et on n’utilise l’assembleur que pour les tâches pour lesquelles vraiment on n’a pas d’autre choix (parce que C n’a pas les instructions nécessaires).

Pour optimiser, il faut un code qu’on peut appréhender avec une vision large et ce n’est pas possible avec de l’assembleur. Les codes sont simplement trop gros pour un cerveau humain.

@Gabbro

Le sujet est ancien mais rien n’empêche d’y faire une petite contribution, non ?

Dans toutes les écoles informatique et les filière Électrotechnique, on a au minimum un petit cours sur l’assembleur…

Après, c’est clair que pour faire du Web, pas besoin de connaitre l’assembleur ni même du C et autres langages, il suffit généralement de faire du copier coller sans même savoir ce que l’on fait…

Et pour finir, je trouve ta réponse à mon commentaire bien prétentieuse est hautaine je ne faisais qu’apporter un avis, je n’affirme rien…

@Ksass`Peuk

Heu, un millier d’instructions pour un proc X86 ? Tu compte comment, de 100 tu passe à 1000 :) https://fr.wikipedia.org/wiki/Jeu_d%27instructions_x86

Quand tu utilise 50 instructions en assembleur, c’est le bout du bout du monde…

Après, c’est clair que pour faire du Web, pas besoin de connaitre l’assembleur ni même du C et autres langages, il suffit généralement de faire du copier coller sans même savoir ce que l’on fait…

fatov

Dis donc, c’est bien argumenté et très objectif ce que tu dis là. Laisse moi deviner, tu ne pratiques pas le développement web ?

Même moi j’ai arrêté de troller sur le developpement web1 en y découvrant des trucs bons à provoquer des nuits blanches chez les plus poilus des adeptes de la Sacro-Sainte Programmation Système…

Par ailleurs le fait que l’assembleur soit toujours enseigné en école d’ingénieur ne constitue pas non plus un argument valide, à moins de volontairement occulter le fait que sortir d’une école d’ingénieur en informatique ne donne absolument pas la garantie qu’on a les connaissances requises pour exercer son métier aujourd’hui.

Perso j’estime qu’une pratique superficielle de l’assembleur permet d’établir un lien appréciable dans la représentation mentale que l’on se fait du développement, entre ce qui se passe dans le ventre d’une machine et le code que l’on écrit dans un langage X ou Y. Mais de là à dire que c’est essentiel en toutes circonstances, faut pas pousser mémé dans les orties non plus.


  1. Même si je reste incommodé par l’odeur de transpilation qui y règne. 

+6 -0

Après, c’est clair que pour faire du Web, pas besoin de connaitre l’assembleur ni même du C et autres langages, il suffit généralement de faire du copier coller sans même savoir ce que l’on fait…

Et pour finir, je trouve ta réponse à mon commentaire bien prétentieuse est hautaine je ne faisais qu’apporter un avis, je n’affirme rien…

Je te prie de m’excuser d’avoir été prétentieux et hautain. Je réalise maintenant que tu es clairement plus savant que moi sur la question ⸮

+0 -0

@nohar

"Mais de là à dire que c’est essentiel en toutes circonstances"

C’est une constante sur ce forum de déformer les propos en plus de faire de la polémique sur du vide. Je n’ai jamais dit que l’assembleur était indispensable !

Sur ce, bonne journée…

Dans toutes les écoles informatique et les filière Électrotechnique, on a au minimum un petit cours sur l’assembleur…

Non ! J’enseigne l’électrotechnique, et il n’existe même pas un cours sur l’assembleur que ça soit venant de moi, mes collègues dans mon ou d’autres établissements.

Si le collègue enseigne l’assembleur, c’est parce-qu’il le connaît, mais l’apprentissage d’un langage reste avant tout dans notre métier d’électrotechnicien un besoin, et donc un outil souvent de configuration de tel ou tel machines domotiques et industrielles. Le plus souvent, c’est le C/C++ et python qui sont utilisés selon les compétences de l’enseignant évidemment.

Maintenant si un collègue a cette compétence, ça n’empêche pas d’exprimer cela en pratique, mais si c’est juste théorique, et dire ’ça vous fait réfléchir sur une logique’, je ne suis pas d’accord, pour moi cela est le rôle de l’algorithmie.

La connaissance de l’assembleur sera un énorme plus dans le raisonnement du développeur…

fatov

Comme cela a été dit, cela dépend quel développeur. Un développeur C y gagnera à mon sens pas mal de compréhension (par exemple sur des comportements indéfinis du langage) ainsi qu’eventuellement en optimisation (l’Assembleur ayant des instructions spécifiques que le C n’a pas), par contre cela sera parfaitement inutile pour un développeurs Perl, Python ou Java (hormis un gain en culture générale, bien entendu) par exemple, en bref à n’importe quel développeur employent un langage d’un peu plus « haut niveau » (je me demande d’ailleurs si cela est même intéressant pour un développeur C++…).

C’est le moment ou jamais de rappeler qu’il existe un langage plutôt haut niveau, bien vieux, et très performant : le Fortran ; et je ne suis pas convaincu qu’apprendre l’assembleur aide à coder correctement en Fortran…

Gabbro

Á ce sujet, sais-tu si le Fortran gère les instructions vectorielles ? Parce qu’en C, actuellement, c’est pas la joie…

+0 -0

Á ce sujet, sais-tu si le Fortran gère les instructions vectorielles ? Parce qu’en C, actuellement, c’est pas la joie…

Il y a des trucs prévus (voir DO CONCURRENT, ou la doc de gfortran « -std=f2008ts allows the Fortran 2008 standard including the additions of the Technical Specification […] 18508 on Additional Parallel Features in Fortran. »), ifort semble avoir des trucs (parfois activable avec une directive de compilation, ou dans le fichier – cf -parallel -par-report), mais en standard, avec gfortran, sans OpenMP, la réponse est « pas à ma connaissance ».

Il y a surement des options à la !dir$ simd BLABLA qui existe, mais c’est souvent chez Intel.

+0 -0

L’assembleur, ça sert pour tout le monde !
J’ai raison.

Sérieusement … Je ne pense même pas que l’assembleur soit utile à un développeur C++ ni même C.
C’est dans le sens contraire, le C est utile pour apprendre l’assembleur. Rarement dans l’autre sens de nos jours.

C’est difficilement justifiable d’apprendre l’assembleur en premier langage (ou avant le C).
C’est difficilement justifiable d’utiliser de l’assembleur dans la majorité des programmes actuels

+0 -0

Heu, un millier d’instructions pour un proc X86 ? Tu compte comment, de 100 tu passe à 1000 :) https://fr.wikipedia.org/wiki/Jeu_d%27instructions_x86

fatov

100 c’est ce que tu atteints quand tu as compté ce qui est ajouté jusqu’au 80286. Et il y a encore une sacré putain de liste derrière (et la page wikipedia ne recense par tout ni toutes les combinaisons directes).

@fred1599

Je maintiens qu’en en filière électrotech classique (j’en suis sortis depuis -5ans), l’assembleur est le premier langage enseigné pour apprendre à programmer sur les automates… Le fameux feu tricolore qui ne sert à rien en ligne d’instruction !

Bien évidement, on zappe rapidement vers un langage plus évolué et plus pratique, on est d’accord… ===> Attention, je n’ai pas dit un qu’un automaticien utilise l’assembleur pour coder un automate, quoique, certains anciens y arrivent :)

@Ksass`Peuk

J’ai l’impression que tu confonds INSTRUCTION et OPCODE :)

MOV EAX,X ===> MOV est l’instruction ===> OPCODE X1

MOV AX,X ===> MOV est l’instruction ===> OPCODE X2

MOV AH,X ===> MOV est l’instruction ===> OPCODE X3

MOV AL,X ===> MOV est l’instruction ===> OPCODE X4

5 Opcode différents pour une seule instruction…

+1 -1

C’est dans le sens contraire, le C est utile pour apprendre l’assembleur. Rarement dans l’autre sens de nos jours.

ache

MMm… Je ne te rejoins pas sur ce point, je ne pense pas que le C soit très utile pour comprendre l’Assembleur, à tout le moins pas plus qu’un autre langage impératif compilé comme le Fortran ou le Pascal. C’est plutôt l’Assembleur qui t’explique, par exemple, les comportements en cas de débordement d’entier, la manière dont les pointeurs sont représentés, pourquoi il n’est pas si simple de passer d’un entier à un flottants, etc.

C’est difficilement justifiable d’apprendre l’assembleur en premier langage (ou avant le C).

ache

Je ne te rejoins pas non plus ici, je pense au contraire que cela peut être une bonne piste comme premier langage. Après, bon, on a la chance aujourd’hui d’avoir des langages bien plus abordables et il n’y a a priori pas de raisons de s’en priver sauf contraintes spécifiques ou préférences. Cela étant, peu importe quel langage on emploie, en dessous, c’est toujours de l’Assembleur d’où peut-être un intérêt de commencer par ce dernier.

@Gabbro : merci pour l’info et pour les liens. :)
J’avoue que je suis toujours un peu surpris de ne pas voir un meilleurs supports de ses instructions, mais bon, c’est pas non plus la panacée à mettre en oeuvre. :-°

+0 -0

C’est dans le sens contraire, le C est utile pour apprendre l’assembleur. Rarement dans l’autre sens de nos jours.

ache

MMm… Je ne te rejoins pas sur ce point, je ne pense pas que le C soit très utile pour comprendre l’Assembleur, à tout le moins pas plus qu’un autre langage impératif compilé comme le Fortran ou le Pascal. C’est plutôt l’Assembleur qui t’explique, par exemple, les comportements en cas de débordement d’entier, la manière dont les pointeurs sont représentés, pourquoi il n’est pas si simple de passer d’un entier à un flottants, etc.

Effectivement, pas plus que le Fortan ou Pascal. Mais après, je ne suis pas d’accord. J’ai appris tout ce que tu cites avant d’avoir appris le peu d’assembleur que je connaisse. Après tu peux considérer ça comme de l’assembleur et du coup, ben je suis d’accord, mais pour moi, c’est pas de l’assembleur. C’est juste le fonctionnement de l’ordi.

Je ne te rejoins pas non plus ici, je pense au contraire que cela peut être une bonne piste comme premier langage. Après, bon, on a la chance aujourd’hui d’avoir des langages bien plus abordables et il n’y a a priori pas de raisons de s’en priver sauf contraintes spécifiques ou préférences. Cela étant, peu importe quel langage on emploie, en dessous, c’est toujours de l’Assembleur d’où peut-être un intérêt de commencer par ce dernier.

Taurre

Tu fais des études de droit c’est ça ? x’) Avocat du diable va x’D

Car dans ton argumentaire, tu dis clairement qu’il n’y a pas de raison de se priver de langage de haut niveau. Vu qu’il est moins simple(rapide/claire) de coder un programme fonctionnel en assembleur qu’en C ou en Python, il n’y a pas de raison de l’apprendre en premier langage. De plus, même si c’est la base des langages et qu’au final, ça serra de l’assembleur, ben rarement on regarde l’assembleur produit au final. Déjà car souvent on l’a pas et ensuite car c’est vachement inutile.

Le seul argument qu’il a en sa faveur est que c’est la base des langages et cet argument n’est pas suffisant pour moi car trop loin justement de la vie réelle.

+0 -0

C’est une constante sur ce forum de déformer les propos en plus de faire de la polémique sur du vide. Je n’ai jamais dit que l’assembleur était indispensable !

D’abord je n’ai jamais parlé de "indispensable" donc je te remercierai de ne pas inventer mes propos.

Ensuite le fait que tu aies énoncé que le developpement web consistait à copier-coller du code sans même avoir besoin de le comprendre n’est pas du vent, c’est au mieux du troll, au pire de l’ignorance hautaine et méprisante, et dans tous les cas c’est totalement déplacé dans le contexte. Je ne sais pas pour ce qui est des autres forums mais sur celui-ci, ce n’est pas toléré.

Le minimum que j’attendais de toi une page plus tard était que tu t’en excuses.

Enfin je maintiens que le fait qu’une chose soit enseignée en école ou en études supérieures n’est pas un argument valable pour déterminer si ladite chose est utile ou non : en 10 ans j’ai dû utiliser une seule fois une transformée de Fourier discrète, 0 fois UML, 0 fois Merise, 2 fois Java… Et rien de ce que j’ai appris en école d’ingénieur ne me sert dans mon travail aujourd’hui. Pire, je contredis au quotidien mes cours de génie logiciel en implémentant et en encourageant une méthodologie dont les racines datent des années 60 et qui n’a rien à voir avec ce qu’on m’a enseigné.

Quant à l’assembleur il ne m’a servi que dans un domaine très précis : l’apprentissage des bases de la sécurité logicielle et de la rétro-ingénierie, comme hobby. Et note que pour cela il a fallu que j’apprenne un langage d’assemblage de 20 ans plus récent que celui que l’on m’avait enseigné à l’époque. Autant dire qu’il a fallu que je le réapprenne entièrement sur le tas pour arriver à mes fins, ce qui m’a pris une demi-journée à tout casser.

Partant de là, la seule réponse qui me semble valable à la question "Devrais-je apprendre l’assembleur ?", est non. Si quelqu’un en est à se poser la question, c’est qu’il n’en a pas besoin dans l’immédiat et donc qu’il y a de très grandes chances que ça ne lui serve à rien.

+6 -0

@nohar

Troll ?

Oui, le devellopement web est une histoire de copier coller de 90% des cas.
A l’époque ou le web c’est démocratisé, il n’y a avait pas d’école de dev web, pour apprendre, il fallait étudier le code source des pages, faire du copier coller sur des trucs html et java intéressant…
Ensuit de nombreux petits sites sont arrivés avec un tas de petits cours sur le html, php, etc… Des sources en pagailles, scripts php, etc… étaient disponibles, il n’y avait qu’a se servir, changer 2/3 truc et roule ma poule… Pas besoin de sortir d’une grande école à cette époque pour dev un site web complet, c’est la même chose aujourd’hui… Va demander à un dev web de te faire une simple addition ou soustraction en binaire sans la calculette de Windows
Et oui, aujourd’hui, les dev ne connaissent même pas l’essentiel, fait le test autour de toi pour t’en convaincre… Et idem pour les jeux, aujourdh’ui, on prend du tout fait, on ecrit le moins de code possible…
Idem pour les langage de programmation, on est sur une couche de plus en plus haute, on ne maitrise plus rien, on uilise des fonctions toute faite dont on ne connait rien de la structure… Le développement aujourd’hui, c’est de la PAO

Un dev qui connait l’assembleur sera un très bon dev
Un dev sans connaissance de l’assembleur fera son travail
Voila ma réalité…

Ton avis est que l’assembleur est inutile, le miens est qu’il est utile… Balle au centre
A moins que ton avis soit la vérité et l’avis des autres une pensée inutile…

M’excuser pour quoi ?
Il faudrait que je m’excuse d’avoir un avis contraire au tient… La blague

J’ai hésité à réagir ou non ; le métier de développeur évolue, et ce qui était indispensable partout hier (additionner en binaire) est inutile dans la plupart de cas aujourd’hui. Mais c’est en vrai cette phrase qui me pousse à réagir :

Voila ma réalité…

« Ta » réalité ? Ne serait-ce pas les faits alternatifs qui débarquent ? Il y a ma réalité, ta réalité, balle au centre ? Je dis des choses fausses, mais c’est mon avis, mon opinion, donc respectez là ?

Clairement, non.

Depuis le début, tu nous fais le sophisme du vrai écossais.

– Les développeurs codent mieux s’ils connaissent l’assembleur.
– Pas les développeurs web.
– Les vrais développeurs codent mieux s’ils connaissent l’assembleur.

Ne viens pas dire que tu ne trolles pas, tu ne fais que ça.

+5 -0

Si la litanie que tu viens de pondre provient de ce que tu as appris dans ton école il y a moins de 5 ans, alors tu viens précisément de prouver ce que je disais : tu décris exactement le web tel qu’il était à la fin des années 1990.

Ce que tu appelles un bon développeur, c’est quelqu’un dont le travail a depuis longtemps été remplacé par une machine qui fait la même chose non seulement plus vite, mais surtout de façon infiniment plus fiable.

C’est moche de voir un jeune ingénieur tenir ce genre de propos.

+2 -0

Va demander à un dev web de te faire une simple addition ou soustraction en binaire sans la calculette de Windows

Quel est l’intérêt de faire une addition ou soustraction binaire ? En 8 ans de pratique d’ingénieur en informatique, je n’ai jamais eu besoin de faire ça, la dernière fois que j’y ai touché c’était pendant un TP de microcontroleur en DUT GEII que les diodes allumées correspondaient bien au résultat voulu.

Ensuit de nombreux petits sites sont arrivés avec un tas de petits cours sur le html, php, etc… Des sources en pagailles, scripts php, etc… étaient disponibles, il n’y avait qu’a se servir, changer 2/3 truc et roule ma poule… Pas besoin de sortir d’une grande école à cette époque pour dev un site web complet, c’est la même chose aujourd’hui…

Et dès que tu veux sortir du site de présentation statique, comment fais-tu ? Par exemple pour un site de vente en ligne, qui doit tenir des centaines de milliers d’utilisateurs par jour, des pointes à plusieurs milliers en quelques minutes quand tu lances une promo, qui doit s’interfacer avec une dizaine d’outils dans le SI et qui doit garantir l’intégrité et la sécurité des transactions ?


PS :

Et oui, aujourd’hui, les dev ne connaissent même pas l’essentiel, fait le test autour de toi pour t’en convaincre… Et idem pour les jeux, aujourdh’ui, on prend du tout fait, on ecrit le moins de code possible…

Idem pour les langage de programmation, on est sur une couche de plus en plus haute, on ne maitrise plus rien, on uilise des fonctions toute faite dont on ne connait rien de la structure… Le développement aujourd’hui, c’est de la PAO

C’est une bête question de pragmatisme et de définition de ce qu’on appelle « l’essentiel ». Le développement devient de plus en plus complexe, cf par exemple cet article. Il n’est plus imaginable, en 2017, de maîtriser le fonctionnement du programme de bout en bout comme ce fut peut-être le cas dans les années 60 – tout simplement parce que c’est devenu impossible.

Je suis un peu déçu d’apprendre que je suis un si mauvais développeur. Mais bon, je m’en remettrai.

En attendant, fatov, si tu sais copier-coller tes contributions au code de ZdS sont bienvenues !

+11 -0

Va demander à un dev web de te faire une simple addition ou soustraction en binaire sans la calculette de Windows

C’est marrant, je fais des masques / addition / soustraction binaire régulièrement (hebdomadairement) dans mon milieu pro, et pourtant je ne le fais jamais à la main. Parce que bon, pourquoi enfoncer un clou à la main quand on à un marteau ? (par contre je connais le principe si je devais le faire, mais ça c’est normal, j’en ai besoin pour exercer mon métier).

Bref, ce sujet est bien illustré par les très bons Sam&Max

+5 -0
Ce sujet est verrouillé.