Citation de Wikipedia de l'article "Langage de programmation de haut niveau":
Un langage de programmation de haut niveau est un langage de programmation avec une forte abstraction des détails de l'ordinateur. Par rapport aux langages de programmation de bas niveau, il peut utiliser des éléments de langage naturel, être plus facile à utiliser ou être plus portable sur toutes les plateformes. Ces langages masquent les détails des opérations du processeur telles que les modèles d'accès à la mémoire et la gestion de l'étendue.
C'est-à-dire que plus le niveau du langage de programmation augmente, plus le programmeur s'éloigne du matériel sur lequel le programme s'exécute.
Maintenant, je ne connais pas les statistiques des usages linguistiques à travers les niveaux, mais je soupçonne que les langues de niveau supérieur remplacent de plus en plus les langues de niveau inférieur. Si oui, cela peut-il conduire à un déficit de programmeurs ayant des connaissances en architecture informatique? Serait-ce un problème pour l'industrie?
Je le pense. C'est une tendance qui m'inquiète. Aucune abstraction n'est parfaite ; s'il existait un moyen parfait de simplifier tout problème complexe, il remplacerait l'original très rapidement. (Cela s'est produit dans le passé, parfois avec des ordinateurs, et beaucoup plus fréquemment dans d'autres domaines qui ne se soucient pas autant de la rétrocompatibilité que nous, comme la physique.)
Cela signifie que chaque fois que vous utilisez une abstraction, il y a un élément important de complexité essentielle qu'il vous cache. Si vous ne savez pas ce que c'est, pourquoi c'est là et ce qu'il fait, vous finissez par écrire accidentellement de gros épaves de train, et vous ne savez pas comment les réparer parce que vous ne savez pas ce qui se passe vraiment.
Quiconque essaie de vous dire le contraire vend de l'huile de serpent ou n'a tout simplement pas beaucoup d'expérience avec un logiciel sérieux. Au travail, je travaille sur un programme qui gère un bon pourcentage de toutes les stations de télévision et de radio aux États-Unis. Alors que les stations et les réseaux deviennent plus grands et plus complexes, les techniques rapides et sales qui ont bien fonctionné pour concevoir un produit pour une petite station finissent par heurter de grands murs techniques lorsqu'elles sont mises en œuvre pour un réseau avec 50 stations et 200 canaux! Sans une compréhension approfondie du fonctionnement de la langue (et une langue efficace en premier lieu) et une compréhension approfondie du fonctionnement de la base de données, nos codeurs n'auraient jamais pu réussir à faire évoluer le produit.
Ce n'est pas une histoire isolée non plus. Les logiciels continuent de devenir de plus en plus complexes, pas plus simples, et je crains que ce niveau d'expertise technique ne devienne un art perdu, et les programmes de demain seront pires que ceux d'aujourd'hui, pas meilleurs.
la source
javascript:alert("Hello world")
nécessite simplement un doctorat en théorie des cordes.Oui, je pense que les gens comprendront beaucoup moins le matériel à mesure que les langues progressent (et, de la même manière, à mesure que les jeux d'instructions progressent). Mais comme cela a été noté à de nombreux autres endroits, la principale contrainte sur la plupart des programmes de nos jours n'est pas le temps ou l'efficacité du processeur, mais le temps du programmeur. Si les gens qui conçoivent des langages continuent de faire leur travail pour rendre l'abstraction efficace, et si les gens continuent à utiliser ces abstractions correctement, alors une compréhension de l'architecture informatique n'est pas entièrement nécessaire; au moins une connaissance complète n'est pas fondamentale pour être un bon programmeur de nos jours.
la source
Non, cela ne conduira pas à un déficit de programmeurs ayant des connaissances en architecture informatique. Les langues sont utilisées pour résoudre des problèmes dans un domaine particulier. Si vous souhaitez résoudre un problème particulier, vous utilisez la langue appropriée ou une langue suffisamment bonne compte tenu de vos ressources.
En réalité, quels domaines ont réellement besoin de connaître l'architecture de l'ordinateur? Cela doit être lié à une architecture matérielle particulière? Systèmes d'exploitation? Pilotes de périphérique? Bien sûr, mais même alors, seules des parties de ce code nécessitent des connaissances architecturales spécifiques.
Amélioration des performances? Oui, vous pouvez appliquer la connaissance de l'architecture de l'ordinateur pour améliorer les performances des algorithmes. Mais deux autres facteurs ont un impact plus important sur les performances: l'utilisation de meilleurs algorithmes et la connaissance de l'environnement d'exécution du langage.
En substance, des langages de programmation plus abstraits résolvent des problèmes pour lesquels les détails de l'architecture informatique ne sont pas nécessaires. Ils permettent de résoudre plus de problèmes. Les personnes qui les utilisent ne les utilisent pas pour résoudre des problèmes liés à la machine. Les personnes qui doivent résoudre des problèmes liés à la machine continueront d'utiliser des langages compatibles avec la machine. Ce n'est pas un problème à somme nulle.
la source