Programmation de bas niveau - qu'en est-il pour moi? [fermé]

32

Pendant des années, j'ai envisagé de creuser dans ce que je considère comme des langues de «bas niveau». Pour moi, cela signifie C et l'assemblage. Cependant, je n'avais pas encore le temps pour cela, et cela n'a jamais été nécessaire.

Maintenant, parce que je ne vois aucune nécessité, je pense que je devrais simplement planifier un moment précis où j'étudierai le sujet ou abandonner le plan pour toujours.

Ma position

Au cours des 4 dernières années, je me suis concentré sur les "technologies Web", qui peuvent changer, et je suis un développeur d'applications, qui est peu susceptible de changer.

Dans le développement d'applications, je pense que l'utilisabilité est la chose la plus importante. Vous écrivez des applications à "consommer" par les utilisateurs. Plus ces applications sont utilisables, plus vous avez de valeur.

Afin d'atteindre une bonne convivialité, je crois que les choses suivantes sont viables

  • Bon design : fonctionnalités bien pensées accessibles via une interface utilisateur bien pensée.
  • Exactitude : le meilleur design ne vaut rien, s'il n'est pas mis en œuvre correctement.
  • Flexibilité : une application A doit évoluer en permanence, afin que ses utilisateurs n'aient pas besoin de basculer vers une autre application B, dotée de nouvelles fonctionnalités, que A pourrait implémenter. Les applications traitant le même problème ne doivent pas différer par leurs fonctionnalités mais par leur philosophie.
  • Performance : La performance contribue à une bonne expérience utilisateur. Une application est idéalement toujours réactive et exécute ses tâches assez rapidement (en fonction de leur fréquence). La valeur de l'optimisation des performances au-delà du point où elle est perceptible par l'utilisateur est discutable.

Je pense que la programmation de bas niveau ne va pas m'aider, sauf pour les performances. Mais l'écriture d'une application entière dans un langage de bas niveau pour des raisons de performances est pour moi une optimisation prématurée.

Ma question

Que pourrait m'apprendre la programmation de bas niveau, quelles autres langues ne m'apprendraient pas? Suis-je en train de manquer quelque chose, ou s'agit-il simplement d'une compétence, qui est très peu utile pour le développement d'applications? Veuillez comprendre que je ne remets pas en question la valeur de C et de l'assemblage. C'est juste que dans ma vie quotidienne, je suis très heureux que toutes les subtilités de ce monde soient abstraites et gérées pour moi (principalement par des couches écrites en C / C ++ et assemblées elles-mêmes). Je ne vois tout simplement pas de concepts, cela pourrait être nouveau pour moi, seulement des détails avec lesquels je devrais me bourrer la tête. Alors qu'est-ce que ça m'apporte?

Ma conclusion

Merci à tous pour leurs réponses. Je dois dire que personne ne m'a vraiment surpris, mais au moins maintenant, je suis sûr de laisser tomber ce domaine d'intérêt jusqu'à ce que le besoin s'en fasse sentir.
À ma connaissance, l'écriture d'assemblages de nos jours pour les processeurs tels qu'ils sont utilisés dans les processeurs d'aujourd'hui est non seulement compliquée inutilement, mais risque d'entraîner des performances d'exécution moins bonnes qu'un homologue C. L'optimisation à la main est presque impossible à cause d'OOE, alors que vous n'obtenez pas toutes sortes d'optimisations qu'un compilateur peut faire automatiquement. En outre, le code est soit portable, car il utilise un petit sous-ensemble de commandes disponibles, soit optimisé, mais il ne fonctionne probablement que sur une seule architecture.
L'écriture en C n'est plus aussi nécessaire que par le passé. Si je devais écrire une application en C, j'utiliserais tout autant des bibliothèques et des frameworks testés et établis, qui m'éviteraient d'implémenter des routines de copie de chaînes, des algorithmes de tri et d'autres types de choses servant d'exercice à l'université. Mon propre code s'exécuterait plus rapidement au détriment de la sécurité des types. Je ne souhaite ni réinventer la roue au cours du développement normal des applications, ni essayer de déboguer en regardant les vidages de mémoire: D
J'expérimente actuellement avec les langues et les interprètes, donc s'il y a quelque chose que je voudrais publier, je suppose que je ferais porter un concept de travail en C, bien que C ++ pourrait tout aussi bien faire l'affaire.
Encore une fois, merci à tous pour vos réponses et vos idées.

