Intellisense
J’ai été programmeur Delphi. Ensuite, j’ai fait une excursion dans l’univers douloureux de Java. Plus tard, j’ai programmé en VB.NET et ASP.NET pendant longtemps. Maintenant, je programme plutôt en PHP et j’aimerais faire un tour dans l’univers Python (Django) ou encore Ruby (Rails). Je suis aussi un fervent admirateur et utilisateur convaincu de Javascript.
Certains diront que j’ai reculé en passant d’un langage évolué tel .NET vers des langages primitifs tel PHP. Quels sont les critères qui permettent de classer les langages de cette manière? Je pense que l’éditeur de code y est pour quelque chose et plus particulièrement Intellisense.
Intellisense me permet d’écrire seulement un début du nom d’une méthode, et la magie opère pour écrire automatiquement ce que je veux vraiment.

Programmer pour Intellisense
C’est en lisant Ruby : Les blocs que j’ai eu la vieille habitude de me demander comment est-ce qu’Intellisense fait pour comprendre ça et faire le bon affichage? Pensée impure : je me gifle, je prie et je me regifle pour me faire pardonner. On a pris la mauvaise habitude de penser en fonction d’Intellisense, de programmer en fonction qu’il nous affiche nos méthodes et attributs dans toute leur splendeur.
Je me souviens d’ailleurs (d’ailleurs prend un s, j’ai vérifié) à mon ancien emploi (où le temps était une ressource non renouvelable moins importante que les pauses ou l’heure du lunch), on pouvait passer des heures à essayer de faire fonctionner Intellisense avec les classes qu’on créait. Plutôt inutile et pas très productif.
Les langages dynamiques ne laissent pas de place à Intellisense par leur nature, et c’est une des raisons pour lesquelles certains programmeurs préfèrent les langages non dynamiques (VB.NET, C#, Java). Le style de programmation imposé par Intellisense est simple : tous les objets sont initialisés avec leur bon type, tous les paramètres d’une méthode sont connus, toutes les méthodes sont créées avec la création de l’objet lui-même. Somme toute, de la programmation objet pure et dure. Nous savons aujourd’hui que c’est une belle méthode, mais qu’elle est compliquée à mettre en pratique et parfois non souhaitable.
Intellisense : un ami qui vous veut du mal
Aucune journée d’un programmeur .NET ou Java ne passe sans fureter des listes interminables de méthodes de classe afin de trouver un verbe qui ressemble à peu près à l’action qu’ils veulent effectuer. De là commence une quête impossible.
- Je désire trouver un sous-élément de l’objet.
- J’écris le nom d’un objet et ajoute un point (.).
- La magie opère et Intellisense m’apparaît.
- Est-ce que je devrais utiliser la méthode find(), filter() ou getByAttribute()?
- C’est quoi ça la méthode exportToXml()? Wow! Ça permet d’exporter l’objet vers un fichier XML sans que j’aie à écrire aucune ligne de code.
- C’est quoi les paramètres de la méthode?
- J’écris une parenthèse et Intellisense m’affiche les paramètres. Le premier paramètre permet d’associer une feuille XSL.
- Je vais écrire un XSL pour afficher le XML dans un browser.
- Je vais offrir la possibilité à l’utilisateur d’écrire son propre XSL et de l’utiliser à la place du mien.
- Résultat : mon application permet d’afficher un objet en XML (avec XSL personnalisable) et de le voir dans le browser.
Peut-être vous êtes-vous aussi laissé emporter par l’excitation de pouvoir exporter au format XML un objet. Par contre, il faut se souvenir que la première idée était seulement de trouver un sous-élément de l’objet. Intellisense nous amène trop souvent vers des chemins où nous ne voulons pas aller.
Délivre-moi du mal
En pénétrant dans l’univers chaud et humide des langages dynamiques où Intellisense n’a aucune emprise, je me délivre. Plutôt que de regarder défiler des dizaines d’items dans une liste, je cherche et je trouve sur les sites de référence du langage ou, souvent, sur GoogleGroups. Je trouve ce que je veux et non ce qu’Intellisense pense que je veux.
Aujourd’hui quand j’y repense, je suis fier de pouvoir dire que j’ai fait du .NET pendant 4 ans sans avoir eu à utiliser Visual Studio et son Intellisense. J’utilisais un éditeur du nom de Primal Code. Oui, il avait intellisense mais il était tellement incomplet que je ne m’en servais presque jamais.
Mais si Intellisense est bien utilisé, je trouve que c’est un outil très puissant. Par exemple, si je sais ce que je veux faire mais que je ne me rappelle plus exactement du nom de la méthode, Intellisense sera un ami qui me veut du bien. Par contre, si je ne sais pas vraiment ce que je cherche et que je me fie à Intelisense pour le trouver… ce sera un ami qui me veut du mal et qui veut endormir mon cerveau de développeur créatif. (le diable)
En fait, t’as complètement raison. Intellisense est un outil puissant de la programmation d’aujourd’hui et ne pas l’utiliser est peut-être l’équivalent de faire du feu avec deux morceaux de bois plutôt que des allumettes. Mais personnellement, il m’a fait plus de mal que de bien. Il m’a enfermé dans une méthodologie en laquelle je ne croyais pas.
Intellisense et le principe de suggestion par liste déroulante n’est pas le mal incarné sous un outil de Microsoft. C’est une arme à deux tranchants comme beaucoup de outils technologiques. Faut rester vigilant, être conscient le plus possible des pièges typiques des outils qu’on utilise.