13 fév. 2007

L'architecture logicielle écologique ?

Comme toutes les "nouvelles technologies", le développement de l'informatique est surtout basé sur la croissance de la consommation. Plus un ordinateur est puissant, plus on peut lui faire faire de choses, et donc plus on en fera. Et au final, on encourage l'appauvrissement de nos ressources, et on avance à grand pas vers des problèmes écologiques majeurs. Vous allez me dire : ça va, j'ai compris, mais qu'est-ce que ça a à voir avec l'architecture logicielle ?

C'est une bonne question, merci de me l'avoir posé. Après tout, l'architecte logiciel crée des programmes, il ne fait pas les machines sur lesquelles ses programmes fonctionnent. Il n'est pas responsable du fait qu'un ordinateur nécessite une quantité de pétrole catastrophique pour être créé, ni de la pollution engendré par les métaux lourds et autres produits chimiques dangereux utilisés à un moment ou à un autre de sa fabrication. Lui, il fait le logiciel. Et encore, dans la plupart des cas, il le fait sous l'impulsion d'un client.

Est-ce pour autant une raison pour le faire sans s'investir plus que ça ?

Il existe deux raisons pour lesquelles une personne va acheter un nouvel ordinateur, et remiser le sien dans un coin - voire le jeter à la poubelle, comme je l'ai encore vu cette semaine à Stuttgart[1]. La première est qu'une partie des composants de son PC est obsolète, ou ne fonctionne plus. Dans ce cas, il n'y a que peu de choses que nous pouvons faire : un architecte logiciel aura bien du mal à faire fonctionner un PC qui ne fonctionne pas, ou à faire rentrer une carte ISA dans un slot PCI-Express.