back2dos
la source
6
@TheLQ: ma question n'est pas pourquoi l'utiliser , mais ce que je peux en apprendre .
back2dos
1
Exemple: retour aux sources .
rwong

Réponses:

9

La programmation de bas niveau est destinée aux cas d'angle où une exigence n'est pas immédiatement présente sur les ordinateurs de bureau normaux. Cela peut être un goulot d'étranglement de la vitesse, ou un goulot d'étranglement de la mémoire ou quelque chose de complètement différent, et il est très souvent très intéressant de voir ce qui peut être fait compte tenu de ces exigences.

Considérez-le comme Haikus ou Limericks, où les restrictions le rendent intéressant.

Pour vous donner une idée de ce qui est possible dans ce qui semble impossible aujourd'hui, voici l'un des plus grands hacks de tous les temps. Échecs dans 1 Ko de RAM! http://users.ox.ac.uk/~uzdm0006/scans/1kchess/


la source
1
Je pense que je vais vraiment aller pour "les restrictions rendent ça intéressant". De toutes les choses mentionnées ici, c'est probablement la meilleure. De retour à l'école, j'ai programmé des jeux sur ma calculatrice avec une mémoire de 32 Ko et un processeur de 8 MHz. C'était amusant, mais je n'ai pas appris grand-chose dont je pourrais bénéficier maintenant.
back2dos
Downvoter, veuillez mentionner pourquoi?
29

Je pensais juste à ça récemment. Je me considère actuellement comme un développeur C # - ce qui est parfaitement bien pour ma carrière.

Cependant, de temps en temps, je passe à côté des choses de très bas niveau (essentiellement «se salir les mains» en faisant des assembleurs ou des pilotes de périphériques en C). Je manque juste la programmation. Je ne m'attends pas à ce que cela m'aide massivement dans ma carrière. Si les pilotes de périphérique ou les systèmes embarqués sont votre truc, alors cela pourrait aider beaucoup.

Plus je programme dans les langues abstraites, plus je manque ce qui m'a amené dans les ordinateurs en premier lieu: fouiner autour de l'ordinateur et voir ce qui se trémousse. Assembleur et C sont très bien adaptés pour piquer :)

En utilisant les anciennes langues, je pense que vous êtes obligé de faire à peu près tout vous-même. En C #, je peux faire quelque chose comme myArray.SortBy(x=>x.Name). Je ne pourrais pas faire ça en C. J'accepte que la langue fasse le meilleur tri pour moi. Si je devais le faire en C, je pourrais revenir à l'époque de mes modules universitaires et réviser mes différents algorithmes de tri et de recherche.

Donc, je pense que les langages de niveau inférieur vous aideraient à réviser tous les bits oubliés depuis longtemps qui ont tous été résumés. Plus un défi personnel qu'une carrière en progression.

Jonathon
la source
15
+1 pour avoir exprimé son amour de fouiner dans le matériel et voir ce qui se trémousse - un vrai geek
Gary Rowe
2
Vous pouvez écrire la fonction de tri vous-même en C # si vous le souhaitez. Vous pouvez tout aussi bien utiliser une fonction de bibliothèque pour trier en C si vous le souhaitez: gnu.org/s/libc/manual/html_node/Array-Sort-Function.html. Je dirais même qu'en utilisant des langues plus anciennes, vous devez faire moins de choses vous-même. Parce que la plupart des problèmes ont déjà été résolus. Cela n'empêche pas les gens de réinventer la roue de toute façon:
back2dos
15

Ma suggestion est de jouer avec C comme une curiosité intellectuelle. Ne faites pas un investissement lourd en temps car cela n'en vaut pas la peine.

