Agile Tour 2012: Les sessions Partie 2

Voici mon compte rendu des sessions de l’après-midi lors de l’Agile Tour Québec 2012. La partie 1 est ici.

Le Programmeur Lean Startup par Olivier Gourment

Olivier Gourment nous a offert une bonne présentation avec quelques touches d’humour. Parfait pour ne pas s’endormir après le repas du midi. Trois thèmes principaux étaient présentés. Les voici donc avec mes commentaires:

  • Lean Startup : Une introduction au Lean Startup est faite ici en expliquant le cycle « Construire – Mesurer – Apprendre ».  Le but dans un Lean Startup est d’apprendre le plus rapidement possible afin de construire le produit minimal viable. Très intéressante approche, que ce soit pour une entreprise en démarrage ou un projet interne dans une compagnie bien établie.
  • Code: Le code est souvent trop « gras » et nous ralentit. Il faut alors l’amincir avec du « Refactoring ». On fait la revue de quelques autres bonnes pratiques de programmation. Classique, mais toujours bon d’en faire le rappel.
  • Programmeur: On parle ici qu’il faut un peu du rôle de programmeur dans la vie de tous les jours. Olivier recommande d’adopter les pratiques d’ingénierie agile, prévoir la formation continue. Il a mentionné aussi un fait avec lequel je ne suis pas totalement d’accord: avoir des juniors dans notre équipe pour permettre l’innovation. Je crois davantage que l’on peut innover à tout âge. Pour favoriser l’innovation, j’irais en ayant simplement une équipe diversifiée et variée avec des gens différents, peu importe l’âge.

En conclusion, plusieurs sujets très intéressants ont été survolés. Mais je trouve que les sujets manquaient un peu de profondeur par moment. Aussi, les liens entre les trois thèmes principaux sont plus ou moins directs, mais bon ce n’est pas trop grave. Bonne prestation d’Olivier Gourment somme toute.

Références :

Le rôle de l’Architecte Agile par Jean-René Rousseau et Mathieu Boisvert

Sujet fort intéressant pour moi. Je ne pouvais me résoudre à aller voir toute autre présentation.

Question intéressante posée d’amblée: peut-on faire de l’architecture en amont en Agile ? Bien sûr que oui, on peut en faire un peu. L’architecture est quand même nécessaire afin d’avoir un aperçu des risques et complexités des problèmes à résoudre. Les approches Agiles occasionnent plusieurs impacts sur le rôle de l’architecte. Deux ont été ciblés et discutés lors de cette présentation:

  • Émergence et Incrémentalité: Il s’agit ici de bien balancer Anticipation et Adaptation afin de, sans trop tout détailler, avoir une architecture souple et ouverte aux changements.  On parle aussi d’établir des patrons de démarrage de projet. Aspect intéressant qui a été mentionné aussi: prévoir une stratégie pour gérer et planifier les considérations d’architecture.
  • Collaborer avec les équipes: L’architecte a son lot de responsabilité au sein d’une équipe. Il se doit de prévoir une stratégie de communication et accompagner son équipe. Il arrive souvent qu’il doive s’occuper de plusieurs projets en même temps. Mais, si la disponibilité le permet, la meilleure place pour lui est d’être équipier. Et je suis très en accord avec ce point. Ainsi, en étant équipier, il pourra davantage transmettre son savoir, guider l’équipe et aussi programmer à l’occasion. Ou mieux, faire de la programmation en paire histoire de se mettre à jour et faire un transfert de connaissance. Car un architecte qui ne code jamais risque de devenir un architecte dans sa tour d’ivoire.

Un problème que je remarque parfois dans les organisations, c’est que l’architecte logiciel est davantage un titre qu’un rôle.  Au lieu d’être un titre attribué, l’architecte logiciel ne devrait-il pas être un rôle, comme le ScrumMaster, qui est attribué selon le projet et peut changer à l’occasion ? J’imagine bien une équipe de programmeurs qui fait la rotation de ce rôle ou encore mieux, que ce rôle soit partagé par tous les membres de l’équipe. Cela ferait de très bons échanges de connaissances tout en permettant à tous de faire du code régulièrement. Bon, c’est peut-être une idée utopique, mais bon, cela fait du bien d’en parler.

