Le cycle simplicité / complexité

Considérons les prédictions passées suivantes :

  • Lorsque l’interface graphique s’est démocratisée dans les années 80, on pensait que l’on aurait moins à former les gens à l’informatique. Avec l’interface graphique, l’utilisation des applications serait désormais intuitive. On n’aurait plus qu’à apprendre comment fonctionne l’interface graphique et non plus une application en particulier.
  • Les premières versions de Windows NT n’étaient pas livrées avec un défragmenteur de disque dur. La raison est que son nouveau système de fichiers, NTFS, est bien plus résistant à la fragmentation de fichiers que celui de MS-DOS.
  • Windows NT a également introduit un système de registre permettant une meilleure gestion des données systèmes, que l’on pensait être le remplacement idéal des fichiers WIN.ini et SYSTEM.ini de Windows 3.1.
  • La programmation orientée objet était sensée simplifier la programmation.

Qu’ont toutes ces prédictions en commun ? Elles se sont avérées fausses du fait de notre tendance à complexifier les choses à outrances.

Dans un précédent article, j’expliquais pourquoi on ne peut pas avoir de risque zéro, car dés que l’on diminue le risque, la nature humaine va prendre plus de risques jusqu’à atteindre un risque maximum jugé acceptable. Le même principe s’applique à la complexité. Dés que l’on simplifie les choses d’un côté, la nature humaine va vouloir les complexifier d’un autre jusqu’à ce que l’on atteigne un seuil de frustration. Sur un ordinateur, une fonctionnalité est généralement accessible en un nombre limité d’actions (click de souris, raccourci clavier, etc.). Si quelqu’un trouve un moyen de réduire le nombre d’actions, d’autres trouveront le moyen de « réutiliser » les actions économisées pour ajouter plus de fonctionnalités.

Exemple de l’interface graphique

Les prédictions sur l’aspect « intuitif » de l’interface graphique sont apparues à une époque où les programmes avaient peu de fonctionnalités, mais des fonctionnalités peu pratiques à utiliser. Les premières applications bureautique pour PC utilisaient tellement les touches de fonction qu’elles étaient livrées avec un pense-bête en carton que l’on posait sur le clavier pour se rappeler toutes les combinaisons (Control + F11 pour telle fonction, Shift + F3 pour une autre, etc.) Ne serait-ce que naviguer au sein des menus n’était pas toujours des plus intuitifs.

L’interface graphique a simplifié tout cela, mais du même coup a ouvert la porte à plus de complexité. La dernière version de MS-Office n’est pas forcément des plus faciles à utiliser car il est facile de se perdre dans le grand nombre de fonctionnalités. Enfin, l’interface graphique a permit la création de programmes tels que Photoshop ou GIMP, des programmes de manipulation d’images fort puissants mais tout sauf intuitifs…

Avec l’iPad, Steve Jobs a décidé d’apporter un degré de simplicité à l’informatique. Mais il ne faut pas se leurrer, chaque génération d’application iPad va tenter de faire plus que la précédente. La complexité sera différente. Il ne s’agira plus de savoir comment configurer le système ou d’installer tel ou tel pilote, mais par exemple d’avoir -littéralement- le bon doigté pour utiliser les applications.

Exemple de Windows

De la même manière, si NTFS a diminué la fragmentation des fichiers sur le disque dur, c’était compter sans l’explosion du nombre de fichiers sur notre ordinateur. Si bien que Microsoft a réintroduit le défragmenteur de disque quelques années plus tard.

Même problème pour le système de registre. Le but était d’éviter le système antique des fichiers de configuration WIN.ini et SYSTEM.ini de Windows 3.1, deux fichiers au format texte que tous les programmes modifiaient à volonté. Mais en offrant une meilleure gestion des informations systèmes, le système de registre a provoqué une explosion d’abus – et les programmes Microsoft sont les premiers fautifs. A tel point que le système de registre est à l’heure actuelle le talon d’Achille de Windows. Les programmes peuvent toujours y mettre la pagaille. Il est par contre devenu tellement complexe qu’il est très difficile de le vérifier manuellement, comme c’était possible du temps de Windows 3.1. Qui plus est, sa fragmentation au fil du temps fait que Windows est de plus en plus lent au fur et à mesure – et Microsoft n’a toujours pas livré un outil de défragmenter les registres Windows.