Objectifs suggérés:

  • Rafraîchissez votre mémoire sur les structures et algorithmes de données de base.
    • C'est juste une bonne chose à savoir, comme l'algèbre et la géométrie.
    • Essayez de faire des exercices de manuels universitaires ou des puzzles de programme en C.
  • Une meilleure appréciation de la hiérarchie de la mémoire (bande passante) , depuis le cache CPU jusqu'à la latence du réseau transocéanique. Cela aidera vos compétences en développement d'applications à tous les niveaux.
    • Plus important encore, il est bon de se renseigner sur les scénarios dans lesquels un petit réarrangement discret du code de haut niveau peut entraîner une amélioration spectaculaire de la vitesse .
      • Parfois, la raison ne peut être comprise que dans l'implémentation de bas niveau dans le contexte de la hiérarchie de la mémoire.
      • Ne pas comprendre la cause naturelle de cette possibilité conduit à l' ignorance , à la peur et finalement au déni , pensant qu'il est mal pour les développeurs de haut niveau de puiser dans ce type d'optimisation. En réalité, il n'y a rien de mal à cela.
  • Appréciez l' esthétique des systèmes logiciels basés sur des composants , qui permettent aux composants de bas niveau développés en C / C ++ / Assembly d'être utilisés par des systèmes de haut niveau.
    • L'esthétique est exactement la même que la convivialité du logiciel:
      • Bon design (puissant, facile à utiliser, bien pensé)
      • Exactitude
      • Flexibilité (extensions et nouveaux comportements via la composition de pièces existantes, chacune avec un objectif clairement défini)
      • Performance (sans compliquer la convivialité)
    • Bien que vous ne puissiez pas concevoir vos propres composants de bas niveau, votre compréhension vous aidera à évaluer et à choisir les bons composants à utiliser dans vos projets de haut niveau.
  • Enfin, sachez que les composants de bas niveau sont presque toujours plus compliqués dans leurs implémentations , loin d'être insondables en regardant simplement l'interface.
    • Le niveau bas est toujours compliqué. Une bonne bibliothèque cache la complexité sans diminuer sa puissance.
    • Apprenez à lire les «notes techniques» rédigées par les développeurs de composants, qui sont des suggestions aux utilisateurs de composants de niveau supérieur sur la meilleure façon d'utiliser les composants.
rwong
la source
8

si vous voulez comprendre comment fonctionne la machine , et pas seulement la machine virtuelle dont dépend votre langage de haut niveau, alors Assembly vous l'apprendra

si vous n'avez aucune raison de vous en soucier - et la plupart des programmeurs ne le font vraiment pas de nos jours - alors ne vous en faites pas.

cela améliorera votre fondation, mais cela n'améliorera probablement pas vos applications Web

Steven A. Lowe
la source
6
C fonctionne presque aussi bien. La plupart des concepts C sont facilement traduisibles en langage machine. Apprenez C et jetez un coup d'œil à l'assembleur, et vous êtes en bonne forme.
David Thornley
J'étais sur le point de poster une réponse similaire. Je dirais que C fournit également une appréciation du fonctionnement de la machine, en particulier lorsqu'il s'agit de gérer la mémoire. De plus, de nombreux langages qui résument la complexité de la machine sont écrits en C. Au moins, la personne comprendrait vraiment à quel point ils sont choyés :)
Tim Post
1
@Jorg: intéressant. et combien de ces processeurs sont en usage commercial actif, par exemple, disons Intel x86 ou 6502?
Steven A. Lowe
1
@ Jörg, où trouvez-vous ces CPU?
1
@Thor: la vitesse n'est pas la question ici, l'éducation l'est.
Steven A. Lowe
8

Chaque langage de programmation change un peu la façon dont vous pensez de la programmation en général. Un exemple concret que je peux vous donner est quand j'ai commencé à apprendre le haskell et tout d'un coup, les éléments fonctionnels de javascript, ruby ​​et python ont pris tout leur sens. Je n'avais jamais utilisé foldl dans aucun de mes codes auparavant mais après haskell je le vois à peu près partout où je vois des tableaux. Les chances sont donc élevées que si vous apprenez un certain C, vous deviendrez beaucoup plus conscient des caractéristiques de performances relatives de diverses constructions dans votre langue préférée. Il y a quelques minutes, j'écoutais un discours sur l'écriture de javascript rapide et optimisé et le conférencier a dit: "Si c'est difficile à faire en C, ce sera vraiment lent en javascript." Son intention étant que javascript soit un langage interprété et que l'interprète soit écrit en C ou C ++.

davidk01
la source
2
+1 pour la notion de la façon dont chaque langue change votre façon de penser.
Sean
7

Si vous ne le faites pas juste pour le plaisir, parce que les geeks aiment vraiment avoir un contrôle total sur leur matériel, vous pourriez au moins avoir une meilleure idée de la vitesse à laquelle un programme peut devenir lorsqu'il est écrit en C au lieu, disons, de Java. Vous pourriez également apprendre à vraiment apprécier les fonctionnalités des langages de niveau supérieur, comme la récupération de place.