Bref, malgré le fait qu’on dirait par moment que nous avons davantage le point de vue d’un architecte fonctionnel que d’un architecte logiciel, plusieurs points intéressants ont été amenés dans cette présentation. J’espère que d’autres présentations de ce genre suivront, car je crois que le sujet mérite d’être encore débattu, discuté et approfondi.

Références :

Est-ce que votre code est S.O.L.I.D. ?

CrackDans ce billet, je vais vous décrire brièvement les principes SOLID pour la programmation orientée-objet avec quelques commentaires et vous suggérer quelques ressources pour approfondir ce sujet qui devrait être connu de tous les programmeurs sérieux et professionnels.

Je suis toujours surpris lorsque, la plupart du temps, à chaque fois que je parle de ces principes à de nouveaux collègues, mon interlocuteur hausse les épaules et ne sait pas de quoi je parle.

 

S.O.L.I.D. est acronyme regroupant les principes suivants:

  • Single Responsability Principle (SRP): Une classe devrait avoir une et une seul raison (responsabilité) d’être modifiée.
  • Open Closed Principle (OCP) : Chaque classe devrait être ouverte pour des extensions et fermé autant que possible pour des modifications.
  • Liskov Substitution Principle (LSK) : Les classes dérivées peuvent être substitué de leur classe de base
  • Interface Segregation Principle (ISP) : Nos classes ne doivent pas hériter, via une interface, de méthodes qu’elles n’utilisent pas.
  • Dependency Injection Principle (DIP) : On doit dépendre de classes abstraites et non de classes concrètes

De tous ces principes, le plus important à suivre selon moi est le Single Responsability Principle (SRP). Ne pas respecter ce principe peut apporter plusieurs maux, notamment lorsque l’on fait évoluer le code.  Dans mon équipe actuelle, nous avons fait du SRP le principe de base et le plus important à suivre. De cette manière nous l’avons toujours en tête et il nous sert en quelque sorte de règle de base lorsque l’on se questionne sur la grosseur de classes et de méthodes ou autre.

C’est important aussi de connaitre les autres, mais on y fait référence un peu moins souvent à mon avis.

Pour en savoir plus, sur SOLID, vous pouvez commencer par les deux références suivantes sur Internet :

Pour approfondir SOLID, je recommande fortement le livre suivant (Liens Amazon.ca commandités) de Bob Martin qui se décrit en deux versions, tout dépendant si vous êtes de type Java/C++ ou .Net:

Agile Software Development, Principles, Patterns, and Practices