L’exemple de la programmation

La programmation a été également sujette à ce phénomène, et a très souvent requis le maximum des capacités intellectuelles des développeurs – quel que soit le langage de programmation.

Les premiers programmes étaient écrits sur des cartes perforées sous forme binaire, ce qui limitait le type de programme qu’un développeur pouvait écrire. Avec le temps, des langages plus faciles à utiliser sont apparus (Cobol, C, Pascal, etc.). Mais leur plus grande facilité a permit l’écriture de programmes de plus en plus gros. La complexité s’est déplacée, la difficulté n’étant plus d’écrire en binaire du code de taille modeste sur une carte perforée, mais de se souvenir de ce que font toutes les parties d’un gros programme, même s’il est écrit en un langage plus lisible.

C’est pour faire face à la taille grandissante des programmes que la programmation orientée objet est apparue, avec pour but d’organiser le code et de le réutiliser autant que possible. Là encore, une meilleure organisation a permit l’écriture de programmes plus importants, sans pour autant diminuer la complexité globale. Certaines fonctionnalités de certains langages objet ont été tellement abusées qu’elles ont contribué à écrire du code difficilement maintenable. C’est le cas du C++, dont l’héritage multiple et la surcharge d’opérateurs ont rendu le langage complexe à maîtriser car il parfois difficile de prévoir les effets qui vont se produire. Qui plus est, l’abus de classes en tout genre (en particulier avec l’héritage multiple) peut éparpiller le code sur beaucoup trop de fichiers.

C’est pour remédier à ce problème qu’un développeur de Sun Microsystems, James Golsing, a développé Java dans les années 90. Java a repris la syntaxe du C++ en éliminant ses fonctionnalités les plus compliquées. Mais une fois de plus, la complexité n’a pas disparu mais s’est déplacée. Car Java s’est enrichi de nombreuses autres fonctionnalités de plus haut niveau. Si le langage de base de Java est plus simple que le C++, Java a tout un tas de fonctionnalités de plus haut niveau, comme utiliser des protocoles de communication (TCP/IP, JSON, etc.), manipuler une interface graphique, etc. Ces fonctionnalités sont certes les bienvenues mais sont parfois un peu trop complexes (comme les Enterprise Java Beans) ou demandant d’apprendre le fonctionnement de beaucoup de classes (comme pour le développement graphique). Au final, si maîtriser le langage Java de base est relativement facile, connaître les spécifications complètes de Java est une autre histoire.

Evolution de la complexité

On observe le même phénomène avec les performances et capacités des produits, mais jusqu’à une certaine limite. Pendant des années nous avons trouvé des usages aux capacités / performances sans cesse grandissantes des ordinateurs. Mais elles augmentent souvent plus rapidement que nos besoins, ce qui fait qu’il existe un seuil au-delà duquel nous n’avons plus besoin d’autant de performances.

La complexité est par contre liée aux nouvelles fonctionnalités. Certes, nos besoins en fonctionnalités peuvent évoluer plus lentement que ce qu’offrent les logiciels (comme c’est le cas du traitement de texte). Mais des nouvelles fonctionnalités augmentent la complexité d’un logiciel ne serait-ce qu’en encombrant le menu de l’application, et ce même si elle n’est jamais utilisée. Au bout du compte, les moyens que l’on trouve pour simplifier l’informatique n’apparaissent pas à un rythme suffisamment soutenu pour contrer le nombre croissant de fonctionnalités.

Explore posts in the same categories: Evolution

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s


%d blogueurs aiment cette page :