Dans les années 1980, le moyen le plus simple de déclencher une bagarre entre intellos était de proclamer que votre langage de programmation préféré était le meilleur. C, Pascal, Lisp, Fortran ? Les programmeurs passaient des heures à expliquer exactement pourquoi leur façon particulière d’élaborer une clause if-then-else était supérieure à la vôtre.
C’était à l’époque. Aujourd’hui, les batailles impliquant la syntaxe et la structure sont largement dépassées parce que le monde a convergé vers quelques normes simples. Les différences entre les points-virgules, les accolades et autres dans C, Java et JavaScript sont mineures. Des débats intéressants sur le typage et les fermetures existent toujours, mais la plupart sont sans objet car l’automatisation comble le fossé. Si vous n’aimez pas spécifier un type de données, il y a de fortes chances que l’ordinateur soit capable de déduire exactement ce que vous vouliez dire. Si votre patron veut du JavaScript mais que vous préférez Java, un compilateur croisé convertira tout votre Java à typage statique en JavaScript réduit, prêt à être exécuté dans un navigateur. Pourquoi se battre quand la technologie a nos arrières ?
Aujourd’hui, l’action intéressante se situe dans les frameworks. Lorsque je me suis assis avec d’autres membres de la faculté à l’Université Johns Hopkins pour planifier un nouveau cours, les frameworks ont dominé la conversation. Angular est-il meilleur qu’Ember ? Node.js est-il tout cela ?
Nous avons conçu un cours d’enquête qui explorerait l’architecture des plus importants logiciels qui constituent le fondement d’Internet. C’était le centre de l’action, digne d’un cours d’enquête qui explorerait l’architecture des plus importants logiciels qui ceinturent l’Internet d’aujourd’hui.
En ce sens, les frameworks sont les nouveaux langages de programmation. Ils sont le lieu où l’on trouve les dernières idées, philosophies et aspects pratiques du codage moderne. Certains s’éteignent, mais beaucoup deviennent les nouvelles briques fondamentales de la programmation. Voici sept facettes qui alimentent la tendance des frameworks — et qui font des frameworks le nouveau foyer préféré des combats d’intellos.
La plupart du codage consiste à enchaîner les API
Il fut un temps où écrire des logiciels signifiait déployer toutes ses connaissances du langage de programmation pour tirer le maximum du code. Il était logique de maîtriser la complexité des pointeurs, des fonctions et du champ d’application — la qualité du code dépendait du fait de faire la bonne chose. De nos jours, l’automatisation gère une grande partie de ces tâches. Si vous laissez des instructions inutiles dans le code, ne vous inquiétez pas. Le compilateur élimine le code mort. Si vous laissez des pointeurs se balancer, le ramasseur de déchets s’en rendra probablement compte.
Plus, la pratique du codage est différente maintenant. La plupart du code est maintenant une longue ligne d’appels d’API. Il y a un reformatage occasionnel des données entre les appels d’API, mais même ces travaux sont généralement gérés par d’autres API. Quelques chanceux ont la possibilité d’écrire du code astucieux, mélangeant les bits et les pointeurs, pour les entrailles de nos machines, mais la plupart d’entre nous travaillent avec les couches supérieures. Nous exécutons simplement des tuyaux entre les API.
À cause de cela, il est plus important de comprendre comment une API se comporte et ce qu’elle peut faire. Quelles structures de données accepte-t-elle ? Comment les algorithmes se comportent-ils lorsque l’ensemble de données devient plus grand ? Ces questions sont plus importantes pour la programmation d’aujourd’hui que celles concernant la syntaxe ou le langage. En effet, il existe désormais un certain nombre d’outils qui permettent d’appeler facilement une routine d’un langage à partir d’un autre. Il est relativement simple de lier des bibliothèques C à du code Java, par exemple. Ce qui compte, c’est de comprendre les API.
Les épaules des géants valent la peine qu’on s’y tienne
Imaginez que vous soyez devenu un disciple d’Erlang ou d’un autre nouveau langage. Vous décidez qu’il offre la meilleure plateforme pour écrire une application stable et sans bogues. C’est un beau sentiment, mais cela pourrait prendre des années pour que vous réécriviez tout le code disponible pour Java ou PHP dans votre dernier langage de choix. Bien sûr, votre code pourrait s’avérer dramatiquement meilleur, mais cela vaut-il le temps supplémentaire ?
Les frameworks nous permettent de tirer parti du dur labeur de ceux qui nous ont précédés. Nous pouvons ne pas aimer l’architecture qu’ils ont choisie et nous pouvons nous disputer sur les détails de mise en œuvre, mais il est plus efficace d’étouffer nos plaintes et de trouver un moyen de vivre avec les différences. Il est tellement plus facile d’hériter de tout le bien et du mal de la base de code à travers un framework. Prendre la voie macho en écrivant tout vous-même dans votre nouveau langage préféré plutôt que dans l’un de ses frameworks les plus populaires ne vous permettra pas de profiter de la crème de votre nouveau choix aussi rapidement que si vous vous en remettiez simplement aux fabricants de frameworks et à leurs API.
Connaître l’architecture est ce qui compte, pas la syntaxe
Lorsque la majeure partie du codage consiste à enchaîner des appels d’API, il n’y a pas beaucoup d’avantages à apprendre les idiosyncrasies du langage. Bien sûr, vous pourriez devenir un expert sur la façon dont Java initialise les champs statiques dans les objets, mais vous seriez bien mieux loti en trouvant comment tirer parti de la puissance de Lucene ou de JavaDB ou d’un autre tas de code. Vous pourriez passer des mois à maîtriser les routines d’optimisation des compilateurs Objective-C, mais apprendre les tenants et aboutissants de la dernière bibliothèque centrale d’Apple fera vraiment hurler votre code. Vous irez beaucoup plus loin en apprenant les détails pointilleux du framework que la syntaxe du langage sur lequel repose le framework.
La plupart de notre code passe le plus clair de son temps dans les boucles internes des bibliothèques. Obtenir les détails du langage correct peut aider, mais savoir ce qui se passe dans les bibliothèques peut rapporter énormément.
Les algorithmes dominent
Apprendre un langage de programmation peut vous aider à jongler avec les données planquées dans les variables, mais cela ne vous mène pas plus loin. Le véritable obstacle consiste à obtenir des algorithmes corrects, et ceux-ci sont généralement définis et implémentés par les frameworks.
De nombreux programmeurs comprennent qu’il est dangereux et inutile de passer du temps à réimplémenter des algorithmes et des structures de données standard. Bien sûr, vous pourriez être en mesure de l’ajuster un peu à vos besoins, mais vous risquez de faire des erreurs subtiles. Les frameworks ont été largement testés au fil des ans. Ils représentent notre investissement collectif dans une infrastructure logicielle. Il n’y a pas beaucoup d’exemples de cas où il est judicieux de « sortir du réseau », de jeter le dur labeur des autres et de construire une cabine algorithmique de vos propres mains.
La bonne approche consiste à étudier les frameworks et à apprendre à les utiliser au mieux. Si vous choisissez la mauvaise structure de données, vous pourriez transformer un travail linéaire en un travail qui prend un temps qui est une fonction quadratique de la taille de l’entrée. C’est un gros souci une fois que vous devenez viral.