Une utilisation accrue de langages de programmation de plus en plus élevés peut-elle entraîner un déficit de programmeurs ayant des connaissances en architecture informatique?

15

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?

gablin
la source

Réponses:

16

Cela peut , mais ne conduira probablement pas à un problème.

C'est juste de l'économie. Si la grande majorité des gens perdent la capacité de comprendre l'architecture sous-jacente et qu'il y a encore un énorme BESOIN de comprendre l'architecture sous-jacente, alors ceux qui le feront auront un emploi et seront payés plus, tandis que ceux qui n'en auront pas seulement des emplois là où cela n'est pas nécessaire (et qui peuvent tout de même être payés plus ... qui sait?).

Est-il utile de savoir? Absolument. Vous serez probablement mieux. Est-ce nécessaire dans la plupart des cas? C'est pourquoi l'abstraction est si grande, nous nous tenons sur les épaules de géants sans avoir à être nous-mêmes des géants (mais il y aura toujours des géants autour).

Ryan Hayes
la source
4
Mais toutes les abstractions fuient. Connaître l'architecture sous-jacente est un must si vous voulez être le go-to guy pour dépanner les abstractions qui fuient.
dsimcha
5
@dsimcha, d'accord, mais pour être le gars incontournable, vous avez besoin que "les autres" viennent vous voir ;-) Si tout le monde a besoin de tout savoir, l'abstraction a lamentablement échoué.
Preets
1
@Preets, et c'est pourquoi de nombreuses abstractions ont lamentablement échoué. Avoir même de la place pour un go-to guy existe est la preuve qu'une abstraction a déjà échoué.
Pacerier
@Ryan, cela entraînera en fait un problème où, à l'avenir, le monde sera inondé d'applications remplies de bugs subtils dus à des couches d'abstractions qui fuient. C'est assez étonnant maintenant que des entreprises comme Google avec des ressources infinies peuvent encore avoir des bogues dans leurs applications principales.
Pacerier
3
@Pacerier google a loin de ressources infinies et rend les applications qui sont plusieurs ordres de grandeur plus complexes et qui se composent de plusieurs ordres de grandeur plus de lignes de code que la plupart des autres. prétendre que tout le monde devrait connaître les trucs informatiques de bas niveau parce que toutes les abstractions peuvent fuir, c'est comme dire que tout le monde devrait savoir comment construire une maison à partir de zéro sans outils, car une tempête pourrait venir détruire leur maison. il n'est tout simplement pas possible (ou intelligent) de dépenser de telles ressources.
sara
9

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.

Mason Wheeler
la source
5
Je l'ai entendu exprimé comme "vous devez connaître l'abstraction une couche plus bas de l'endroit où vous travaillez". Eh bien, c'était plutôt plus concis; ma mémoire est défectueuse. Donc, si vous travaillez en C ou Delphi, vous devez savoir comment fonctionne l'assemblage. Si vous travaillez dans Smalltalk ou Java, vous devez savoir comment fonctionne votre machine virtuelle. (Sans doute, vous devriez toujours savoir quelque chose sur l'assemblage!) Si vous travaillez avec TCP, vous devez savoir comment fonctionne IP. Etc.
Frank Shearar
1
Je veux dire, vous pourriez aller encore plus loin: pourquoi cela suffirait-il de simplement connaître l'assemblage? c'est juste une abstraction de haut niveau à la main sur les instructions du processeur binaire. mais attendez! langage machine? c'est juste une abstraction! vous devez apprendre comment le CPU est construit en utilisant des transistors pour construire des portes logiques! et le bus et les registres. mais attendez! transistors? c'est juste une abstraction pour une certaine configuration d'atomes. et les atomes ne sont qu'une abstraction sur les fluctuations des champs quantiques. en fin de compte, cela javascript:alert("Hello world")nécessite simplement un doctorat en théorie des cordes.
sara
1
@kai Tu es un peu ridicule . J'ai tendance à être d'accord avec vous que ce n'est généralement pas le cas que vous devez comprendre plusieurs couches pour la plupart des applications. Mais nous parlons de cas marginaux, pas de tous les jours. Bien sûr, vous n'avez pas besoin de savoir comment fonctionne la plomberie pour faire la vaisselle. Mais si de l'eau sale commence à remplir votre évier, vous devriez probablement en apprendre un peu à ce sujet avant d'essayer de le réparer. Ou, vous pouvez simplement enfoncer un morceau de barre d'armature dans le drain jusqu'à ce qu'il fonctionne à nouveau, et qui se soucie où va l'eau. (suite ...)
DrewJordan
1
@DrewJordan mon point est juste que: à moins que vous ne soyez un professionnel qui a besoin de connaître et de résoudre une certaine classe de problèmes (ou tout simplement avoir un intérêt privé vif), alors il est assez franchement absurde de prétendre que vous devez connaître le fonctionnement interne et des subtilités étranges de chaque outil que vous utilisez. J'ai simplement tiré le point de vue de sa conclusion logique. Bien sûr, savoir comment un câble Ethernet est construit vous permettrait d'en créer un nouveau, étant donné les bons outils lorsque votre connexion Internet échoue, mais dépenser du temps et de l'argent pour acquérir des connaissances lorsque vous travaillez 20 couches ci-dessus est juste du gaspillage.
sara
1
@DrewJordan bien sûr, QUELQU'UN a besoin de savoir tout cela pour que quelqu'un puisse le réparer lorsqu'une abstraction se brise, mais le POINT des abstractions est de garder le nombre de personnes qui ont besoin de connaître les détails au minimum afin que la grande majorité puisse se concentrer sur faire avancer les choses. où vous tracez arbitrairement la ligne où les choses deviennent "trop ​​basses" dépend juste de ce avec quoi vous travaillez personnellement, comme illustré avec mon argumentum ad absurdium (ce qui n'est pas une erreur, je vous le ferai savoir!)
sara
5

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.

David Hollman
la source
2
En théorie, oui, mais ce sont quelques très gros ifs .
Mason Wheeler
1

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.

Huperniketes
la source