utilisateur281377
la source
1
+1 pour le plaisir geek. Même si je dois dire que je ne suis pas vraiment un geek. Et je déteste le matériel :)
back2dos
1
La différence de vitesse n'est généralement pas pertinente. Cela est particulièrement vrai pour les applications Web, où le traitement côté serveur n'est généralement pas le goulot d'étranglement.
David Thornley
David: Je suis tout à fait d'accord pour les applications Web moyennes de pain et de beurre. Dans d'autres domaines, la différence peut être très pertinente.
user281377
1
@ back2dos, si l'idée d'une programmation proche du matériel ne vous plaît pas, alors je dirais ne vous embêtez pas. Ce serait comme vous forcer à apprendre le latin simplement parce que c'était la base de beaucoup de langues romanes ultérieures.
tcrosley
2
avec suffisamment de mémoire Java est aussi rapide ou plus rapide que C.
5

Hourra pour la curiosité!

C'est très bien d'avoir une idée de ce qui se passe vraiment aux niveaux les plus bas d'un système complexe, même s'il n'y a pas de besoin logique de savoir pour ses tâches quotidiennes. De loin, la meilleure façon de faire bouger les choses au niveau des bits est de construire votre propre CPU. Vous devez penser aux opcodes au niveau du langage machine, comprendre pourquoi les ensembles d'instructions orthogonales sont si bons, les complications de la gestion des interruptions, les compromis entre les circuits complexes et les microcodes (par exemple dans les unités de multiplication), et oh tellement d'autres amusements!

Mais cela prend évidemment du savoir-faire en électronique et prend du temps, alors la meilleure chose à faire est de jouer avec un processeur 8 bits de style ancien. Les microcontrôleurs comme le 8051 sont encore largement utilisés et disponibles pour les amateurs. Cela nécessite encore un certain savoir-faire dans la gestion de l'électronique et la mise en lumière des LED sans fumer, et coûte $$ si vous n'êtes pas déjà équipé pour l'électronique.

