Styles

jeudi 10 juillet 2008

Intellisense, ennemi de la pensée désirée ?

N'avez-vous jamais été embêté par Intellisense ? Ne sentez-vous pas qu'il vous bloque parfois dans votre créativité ? La preuve, dès que j'essaie d'envisager un appel à une nouvelle fonction, dès que j'appuie sur "Enter", j'ai le message désagréable suivant :


En fait, intellisense est incompatible avec la méthode de développement par pensée désirée. Mais qu'est-ce donc que la pensée désirée en informatique ? L'architecte parlera d'approche top-down, mais c'est assez réducteur et simpliste car faisant croire à un processus de conception rationel fonctionnant par décompositions successives.

Comme nous le raconte très bien Steve McConnell dans Code Complete 2, et que je vous traduirais ainsi :
La conception est un problème "perfide" (wicked). Horst Rittel et Melvin Webber définissent un problème comme "perfide" quand il ne peut-être clairement défini qu'en le solutionnant ou en solutionnant une partie de celui-ci (1973).
Bien que la conception soit un problème perfide, on peut adopter des approches qui permettent d'être créatif quand à la solution à apporter.

Une des méthodes les plus intéressante est l'approche de la programmation par la pensée désirée : vous codez des algorithmes, des routines, des classes selon ce qui est plaisant d'imaginer, en imaginant un monde idéal et en faisant abstraction (dans un premier temps) du réel, de ce qui existe et de ce qui reste à développer.

Ainsi, si vous désirez développer une application de gestion de contacts personnels, vous commencez par écrire un programme utilisant une API idéale de gestion de contacts :

ContactCollection.GetMyContacts() ContactCollection.GetMyProfessionalContacts()

Ce n'est qu'ensuite que vous pouvez vous pencher sur l'implémentation de chacune des fonctions GetMyContacts, GetMyProfessionalContacts(). Cet exemple est trivial et vraiment simpliste mais ce qu'il faut retenir c'est qu'une telle approche permet de s'abstraire des détails d'implémentation, ce qui promeut une architecture orienté "problème métier" plutôt que "problème technique".

C'est là ou intellisense peut poser problème pour le développeur distrait. Sans faire attention, intellisense pousse à utiliser ce qui existe déjà, à penser implémentation avant de penser modélisation.

Et voilà comment on en arrive à développer des applications sans séparation claire entre les responsabilités de chaque module. Intellisense peut être vraiment intéressant quand l'architecture est complète et clairement définie, mais il serait bien de pouvoir désactiver cette fonctionnalités quand on se met à réfléchir à une architecture indépendante de l'implémentation.

Aucun commentaire: