Programmation, les tendances entre 2010 et 2015

A partir des nouveaux langages, des outils, du marché des applications, apparaît l'évolution de la programmation.

Cet article veut uniquement faire le point sur les tendances qui se concrétisent dans les outils de programmation actuels. Pour une projection dans le futur et une recherche sur ce que l'on doit attendre des outils à venir, on peut aussi voir Le futur des langages de programmation.

Il y a toujours une majorité de programmeurs qui continuent à utiliser les langages établis comme C++, Java, PHP, qui possèdent une API imposante répondant à la plupart des situations auxquelles ils se voient confrontés.
Mais il y a par ailleurs une évolution de l'activité. On crée maintenant des logiciels pour smartphones et tablettes, des applications pour le Web, multimédias. Les ordinateurs, leurs écrans, leurs processeurs, ont changé et cela requiert une évolution des outils de développement.

Combat sur un mur de château d'un homme avec un bouclier HTML 5 contre un squelette avec un bouclier au logo de Microsoft

L'éternelle dualité entre l'utilité et la lisibilité

Depuis des décennies, les programmeurs se voient proposer des langages qui visent à simplifier l'écriture des programmes. Python, Ruby obéissent à cette tendance. Longtemps auparavant Basic avait déjà eu cet objectif. Pourtant il a été supplanté par C, plus difficile à utiliser, mais offrant plus de liberté et de possibilités.

La décennie 2010, comme le montre la chronologie des langages, n'a pas vu apparaître de nouveaux langages répondant à cet objectif de simplicité. A l'exception de Blocky, un langage visuel plutôt anecdotique.
C'est la tendance à l'obfuscation qui l'emporte avec Go, Rust, dont la syntaxe s'inscrit dans la lignée de C, purement utilitaire, requérant un apprentissage assez long et un goût certain pour l'encodage.
Le programmeur doit être distancié du problème dont il implémente la solution pour aimer ce type de langage. A moins que le problème lui-même soit de nature purement informatique ce qui est le cas des applications systèmes ou de gestion de serveur. Dans les autres cas, le programmeur devrait disposer d'un langage facilitant la transposition du monde réel en construction virtuelle.

Les classiques veulent aussi reprendre le pouvoir sur le navigateur avec Dart (Google), TypeScript (Microsoft) qui tentent de remplacer la syntaxe innovatrice de JavaScript par les constructs plus éprouvés tirés directement de C ou Java...
Cela va à l'encontre de l'évolution des ordinateurs. Certes, les applications se déplacent vers le navigateur, mais le besoin de mettre en oeuvre des idées de services nouveaux ne s'accomplira pas mieux avec les outils du passé.

Le navigateur comme interface universelle

Même si on peut préférer écrire un programme en TypeScript ou CoffeeScript pour éviter les ambiguités du code JavaScript, celui-ci, et c'est la principale tendance, tend à se généraliser et devenir incontournable. Il devient le langage des interfaces en HTML et bien que XUL et XAML qu'il complète sont moins utilisés du fait de la désaffection de XML ou profit de JSON, JavaScript demeure quand à lui, et devient le langage de Gnome, le langage des applications avec Node.js qui communique avec le navigateur par WebSocket.
Il est possible de réaliser des applications locales en JavaScript avec l'installation de Node.js sur le bureau, sans que l'on voie de différence avec une application traditionnelle native, comme le démontre le gestionnaire de fichiers Advanced Explorer.
La même application peut donc fonctionner sur tous les systèmes d'exploitation, sur tablettes, sur Smartphone. Cette universalité est une tendance qui devrait se préciser dans les années à venir.
Comme Advanced Explorer, les applications devraient fonctionner dans le navigateur, sans contrainte de compatibilité au système. Pour parvenir à ce but, Mozilla a créé une formidable avancée avec le langage Asm.js. Celui-ci sans perdre la compatibilité avec JavaScript, offre une vitesse d'exécution proche de celle du code natif. On peut maintenant voir des jeux 3D fonctionner sur Firefox. Mieux encore, puisqu'il est possible de compiler une application C ou C++ en Asm.js, on peut disposer de toutes les bibliothèques de fonction écrites dans ces langages avec JavaScript. Cela dans Firefox et éventuellement dans d'autres navigateurs s'ils implémentent Asm.js.

Dans les prochaines années, Portable Native Client, va compléter la panoplie du développement dans le navigateur. PNaCl permet de compiler en bytecode LLVM des applications écrites en C ou autre langage, et ce bytecode pourra être exécuté dans le navigateur Chrome, sur tout système d'exploitation. C'est une alternative à Asm.js.

La programmation pour Windows : le studio de Machiavel