Ensuite, la meilleure chose après cela: jouer dans un simulateur de processeur (émulateur? Je mélange ces termes) - ils existent pour Z80, 6502, 8086 ... tous les anciens 8-bitters. C'est peut-être le plus éducatif et le plus amusant pour un programmeur d'applications qui ne sait pas quelle extrémité du fer à souder contenir (bien que l'on apprenne cela assez rapidement :) Comment le texte est écrit dans la mémoire vidéo, comment les astuces de code d'assemblage contribuent aux performances. .. il y a beaucoup de choses amusantes à explorer à ce niveau.

Je ne suis pas sûr d'apprendre C comme juste un autre langage, sans une première compréhension du fonctionnement interne du processeur. Savoir comment les bits sont envoyés entre les registres du processeur et comment la mémoire accède, aide énormément à obtenir réellement des pointeurs et d'autres concepts du langage C.

DarenW
la source
+1 parce que c'était la seule réponse qui mentionnait des pointeurs. Je pensais que ce serait la réponse n ° 1 et acceptée.
Erik
4

En un mot, amusant. Quand je jouais avec l'assembleur (après avoir travaillé de VB à C ++, C, etc.), c'était tout simplement génial de déplacer des données d'une partie du processeur à une autre. C'était un sentiment génial de savoir exactement ce qui se passait à l'intérieur du CPU, sans se soucier de ce qui se passait sous ce que vous ne saviez pas. De plus, un grand sentiment de liberté - vous pouvez faire à peu près n'importe quoi, car il n'y a pas de limitations intégrées que vous trouvez dans les langues de niveau supérieur.

De plus, pouvoir se tourner vers n'importe qui qui a programmé dans une autre langue que ce soit et aller 'bien, si vous n'êtes pas assez hardcore ...' était enfantin, amusant enfantin.

Dan O
la source
4
Il se passe en fait beaucoup de choses à l'intérieur du CPU que vous ne voyez pas de l'assembleur. Des choses comme l'exécution dans le désordre, l'hyperthreading et la mise en cache de la mémoire sont effectuées automatiquement par le processeur. Vous pouvez toujours descendre d'un cran, jusqu'à atteindre les particules fondamentales de matière. Ou la matière n'est-elle que de l'énergie?
Kevin Panko
On peut éviter un tel mystère sous le capot en construisant leur propre CPU à partir de transistors et de puces logiques: D (l'un de mes fantasmes technologiques préférés!) Quoi qu'il en soit +1 pour une excellente réponse.
DarenW
Bon point! Bien que la dernière fois que j'ai utilisé l'hyperthreading d'assembleur ait été plus généralement considéré comme faisant référence à la couture rapide, plutôt qu'aux processeurs ...
Dan O
2

Y a-t-il une bonne raison d'apprendre / pratiquer la programmation de bas niveau? J'ai moi-même différentes réponses selon le contexte.

Tout d'abord, j'enseigne la programmation C (mais aussi OCaml et Java), motiver les étudiants à apprendre la programmation du côté dur est probablement la partie la plus difficile de la tâche. Le meilleur argument que j'ai trouvé jusqu'à présent est la "compréhension": les langages de niveau supérieur cachent beaucoup de mécanismes sous-jacents et parfois pas pour de bon, ils vous poussent également à rester au niveau supérieur même lorsque certaines astuces de bas niveau pourraient vraiment être utiles ( pour la performance, la plupart du temps.) Comprendre ce que vous utilisez peut vraiment aider à mieux l'utiliser. Mon expérience d'enseignement me prouve que les étudiants qui ont appris la programmation de niveau inférieur (et d'autres compilateurs non orientés utilisateur) sont plus adaptables et apprennent plus rapidement de nouveaux concepts ou outils de niveau supérieur.

Deuxièmement, comme vous le dites, les performances font partie de l'expérience utilisateur. La plupart du temps, les performances sont vues comme une question d'écriture complexe et proche du code machine. Ce n'est pas toujours le cas, les performances sont bien plus une question d'algorithmes et de structures de données mais aussi d'interaction entre algo et données. J'utilise un projet spécial sur le sujet, fondamentalement c'est une simple recherche de chemin, mais le vrai problème est la taille des données: le graphique est infini. La seule façon d'obtenir des performances de descente et de tenir en mémoire est d'écrire un allocateur de mémoire dédié (en fait deux, un allocateur de pool et un allocateur de recyclage). C'est quelque chose que vous ne pouvez pas faire dans la plupart des langages de niveau supérieur. En fait, la plupart des langues récupérées avec des déchets auront des problèmes de performances et de mémoire.

Il y a probablement beaucoup plus d'arguments tels que la stabilité (dans le sens de l'histoire et de la longévité) des langages de niveau inférieur contre ceux "hype" (le fait qu'un langage considéré comme référence future pour la programmation puisse disparaître dans quelques années est long histoire, on ne peut pas prédire la longévité d'une nouvelle substance, mais cet argument reste vrai pour les langues plus anciennes ...), bien sûr, il y a aussi une question de goût, ou le fait que ce qui peut être fait dans la plupart des langues de haut niveau peut aussi être fait dans des langages de niveau inférieur mais pas l'inverse (mais compte tenu de cela, nous devrions tous coder en assembleur uniquement ...)

Je suis moi-même piège dans les deux mondes (tout à fait différemment), je passe plusieurs années à travailler sur le concept de programmation théorique, la conception et la preuve de systèmes de types, et pour ce faire, je n'utilise et n'étudie que des langages de très haut niveau (principalement fonctionnels, mais aussi purs) orienté objet.) Récemment, je reviens de l'autre côté (principalement la programmation système et noyau) et me suis retrouvé assez à l'aise dans ce domaine, je m'amuse beaucoup! Pour moi, l'étape suivante consiste à trouver le point commun: des fonctionnalités de langage de niveau supérieur pour une programmation de niveau inférieur! Donc, jusqu'ici, il n'y a pas de langage pour cela (peut-être google's go pour la programmation du système userland) et j'envisage l'idée de construire mon propre langage, mais c'est une autre histoire.

Marwan Burelle
la source
1

Je dirais qu'il n'y a pas beaucoup de raisons dans votre domaine, mais si vous deviez faire du calcul haute performance (par exemple, jeux, sciences, etc.), cela serait justifié.

Nuit noire
la source
1
Je ne suis pas sûr qu'il reste de nombreux domaines de haute performance. Le jeu ne nécessite certainement pas de langages de bas niveau. Pour les jeux, vous utilisez généralement des moteurs ou au moins vous commencez avec OpenGL ou quelque chose. Et pour la science, la parallélisation est très importante, et la justesse. Je suppose que vous seriez mieux avec OCaml ou quelque chose. Les domaines critiques en termes de performances ne sont plus ceux qui génèrent beaucoup de chiffres, mais qui sont utilisés très fréquemment, tels que les noyaux, les pilotes, les moteurs de stockage, etc. Je suppose que moins de 1% de tous les développeurs les touchent vraiment.
back2dos
4
@ back2dos, les moteurs de jeu n'apparaissent pas juste de nulle part - quelqu'un doit les écrire. Et selon vous, dans quoi OpenGL est-il écrit? Pas c#. On n'a pas besoin d'utiliser des langages de bas niveau pour la plupart des applications de nos jours ... mais beaucoup de gens travaillent dans les autres domaines qui en ont besoin.
GrandmasterB
1

Je pense que de nos jours, la programmation de bas et de haut niveau peut être assez séparée. Fondamentalement, cela signifie que vous pouvez vivre toute votre vie professionnelle sans connaître C et assembleur sans aucun problème. Cela dit, le langage de programmation C ne peut pas vous apprendre beaucoup du point de vue de la programmation et de la conception.

Juste par curiosité, vous pouvez apprendre comment les choses fonctionnent à un niveau inférieur. Quand j'étais à l'université, par exemple, j'ai aimé utiliser gcc pour générer du code assembleur à partir de C ++. Il était utile de comprendre comment le polymorfisme et l'exception sont mis en œuvre. Mais à part cela, les seules choses que vous pouvez apprendre de C de nos jours sont:

1) astuces de mémoire sale. C est le meilleur moyen de comprendre qu'il n'y a pas de bas en bas dans la folie des programmeurs :)