La seconde raison est que la gourmandise croissante des logiciels nécessite un changement de machine, pour la simple raison que l'ancienne ne permet plus de travailler (ou jouer) de manière efficace. J'en veux pour preuve l'incroyable Windows Vista de Microsoft, qui, outre le fait qu'il ne propose rien de nouveau (toutes les fonctions importantes sont déjà présentes sur les versions antérieures de Windows) se permet en plus de forcer l'utilisation de systèmes de sécurité d'un gout douteux. Mais que faut-il à Windows Vista pour fonctionner convenablement ? 1 Go de mémoire. Une carte graphique de classe DirectX 10 (pour afficher l'interface graphique ![2]). Un processeur double-coeur est lui aussi souhaité. Quand à l'espace disque nécessaire, gageons qu'un disque de 320Go à 115€ fera l'affaire. Si vous voulez en outre pouvoir regarder des films HD-DVD ou BluRay sur votre nouveau PC, outre le lecteur il vous faudra aussi changer d'écran - afin de pouvoir utiliser un écran HDMI. Enfin, et à ces seules conditions, votre expérience sera totale. Espérons que vous avez aussi une passion pour les factures salées... Et lorsque vous aurez acheté tout ça, vous mettrez, vous aussi, votre ordinateur sur le trottoir.

Pourtant, cette gourmandise accrue des logiciels n'est pas impossible à contenir, et c'est là que l'architecte logiciel intervient. L'efficience d'un logiciel est en grande partie prédéterminée par sa conception. Une conception de mauvaise qualité entrainera une lenteur excessive du produit, qui forcera l'achat d'un matériel toujours plus puissant - sans pour autant gagner en efficacité dans le travail réalisé. Lorsqu'elle est pensée correctement dès le départ, la conception a deux conséquences majeures : pour une part, elle contribue à l'efficacité globale du logiciel (bien plus que le code lui-même); et en second, elle facilite l'exploitation des connaissances de programmeurs qui, en travaillant dans un environnement correctement conçu, peuvent non seulement mesurer la rapidité du code mais aussi modifier celui-ci en utilisant diverses techniques d'optimisation. La conséquence est directe : c'est en concevant des logiciels simples et léger que l'architecte logiciel peut avoir un impact important sur la durabilité du matériel informatique, et permettre ainsi un renouvèlement moins rapide du parc informatique chez les particuliers.

Selon moi, il est très important de garder à l'esprit cet aspect "écologique" de l'architecture logicielle lors de la conception d'un nouveau produit. Bien évidemment, l'architecte devra connaitre de manière suffisamment précise les techniques qu'il va utiliser, dans le but évident de pouvoir faire les bons choix - il pourra ainsi assurer la simplicité de l'architecture, avec toutes les conséquences que cela entraine. S’il n'a pas une connaissance assez pointue des technologies qu'il emploie, il risque de faire des choix qui iront dans le mauvais sens.

Depuis plusieurs années, nous avons eu l'habitude de considérer que la rapidité d'exécution d'un programme n'était que secondaire, la rapidité de création de celui-ci prévalant - car les coûts liés à sa création sont des coûts directs. Cependant, les coûts écologiques cachés (qu'on ne sait pas chiffrer pour l'instant, pour la raison qu'aucune étude sérieuse n'a été effectuée sur le sujet) pourraient bien, dans les années qui viennent, devenir important, voire même prohibitifs. Il arrivera un temps ou nous devrons faire face à de nouvelles limitations dans le domaine du matériel. Il ne sera plus possible d'étendre à l'infini la mémoire vive d'un PC, car le prix de celle-ci sera exorbitant. La production de nouveaux composants est fortement lié à l'approvisionnement en matières premières, or il est connu que nos sols s’appauvrissent- y compris les gisements de métaux importants qui sont utilisés dans la fabrication de ces composants : ainsi, le prix de la tonne de cuivre s'envole, à tel point qu'une économie parallèle de revente de cuivre volé se met peu à peu en place. Un ordinateur consomme de l'électricité - les cartes graphiques de nouvelle génération battent même tous les records dans ce domaine. Les alimentations des PC sont progressivement passées de 180 à 250W, puis 300 voire même 400W, 700W ou plus. L'électricité doit être produite - et le coût de celle-ci, dans un futur proche, être soumis à diverse écotaxes. Et ce ne sont que deux exemples. Dans l'ensemble, nous commençons à prendre conscience que ces coûts qui jusque là nous étaient transparents pourront dans un avenir proche être chiffrés avec plus de précision. Et là, il ne faudra pas s'attendre à des bonnes surprises.

Le coût de l'exécution d'un logiciel doit donc entrer en ligne de compte. Des positions du type "oui, ce programme est lent, il lui faudra un PC plus rapide" ou "certes, changer le programme de cette manière le rends plus lent, mais nous y gagnons en rapidité d'écriture" sont, selon ma propre opinion, des erreurs. Je ne prétends surtout pas que la performance d'un programme justifie une mauvaise architecture - c'est même le contraire en un sens : une bonne architecture pourra permettre d'assurer une performance correcte du programme. Je ne nie pas non plus les progrès des ordinateurs - bien que je remarque, à l'instar de Martin Fowler[3], que bien souvent l'utilisation d'un matériel plus rapide n'a qu'un impact marginal sur les performances du programme. Je ne donne pas non plus licence à une optimisation prématurée, qui sera dommageable par la suite. Je dis juste que la performance d'un logiciel est une donnée importante, et qu'il faut faire avec - et plutôt en prendre l'habitude maintenant que d'attendre de se retrouver face aux problèmes plus tard.

Notes

[1] 2 PC, 1 mac, 3 écrans 19 pouces. Le tout posé sur le trottoir. On pourra objecter que ce matériel était en fin de vie, mais quand même...

[2] l'adage bien connu "il faut souffrir pour être belle" s'applique là à votre porte monnaie, qui n'en sera pas pour autant plus beau; les cartes graphiques de ce type sont hors de prix et nécessiteront de plus un changement de carte mère de votre part si vous n'êtes toujours pas passé au standard PCI-Express

[3] Martin Fowler, Refactoring - Improving the Design of Existing Code, Addison-Wesley, ISBN 978-0201485677 (lien amazon)

Ajouter un commentaire

Les commentaires peuvent être formatés en utilisant une syntaxe wiki simplifiée.

Fil des commentaires de ce billet