Type .Net (C#/VB)

Type Java/C++

Dans ce livre, l’oncle Bob nous explique les pratiques agiles, on y voit un peu de modélisation et aussi de nombreux chapitres sont dédiés aux principes orientés-objet. Ce livre d’environ 700 pages fait un très beau livre de référence à mettre sur son bureau pour le lire au complet ou le consulter à l’occasion.

En passant, nous aurons la chance de recevoir Bob Martin en tant que conférencier principal lors de l’Agile Tour Québec 2011. Les inscriptions devraient commencer en septembre. Pour info sur l’Agile Tour : http://at2011.agiletour.org/fr/at2011_Quebec.html

Autres articles intéressants avec exemples d’application de SOLID:

Référence pour l’image utilisée:

http://www.sxc.hu/photo/954598

Pourquoi je n’aime pas les générateurs de code ?

639165_old_factory

Je n’ai jamais vraiment beaucoup aimé les générateurs de code.

Vous savez, le genre d’outils qui peut vous générer des centaines et parfois même des milliers de lignes de code avec simplement quelques paramètres ?

Dans cet article, je vais discuter des points positifs et négatifs quant à l’utilisation d’outils de générateurs de code. Des exemples de différents générateurs seront aussi décrits.

On mentionne  souvent que ces outils nous font économiser des centaines d’heures et aide à avoir du code plus standard, je pense par contre qu’à moyen et long terme, il peut y avoir certains effets négatifs.

Comme par exemple :

  • Nuit à l’apprentissage: C’est le point le plus important d’après moi. Le simple fait que de ne pas avoir touché à une partie du code, nous rend vulnérable par rapport celle-ci. Aussi, il est important de bien comprendre un système informatique dans son ensemble et non seulement les parties du code qui n’ont pas été générées. Faut aussi savoir que tel générateur ne sera pas disponible dans un autre projet… Exemple: un générateur de code se charge de produire les contrats de services et de données en WCF. Il se charge de bien créer les classes et de mettre les bons « tags » relatifs à WCF. Dans ce cas, on ne peut pas dire que nous avons gagné de l’expérience avec WCF. Si on arrive dans un autre mandat ou projet et que le générateur n’existe pas, il nous faudra approfondir WCF car finalement, on ne le connaît pas vraiment malgré son utilisation dans un précédent projet.
  • Difficultés lors de la recherche d’erreurs : Les générateurs de code produisent en général du code un peu obscur et difficile à lire. Si une erreur se produit dans cette partie du code, la recherche peut s’avérer longue et douloureuse.
  • Pour une simple correction, on a souvent pas le choix d’utiliser le générateur de code: C’est en général non-productif de devoir refaire l’exécution du générateur pour faire un petit changement, comme renommer une méthode par exemple ou changer de type une propriété. Pour ces gestes, c’est tellement plus facile et rapide d’y aller manuellement…

Bien que j’aie déjà utilisé certains de ces outils, je peux avouer qu’ils sont parfois efficaces et, probablement, valent la peine d’être utilisé selon le contexte. Dans certains environnements avec des dizaines de programmeurs, on n’a pas trop le choix de standardiser certaines parties du code malgré les inconvénients. Bref, je crois que l’idéal est d’avoir une bonne balance entre productivité à court terme et l’apprentissage à long-terme.

Voici quelques-unes de mes expériences avec les générateurs de code:

Bonnes:

  • LINQ to SQL: Le code généré à partir de tables SQL Server n’est pas trop gros. C’est certain qu’il n’est pas très beau non plus, mais c’est assez facile de se créer une classe « extended » pour y ajouter des options particulière, comme une chaîne de connexion qui peut changer selon certaines conditions. Mais dans ce cas, le gain se fait surtout par l’utilisation directe de LINQ pour lire et modifier nos classes SQL. Le code que l’on créé ainsi manuellement est beaucoup plus lisible et simple avec LINQ.
  • Resharper: La génération de code dans Resharper se charge surtout de petits bouts de code qui seront intégrés à notre classe. Après cela, on les manipule comme on veut. Voyez ici les exemples .

Négatives:

  • Smart Client Software Factory: Il y a une bonne volonté ici de faire des outils pour générer nos vues, contrôleurs et autres structures nécessaire au pattern MVP-C. Par contre cela en résulte en un nombre assez nombreux d’événements. Lorsqu’il faut faire du débogage, on ne se sait plus trop ou donner de la tête lorsque cela saute d’un événement à l’autre.
  • CodeSmith : J’ai déjà utilisé cet outil pour générer une couche d’accès aux données dans un précédant projet. Je trouvais terrifiant de voir des milliers de lignes de codes produite pour simple une table avec une dizaine de colonne seulement. Par chance que les erreurs ne s’y trouvaient pas souvent. Noter aussi que CodeSmith a d’autres outils que je n’ai pas essayé et qui sont probablement intéressant malgré tout.
  • L’outil « Add Service Reference » de Visual Studio pour WCF: Je n’aime pas cette option qui se fait un peu trop facilement avec un clic droit de la souris. Le gros problème c’est que le fichier de configuration est rempli plein d’options sélectionnés dont plusieurs ne sont pas utile. Aussi, c’est un peu embêtant si on ajoute un deuxième service en référence dans le même projet. J’aime beaucoup mieux la méthode manuelle tel que décrit dans l’article WCF the Manual Way…the Right Way

Et vous, que pensez-vous des générateurs de code ?

Blogue « Code Complete »

Steve McConnell, un des mes auteurs favoris, vient de partir son blogue à l’adresse suivante:

http://forums.construx.com/blogs/stevemcc/default.aspx

Il est l’auteur, entre autres, des excellents livres suivants:

Code Complete (Guide très complet sur les manières de bien construire le code)

After the gold rush (essai sur la profession d’informaticien en général et autres trucs. Intéressant à lire)

gr.gif (9552 bytes)