Visual Studio reste toujours le meilleur outil de développement et ce n'est pas Eclipse avec son interface obscure qui va le détrôner. Mais l'EDI n'est pas le seul accessoire pour le développeur, il doit aussi mettre en oeuvre un langage et un ensemble de fonctions sur une plateforme.

C'est là que Microsoft veut innover, sur Windows 8, l'ex-Metro qui s'appelle maintenant IU Moderne propose une double plateforme fonctionnant en HTML 5 ou XAML au choix. XAML est un langage intéressant et d'accès facile et convient pour des logiciels immersifs purement Windows. Et même en fait purement Windows 8 ce qui réduit encore l'audience. La version HTML 5 de Microsoft n'est pas vraiment standard puisqu'elle requiert une API pour communiquer avec le système et cette API est propre à Windows.
Or nous avons vu précédemment qu'il était possible de réaliser des logiciels fonctionnant dans le navigateur sans contrainte d'OS. Il n'y a rien dans Metro que l'on ne puisse réaliser avec les nouvelles technologies du Web. Cette initiative semble bien être une manoeuvre de la firme pour essayer de rendre les utilisateurs captifs de son système, comme par le passé. Pour ne rien arranger, les applications Metro ne sont accessibles que depuis l'App Store et avec une taxe de 30% à verser à Microsoft. L'initiative à donc une facette purement financière.

En conclusion, Metro est plus un boulet qu'autre chose pour les développeurs, un plan pour servir les intérêts de la firme qui n'apporte rien à la communauté, et je les encourage donc à se tourner plutôt vers les technologies de Mozilla ou de Google.

Evolutions cruciales: concurrence, asynchronicité

La concurrence repose sur le principe que le processeur est plus rapide que l'utilisateur et donc qu'il peut faire plusieurs choses à la fois en réponse aux demandes d'un ou de plusieurs clients. Avec le Web les clients se multiplient pour une même application ou service et les tâches s'accomplissent donc en concurrence. C'est quelque chose qui se reflête dans la conception des langages. Go et Rust rendent la création de processus concurrents plus facile et Rust notamment exploite mieux les possibilités des processeurs multi-coeurs. Il veut aussi améliorer la sécurité sur le Web.

L'asynchronicité va dans le même sens. Elle permet à l'utilisateur de poursuivre une tâche sans attendre le traitement d'une autre, et cette faculté, qui est inhérente à JavaScript depuis l'origine, permet aussi à de multiples utilisateurs d'utiliser un service en concurrence. Ce pourquoi JavaScript devient le langage que l'on utilise dans tous les domaines. Ce qui n'est évidemment possible que parce que l'on dispose d'interpréteurs JIT devenu extrêmement rapides.

Les outils tendent à l'universalité

Visual studio dispose des fonctions de refactoring, autrement dit réorganisation du code sans changer sa fonction. L'intelliSense vise à la correction automatique des erreurs de syntaxe, ce que l'on trouve dans NetBeans aussi. La création visuelle d'interface est une aide au développement qui date de 20 ans. Cependant ou trouve peu d'EDI le proposant pour HTML 5 mais ce dernier dispose de nombreux frameworks supportant le data binding, et l'échange entre sources de données et interface est une des fonctions de l'EDI.
IntelliTrace dans VS facilite le déboguage en enregistrant tous les états d'un programme, ce qui permet d'exécuter un replay avec vue sur le code, évènements, les variables jusqu'à l'occurence d'une erreur.

Les progrès les plus intéressants dans le domaine de la programmation sont dans la conversion de langage avec CLang et LLVM. Ce dernier est un bytecode optimisé et proche du langage machine. On peut ainsi produire des applications en différent langages et distribuer le code LLVM fonctionnant sur tout système. C'est la technique utilisée par Portable Native Client pour les applications natives dans le navigateur.
Une alternative est la compilation AOT (Ahead Of Time): un même programme est distribué pour tous les OS, il est compilé lors de l'exécution et le code binaire produit est réutilisé lors des sessions suivantes. Par ailleurs le JIT (Just In Time) qui a permis d'accélérer les applications Java s'est propagé à JavaScript ce qui rend les applications Web ultra rapides et fait de JavaScript un langage d'application universel.

Mise à jour du 18 avril 2013. Intel annonce un environnement de développement HTML 5. Pour créer des applications pour tous les mobiles.

Conclusion

Sur la période considérée, l'évolution de la programmation n'est pas dans la production de moyens et d'outils vraiment innovateurs, mais plutôt dans l'optimisation des outils existants, dans leur universalisation, celle du JavaScript surtout et de HTML pour les interfaces. Le paradoxe est que l'entreprise proposant le meilleur outil de programmation est totalement déphasée de cette tendance et va même à contre courant.

Par Denis Sureau le 15 avril 2013.