16 mai 2011

Article

Technologies de l'information

L'importance du “pourquoi" et du “quand" dans une formation C#

Il existe beaucoup de livres d'apprentissage en C#, malheureusement la majorité d'entre eux explique uniquement les nombreuses caractéristiques offertes par le langage. Ces livres traitent principalement  du “comment" avec bien des exemples. C'est bien, mais on oublie le plus important : préciser “pourquoi" et “quand" il est nécessaire utiliser une caractéristique. Cette connaissance approfondie se partage uniquement lorsque l'on possède une expérience et un recul suffisant dans l'utilisation du langage. Ces explications sont fondamentales :

  • pour bien comprendre “pourquoi" cette caractéristique a été intégrée dans le langage (sa raison d'être) et pourquoi elle contribue à résoudre telle problématique;
  • pour discerner “quand" cette dernière est utile pour régler et faciliter la solution à un problème.

C# : une immense boîte à outils.

Sans le “pourquoi" et le “quand", un développeur sera embêté si on lui demande de justifier le choix de la caractéristique utilisée. Cette compréhension et cette confiance dans sa sélection sont primordiales pour développer adéquatement une application. Un bon menuisier choisira l'outil le plus adéquat pour sa tâche dans sa boîte à outils. Cette analogie s'applique parfaitement bien pour un développeur utilisant un langage orienté objet comme C#. Par contre, il fait face à un défi beaucoup plus grand car la boîte à outils de C# est immense, surtout parce qu'elle est constamment en croissance (C# 1.0, 2.0, 3.0, 4.0).

J'enseigne la programmation objet depuis 1986 pour des langages comme Smalltalk, C++, Oberon-2, Modula-3, Java, Ruby, B#  (www.BSharpLanguage.org) et C#. Même si j'utilise plus fréquemment B# et C# dans mes applications, je dois encore en maintenir d'autres en Java et en C++. Évidemment, l'explication du “comment" utiliser telle ou telle caractéristique est la base même d'une bonne formation. Ma formation universitaire et mon parcours professionnel m'ont apporté non seulement une objectivité mais aussi une excellente compréhension dans les explications du “pourquoi" et du “quand" que j'adore communiquer à mes participants.

Les meilleurs développeurs que j'ai rencontrés en industrie et dans mes formations sont ceux qui peuvent justifier et argumenter clairement leur choix, partager leurs décisions, en discuter et apprendre de leurs collègues. Comprendre ou critiquer de façon constructive une autre vision de résolution de problèmes permet d’apprendre, peu importe l’âge.

Aujourd'hui, coder c'est aussi concevoir en même temps.

Un autre aspect important dans l'apprentissage d'un langage objet aujourd'hui, c'est l'omniprésence de la conception dans l'écriture du code. Écrire du bon code en objet c'est concevoir en même temps, car l'utilisation judicieuse des délégués, des interfaces, des classes abstraites, de la composition et de l'héritage permettent non seulement l'élaboration d'une infrastructure, mais aussi l'intégration (ou la personnalisation) de votre code avec le framework .NET. Je permets à mes participants dès le premier cours (Programmation C# .NET - MN201) de reconcevoir une application (écrite de façon procédurale) en C# avec une présentation rapide des principes de base en UML (en quelques minutes) afin qu'ils puissent intégrer tout ce qu'ils ont appris lors de la formation et bénéficier de l'opportunité d'utiliser un design pattern (un avant-goût d'une formation capitale comme « Conception objet avancée avec les Design Patterns » - DE107).

Je suis d'abord un développeur qui recherche la simplicité avant tout. La création d'un langage comme B# dans le domaine embarqué (embedded) a toujours été pour moi un travail de réduction de caractéristiques. Elle correspond exactement à une excellente citation de St-Exupéry :

Il semble que la perfection soit atteinte non quand il n'y a plus rien à ajouter, mais quand il n'y a plus rien à retrancher." --- Antoine de Saint-Exupéry

Malheureusement, ce n'est pas le cas de la majorité des langages modernes objets. L'ajout continuel de nouvelles caractéristiques peut sembler attrayant, mais cela exerce une pression énorme sur les développeurs qui doivent s'y retrouver pour être en mesure de faire des choix déterminés selon leurs besoins. Élaborer des formations concises sur un langage de programmation aussi vaste que C#constitue un exercice ardu en soi.  Les développeurs expérimentés de logiciels ne peuvent se permettre de s'enliser dans des détails superflus, c'est là où mon rôle entre en jeu : surligner, malgré toutes ces caractéristiques, les éléments essentiels du langage qui vous permettront de bien concevoir et de développer rapidement en toute confiance. Ceci a toujours été le premier objectif de mes formations en langages objects.

Ces notions sont d'ailleurs traitées dans les cours suivants : 

Programmation C# .NET (MN201) 

Conception objet avancée avec les Design Patterns (DE107)

L'importance du “pourquoi" et du “quand" dans une formation C#.