Dans quelle mesure pensez-vous qu'il serait bon d'enseigner aux gens l'assemblage (une variante) comme premier langage de programmation? Cela demanderait beaucoup plus d'efforts que d'apprendre par exemple Java ou Python, mais on aurait une bonne compréhension de la machine plus ou moins dès la «programmation du premier jour» (par rapport à de nombreux langages de niveau supérieur, au moins). Qu'est-ce que tu penses? Est-ce une idée réaliste, du moins pour ceux qui sont prêts à faire l'effort supplémentaire? Avantages et inconvénients?
Remarque: je ne suis pas enseignant, juste curieux
Réponses:
Il serait difficile d'inspirer un nouveau programmeur avec du code assembleur. Un bonjour dynamique, le site Web de l'utilisateur est beaucoup plus cool avec moins d'effort. Je ne dis pas que les leçons fondamentales sont les mêmes, mais un cours d'introduction aura un grand contenu inspirant, sinon il n'y aura pas de deuxième cours.
Je me souviens que mes premiers cours de programmation étaient enseignés dans Scheme et j'étais surtout frustré de ne pas pouvoir facilement compiler en un fichier .exe et "exécuter" mon programme (je pensais que MS Visual Basic était la fin de la programmation). Ce n'est que des années plus tard que j'ai vraiment compris avec quel outil puissant je jouais. Je pense que je l'aurais davantage apprécié et mieux retenu ces leçons si j'avais eu une première expérience dans quelque chose d'un peu plus pragmatique au début.
la source
Je pense que c'est une idée terrible à la fois pour les étudiants en génie logiciel et pour les étudiants CS, et généralement pour tous ceux qui s'intéressent davantage à la programmation qu'à l'électronique.
Cela peut être fait, mais cela ne signifie pas que cela devrait être fait. À l'époque, la façon de faire des trucs vraiment cool avec des ordinateurs personnels était d'apprendre d'abord l'assemblage. C'était à cause des premières limitations matérielles - les langages de niveau supérieur n'étaient tout simplement pas assez puissants et rapides. De nos jours, vous pouvez faire des choses beaucoup plus cool, en moins de temps, avec un langage de niveau supérieur.
Quoi de plus intéressant, d'écrire un prototype rapide pour un jeu simple et de jouer avec des variations sur un algorithme, ou de lutter avec des registres et des trucs de bas niveau?
la source
Je ne pense pas que ce soit une idée terrible, mais à quel point un programme complexe allez-vous donner à ces étudiants? L'assemblage demande beaucoup plus de travail. Il serait peut-être bon de commencer avec des choses très basiques, puis de les déplacer vers quelque chose de plus facile à travailler, une fois qu'ils auront apprécié de travailler au niveau inférieur. Les nouveaux étudiants ont parfois des idées en tête, ils coderont le prochain Halo, ou MS Office ou AutoCAD ou quelque chose, et quand ils verront combien de travail va dans un langage d' assemblage simple , ils pourraient avoir peur, alors soyez clair qu'il y a de meilleures choses que l'assemblage, puis déplacez-les vers cela une fois qu'ils ont vu les concepts. Vous pouvez également essayer d'enseigner assemlby en même temps que quelque chose comme C.
Aussi, quel langage d'assemblage? Je me souviens un peu que MIPS était relativement facile à travailler, et je pense qu'il fonctionne dans un émulateur donc pas de danger de causer des problèmes à la vraie machine, bien qu'il puisse y avoir de meilleurs outils que cela maintenant.
Cela pourrait bien fonctionner, s'il est bien fait. Fais attention...
la source
L'assemblage était la première langue que nous avons apprise à l'école d'électronique (dans les années 1900) et cela semblait être un choix naturel. Nous avons progressé dans nos cours, des composants discrets à la logique résistance-transistor, aux portes logiques, aux circuits intégrés, aux processeurs et à la programmation en assemblage. Beaucoup d'étudiants de ces classes n'avaient jamais programmé dans aucune langue auparavant et ils l'ont bien compris.
L'assemblage peut donc être un bon choix pour une première langue si les bonnes bases sont posées à l'élève. Pour quiconque dont le but est d'être un développeur d'applications ou Web, cependant, je pense que l'assemblage est probablement un point de départ trop bas.
la source
Une chose est sûre, si les gens, apprenant d'abord Assembly, réussissent, ils seront des programmeurs incroyables.
Cela me rappelle quand j'ai appris à conduire. Ma maman a insisté
Le raisonnement étant qu'elle ne voulait pas que je sois distrait avec plus que ce dont j'avais besoin, tout d'un coup.
Appliquez cela à l'apprentissage de la programmation, est-il nécessaire de tout jeter en même temps sur un apprenant? Ils apprennent ce qu'est une variable en même temps qu'ils apprennent combien de données ils peuvent stocker dans quel type de registre?
Plus de la moitié de ma classe a échoué à notre cours d'assemblage, et c'était un groupe de personnes qui, à cette époque, se considéraient comme connaissant la programmation depuis plus de 2 ans.
Ma préférence personnelle, si je devais tout réapprendre, serait de commencer par une langue qui fait autant que possible pour moi. Puis, au fur et à mesure que j'apprends, recule vers les langues de niveau inférieur.
la source
Non
Pourquoi est-ce avantageux? Pouvez-vous fournir un exemple ou un indice sur la façon dont cela pourrait être utile?
Avantages: aucun.
Désavantages:
Un encombrement d'anecdotes aléatoires sur les drapeaux et les états et registres et les schémas complexes d'adressage de la mémoire et les périphériques d'E / S et DMA et les interruptions et cycles d'horloge et autres. Aucun de ces éléments ne permet de comprendre les langages et les ordinateurs modernes basés sur des machines virtuelles.
Déconnexion de la résolution de problèmes réelle à laquelle les ordinateurs sont réellement appliqués.
Un divorce avec les utilisateurs finaux et les données pratiques et les problèmes de traitement qu'ils doivent résoudre.
Une série inutile d'explications sur la machine et la machine virtuelle, un compilateur et un interprète et toute la pile de tortues qui soutiennent le monde.
Beaucoup de détails "c'est l'implémentation physique d'un" objet "" dans le langage de niveau supérieur auquel ils parviennent finalement.
Beaucoup de détails "c'est ainsi que les fonctions de la méthode sont distribuées" dans le langage de niveau supérieur auquel elles parviennent finalement.
Beaucoup d'explications «cela ne s'applique pas au 80386 mais s'applique au chipset 80586».
Un grand nombre d'appels de bas niveau de l'API du système d'exploitation pour qu'un programme ASM fasse tout ce qui semble être utile à quelqu'un.
L'intérêt d'un premier langage de programmation n'est pas de maîtriser le chipset.
Le but d'un premier langage de programmation est de
Comprenez comment penser l'informatique.
Comprendre comment effectuer un traitement de données utile.
Comprenez comment faire quelque chose. Conception - code - test.
la source
Si j'étais chargé de concevoir un programme, j'aurais deux cours en même temps le premier semestre: asm + organisation / architecture informatique de base, et un cours basé sur SICP fondé à Scheme. Le second semestre serait orienté autour des structures de données et des algorithmes élémentaires dans Scheme.
La deuxième année serait un projet d'un an utilisant Delphi, C ++ ou C #, axé sur la conception de logiciels modernes (conception OO, conception fonctionnelle, génie logiciel, contrôle de version, etc.).
L'effet devrait être de donner une base intense à la fois dans l'abstrait et dans la pratique, menant à des cours approfondis en troisième et quatrième années.
la source
J'avais l'habitude de faire des cours d'initiation à l'informatique, et je pense que c'est une mauvaise idée.
Cela dit, je pense que le matériel d'assemblage / informatique devrait être une classe très précoce - idéalement, le premier trimestre de la majeure. Demandez aux étudiants d'avoir un langage de haut niveau sous leur ceinture, puis passez immédiatement au matériel de bas niveau avant de passer aux structures de données - idéalement dans un langage qui nécessite une gestion de la mémoire.
la source
L'assemblage était ma deuxième langue, juste après BASIC. Cependant, quand j'apprenais, c'était une autre époque. Mon Commodore 64 avait d'autres langues disponibles, mais si vous vouliez que quelque chose semble rapide, ou vouliez faire plus d'une chose à la fois, vous deviez apprendre le langage d'assemblage et comment travailler avec les interruptions. Le système d'exploitation de l'environnement graphique (GEOS) qui a donné au Commodore un système de fenêtrage était également entièrement assemblé. C'était dans l'ensemble la meilleure API d'assemblage que j'ai jamais vue. C'était également la seule plate-forme que j'utilisais pour styliser votre code. C'est vrai, vous pouvez utiliser l'italique et différentes tailles de police - quelque chose qui s'est avéré utile pour lire les commentaires.
J'ai beaucoup appris sur le fonctionnement du Commodore, mais la puce Motorolla avait un ensemble d'opcode très simple. Il n'est pas trop difficile de garder moins de 255 opcodes séparés les uns des autres. Je n'ai pas été en mesure de partager mon expérience sur la puce Motorolla 6510 avec la programmation pour Intel 8086. Les puces et les architectures système étaient trop différentes. J'imagine que j'aurais eu le même problème pour passer à la puce Motorolla 68000 d'Amiga également.
En bref, je suis en désaccord sans réserve avec tous ceux qui disent que l'Assemblée devrait être une bonne première langue. Voici pourquoi:
De nos jours, le langage d'assemblage est utilisé pour accélérer certaines actions finies où l'assemblage artisanal serait plus rapide que l'assemblage généré par le compilateur. La structure principale de l'application se fait dans un langage de niveau supérieur comme C, C ++, etc. Bien sûr, la programmation d'assemblage deviendrait très importante si vous commencez à écrire des compilateurs. Combien d'entre nous le font?
la source
J'ai pris l'assemblée dans ma dernière année de lycée. J'avais déjà pris des cours en Java, Pascal, C et C ++, et je n'étais compétent dans aucun d'entre eux et j'ai vraiment aspiré à l'Assemblée - était la seule personne à suivre le cours dans un programme d'apprentissage à distance au collège communautaire, m'a pris un mois ou deux avant que quiconque puisse même faire fonctionner le compilateur pour moi.
Je ne pense pas qu'il soit nécessaire ou sage d'apprendre le langage d'assemblage en premier, mais il est judicieux d'apprendre ce qu'ils vous apprennent au cours des premières semaines d'assemblage, sur le fonctionnement du processeur et certaines des astuces de débogage. Ce truc que j'ai trouvé très intéressant et instructif en tant que néophyte.
la source
Je ne vois pas pourquoi cela ne pourrait pas être fait, bien que la qualité d'une idée dépende totalement de la foule que vous lui enseigneriez également. Quelqu'un dont l'objectif final est d'être un développeur Web s'ennuierait probablement et pourrait quitter car cela ne lui donnerait pas la satisfaction immédiate de créer quelque chose que Python, Ruby, etc. S'ils veulent éventuellement travailler sur du matériel ou d'autres projets de bas niveau, je pense que ce serait un bon début (à condition que vous donniez suffisamment de fond d'architecture informatique pour que cela ait du sens). Je pense que cela pourrait aider les gens à écrire un meilleur code à l'avenir, bien que je pense que ce serait plus difficile que d'apprendre d'autres langues pour commencer.
la source
Je pense que le langage d'assemblage n'aura de sens que si vous vous concentrez sur des choses comme:
Sans accent dans ce domaine, c'est juste un langage simpliste qui aura tendance à enseigner les mauvaises habitudes d'organisation. Le codage au niveau de la machine est bien d'avoir dans la trousse à outils pour savoir comment les choses fonctionnent, mais ce n'est pas une bonne langue maternelle.
Je voudrais obtenir quelqu'un intéressé par une langue de niveau supérieur. Ensuite, enseignez le C ++; puis assemblage en mettant l'accent sur la façon dont les compilateurs C ++ génèrent du code assembleur. Comprendre les v-tables et d'autres fonctionnalités de langage de niveau supérieur aidera grandement le développeur à réfléchir au fonctionnement réel des langues plutôt que de simplement classer les informations sous «magie».
la source