2) Les GOTO sont réellement utilisés (et utiles) pour annuler les erreurs

3) apprenez mieux comment fonctionne l'allocation de mémoire (différence entre tas et pile?).

Donc, fondamentalement, ma thèse est la suivante: si vous avez déjà terminé l'Université et que vous n'avez toujours pas besoin de C, alors ne l'apprenez pas :)

Emiliano
la source
2
Connaître C pour savoir comment les choses fonctionnent à un faible niveau peut aider à comprendre pourquoi les choses vont mal lorsque vous avez une abstraction qui fuit.
Michael Shaw
1

Vous n'avez pas besoin de comprendre les langues de bas niveau, mais vous devez comprendre ce qui se passe sous les couvertures de votre langue de haut niveau choisie. L'utilisation d'un langage de bas niveau vous apprendra cela, mais ce n'est pas le seul moyen.

Voici quelques exemples de concepts de bas niveau qui peuvent avoir un impact sur les langages de haut niveau.

Pointeurs:

List<object> listOne = new List<object>();
List<object> listTwo = listOne;

listTwo.Add(new object());

Debug.WriteLine(listOne.Count); //do you know what this will be?

Cordes:

string initial = "initial";
string another = initial;

another = "changed!";
Debug.WriteLine(initial); //what about this?

Listes:

Quand utilisez-vous une liste par rapport à une liste chaînée? (Presque impossible de le savoir sans comprendre à un niveau assez bas le fonctionnement d'une liste)

-

Faut-il connaître tout ça? Non, mais cela peut avoir un impact et si vous voulez maîtriser une langue de haut niveau, vous devez avoir une assez bonne idée du fonctionnement interne.

Alistair
la source
1

Que pourrait m'apprendre la programmation de bas niveau, quelles autres langues ne m'apprendraient pas?

Plus particulièrement, il vous apprendra comment les ordinateurs fonctionnent réellement. Il n'y a pas d'autre moyen d'apprendre cela que par le biais d'une programmation de bas niveau. Peu importe le type d'applications que vous programmez, cela vous sera toujours utile. Vous comprendrez réellement ce qui se passe au fond de tout ce truc sur le Web. Et si vous travaillez avec Windows, toute l'API est écrite en C, sachant que cette langue vous permettra de communiquer directement avec le système d'exploitation, chaque fois que vous aurez besoin d'utiliser une fonctionnalité qui fait défaut à vos langues actuelles et à leurs bibliothèques.

Bien sûr, la programmation de bas niveau vous permettra de travailler avec des choses entièrement différentes, comme la programmation intégrée et la programmation en temps réel où asm / C / C ++ est un must. Si vous n'avez aucun intérêt pour ce type d'applications, il n'y a en effet pas grand besoin d'apprendre asm / C / C ++.

En outre, vous apprendrez des bits et des octets. Manipulations de bits, hexadécimales, etc. Les algorithmes de chiffrement en sont un exemple lorsqu'il est utilisé.


la source