Quel est l'objectif de développement «idéal» des langages de programmation?





Des informations sur la publication d'une nouvelle version d'un langage de programmation particulier apparaissent à intervalles réguliers. Et à chaque nouvelle version, ses capacités s'étendent, de nouvelles constructions de syntaxe ou d'autres améliorations sont ajoutées.



Et cela ressemble beaucoup au développement de la technologie, comme dans tout autre domaine de la technologie. Lorsque les créations créées sont améliorées avec la prochaine étape. Plus rapide, plus haut, plus fort ... et en même temps beaucoup plus difficile.



L'article du poisson d'avril "Démonstration de programmation" m'a fait réfléchir à ce problème .



Il est clair que la date de publication de l'article parle d'elle-même. Néanmoins, les nouveaux standards C ++, les spécifications Java qui sortent constamment ou la nouvelle syntaxe de PHP 8, vous font involontairement vous demander si le développement des langages de programmation va dans le bon sens? Après tout, la plupart des innovations ajoutent de la complexité à l'outil de travail principal et résolvent certains problèmes, en ajoutant implicitement beaucoup d'autres.



Et que devrait-il y avoir à la fin des progrès dans le développement d'une discipline telle que la programmation? Ou au moins une langue spécifique? Dans le but d'atteindre quel objectif «idéal» ultime les nouvelles normes de langage de programmation sont-elles développées?



Si vous fantasmez sur l'objectif ultime idéal du développement, par exemple le transport, alors ce sera un mouvement instantané à n'importe quelle distance avec une charge utile arbitraire et une consommation d'énergie nulle.



Ou, par exemple, quel est le but idéal de la médecine? Les pauvres ne sont pas tombés malades et les riches ne se sont pas rétablis, probablement du traitement de toute maladie et de l'immortalité biologique.



Bien entendu, l'objectif «idéal» est un concept très simpliste. En fait, «idéal» est synonyme de «inaccessible», car elle sera toujours remise en cause par la nécessité de maintenir un compromis entre différentes conditions aux limites mutuellement exclusives.



Mais vous ne pouvez pas comparer directement le développement de logiciels avec le processus de développement dans d'autres disciplines techniques. En effet, lors de la création d'un produit final dans n'importe quel domaine technique, toutes les opérations de production complexes qui nécessitent une participation humaine directe peuvent presque toujours être divisées en parties ou étapes distinctes et plus simples.



Ceci est fait, entre autres, pour que la complexité d'une opération effectuée ne soit pas prohibitive pour l'interprète. Mais comment cela peut-il être fait dans le développement de logiciels?



Dans ce cas, je veux dire la limitation ultime des capacités d'une personne en particulier, par opposition aux possibilités de diviser les processus technologiques en étapes distinctes, chacune pouvant être effectuée par des personnes complètement différentes (par exemple, il s'agit d'un convoyeur régulier avec sa division du travail en opérations élémentaires ou une spécialisation étroite des médecins - spécialistes dans un domaine spécifique).



Après tout, il est même difficile d'imaginer une organisation fantastique du travail des programmeurs sous la forme d'un pipeline: le premier développeur n'écrit que les interfaces de fonctions et leurs appels, après quoi il transfère le code au deuxième employé. Le second écrit dans le texte du programme uniquement les conditions de test et les sauts inconditionnels et passe le texte au troisième. Le troisième est responsable de l'écriture des boucles et du formatage général du code, etc. - on s'attend à ce que le résultat soit complètement absurde.



Pour cette raison, l'industrie du développement de logiciels est obligée de suivre un chemin de développement étendu (c'est-à-dire en augmentant les ressources utilisées en production). Les langages de programmation industriels modernes ont des capacités très riches pour diviser le code d'application en fonctions / modules / composants séparés, ce qui permet à de nombreux employés de développer un produit logiciel complexe à la fois.



Mais même ce développement a une limitation naturelle. Et cette limitation est la personne elle-même, puisque chaque développeur doit connaître et pouvoir utiliser son outil de travail, c'est-à-dire langage de programmation.



Si nous prenons l'analogie ci - dessus avec une bande transporteuse, alors chaque travailleur qu'il devrait connaître à fond sur lesla plupart des machines et outils utilisés dans l’usine, quelle que soit l’ opération qu’il effectue sur son lieu de travail.



Après tout, le paradoxe du développement des langages de programmation est qu'en ajoutant de nouvelles fonctionnalités et constructions syntaxiques, on complique un outil de travail conçu à la fois pour un usage collectif et individuel!



Et il s'avère que simultanément au processus d'augmentation constante des capacités des outils de développement, il existe également un processus inverse - une augmentation de la complexité du développement de code par un développeur individuel. En fait, c'est la contradiction insurmontable et mutuellement exclusive.



C'est peut-être pourquoi il est impossible de trouver une «solution miracle» qui augmenterait la productivité d'un programmeur? Après tout, l'attention et les capacités d'une personne ne sont pas illimitées. Et toutes les innovations et améliorations apportées à l'outil de travail du programmeur sont obligées de pousser l'ensemble de l'industrie informatique sur une longue voie de développement.



Peut-être devrions-nous développer des approches fondamentalement nouvelles, et ne pas chasser le sucre syntaxique dans les langages de programmation du siècle dernier? Ou n'est-ce pas du tout monté en flèche, pour continuer à utiliser ce qui est, et la théorie du grand-père de Darwin mettra tout à sa place par elle-même?



All Articles