Archives mensuelles : mai 2011

News de la semaine #23

imageLe guide “Domain Drive Design N-Layered .net 4.0 Architecture Guide” est disponible.

Toujours à propos de guide, Microsoft les “Parallel Programming Codeing Guidelines”.

Phil Haack présente son guide le formattage de code source.

Jeff Atwood propose un billet intéressant sur la gestion des versions et mises à jour des logiciels.

Zain Naboulsi décrit la métrique de couplage de classes telle que proposée par VS Premium/Ultimate.

A propos des langages, Eric Lippert propose un premier post sur les concepts d’atomcitié, de volatilité et d’immuabilité.

Visual Basic fête ses 20 ans d’existence.

Christiaan Baes explique la différence d’implémentation des propriétés automatiques en VB et en C#.

Patrick Smacchia propose une review du magnifique ouvrage C# in Depth Second Edition de Jon Skeet.

Paul Sheriff propose une introduction au pattern MVVM et Ward Bell en propose une analyse.

Du côté de l’actualité produits, la première version post-Novell de MonoDevelop (2.6 Beta 3) est disponible.

La version 3 du SDK Windows Azure pour PHP est disponible sur CodePlex.

Microsoft Research présente le Debugger Canvas qui sera disponible en Juin 2011.

DevArt propose gratuitement un éditeur T4 compatible VS 2008/2010.

DiffPlex 1.2 est disponible sur CodePlex.

L’équipe de JetBrains décrit les fonctionnalités de R# 6 à propos de la simplification de l’écriture de code Javascript.

Du côté de l’actualité française, Matthieu Mezil explique comment récupérer par code les WorkItems d’un ChangeSet dans un contexte de branche.

David Catuhe met à disposition le code et les démonstrations des sessions 3D des Microsoft Days 2011.

image_thumb.png

L’incompétence des développeurs

Il y a un peu plus d’un mois je m’étais décidé à répondre au post “On a besoin de stars pas de managers”.

Romain David, co-fondateur de la startup Balloon y explique son désarroi face au grand nombres de développeurs qui ont comme objectif de :

ne pas rester éternellement développeur, mais devenir chef de projet

 

Ce qui dans le cas d’une startup est pénalisant puisque la société recherche des profils techniques pointus, autonomes, capables d’apporter une vraie valeur ajoutée par rapport à des “pisseurs de code” classiques.

La raison de ce désamour du métier de développeur qui incite à devenir chef de projet est selon moi identique à la raison pour laquelle les développeurs ont une mauvaise image.

Et cette raison est simple :

une très grande majorité des développeurs est incompétente

 

Je vous parlais il y a peu des 3 stades de maturité d’une équipe de développement, le problème est que selon mon expérience environ 75% des équipes (et donc des développeurs et chefs de projets) sont dans la phase du chaos, 20% dans la phase intermédiaire, et 5% sont autonomes. (N’hésitez pas à confirmer ou infirmer cette estimation dans les commentaires).

Et pour illustrer cette incompétence je vais m’attarder sur le profil des développeurs .net. Une majorité n’a pas des connaissances de bases telles que :

  • Connaissances de bases sur la POO (expliquer clairement la différence entre une classe et un objet, les différences entre une classe abstraite et une interface, notions de base sur l’héritage, donner un exemple de design pattern, etc.)
  • Comment gérer les erreurs (définir les différentes stratégies de gestion des exceptions)
  • Savoir définir avec une phrase claire ce qu’est le framework .net et quels sont les services fournis par le CLR.
  • Maitriser ce qui n’a pas attrait à l’écriture de code et que Microsoft regroupe sur le terme d’ALM (gestion des sources, gestion des tâches/bugs, builds, tests, etc.)
  • etc., etc., etc.

Quand je parle d’incompétence je ne parle donc de non-maitrise de concepts et notions mais de non-maitrise des fondamentaux essentiels au bon déroulement d’un projet de développement.

Durant les entretiens techniques que je fais passer, j’en suis “réduit” à poser des questions ouvertes afin de juger du recul du candidat sur différentes technologies (compréhension des principes et de la philosophie d’une techno, description des avantages et des inconvénients de la techno), et de juger de sa compréhension du métier de développeur (recul par rapport au métier, description des difficultés du métier, et comment y pallier). Ceci pour estimer de sa capacité à rapidement arriver au 2eme stade de compétence décrit rapidement ci-dessus.

Le fabuleux destin du développeur

Fort de cette incompétence, le développeur tel un forçat va devoir s’efforcer d’essayer de rattraper (souvent en vain) ses propres erreurs, les erreurs de ses collèges développeurs, du chef de projet, et des commerciaux. Oublier la notion d’horaires de travail et prendre un soin particulier à bien entretenir sa nouvelle petite amie : la machine à café.

Le tout en devant :

  • expliquer pourquoi une fonctionnalité qui marchait correctement auparavant ne fonctionne plus à cause d’une modification qui n’a (en apparence) aucun rapport avec celle-ci
  • parvenir à justifier pourquoi il serait plus simple de refaire depuis zéro

qui pourrait être traduit par :

  • “ah bravo tu es tellement mauvais que quand tu touches une partie de l’application, tu en casses une autre“
  • “tu es tellement mauvais que pour faire une tâche tu dois t’y reprendre à plusieurs fois en recommençant à zéro“

image

Ainsi après avoir passé plusieurs mois à travailler sur des projets en sachant pertinemment que le développement réalisé était de très mauvaise qualité, et en se demandant pourquoi on lui avait explique que les frameworks et outils actuels rendaient la vie du développeur très simple (on m’aurait menti ?) il est compréhensible que celui-ci veuille prendre la responsabilité de chef de projet.

Une partie des développeurs voudront assumer cette responsabilité afin d’essayer d’améliorer les choses.
Bien évidemment, n’ayant pas reçu de formation de chef de projets, la probabilité d’arriver à réellement améliorer les choses est assez faible. Et ceux qui font l’investissement de faire une pause dans leur cursus professionnel afin de retourner à l’école et suivre une vraie formation de chef de projet suite à de mauvaises expériences vécues en tant que développeur, se font recaler pour leur manque d’expérience (cas d’un récent candidat qui recherche donc à présent de nouveau un poste de développeur…)

Une seconde partie de développeurs voudra devenir chef de projet non pas pour améliorer les choses mais pour ne pas à avoir subir toutes les erreurs du projet tout en ayant un meilleur salaire. Comme dans beaucoup de secteurs, c’est le salarié tout en bas de l’échelle qui subit le plus les conséquences des erreurs qui ont pu être commises. Il est donc plus confortable de monter d’un niveau, on ne sera pas plus compétent mais au moins on se tuera moins à la tâche. Et oui, dans le domaine du développement le développeur est considéré comme l’ouvrier préposé aux tâches répétitives. Après tout, du code ça reste du code non ?

Pour les développeurs qui ne souhaitent pas ou ne peuvent pas devenir chef de projet, plusieurs attitudes sont possibles. La plus courante est la résignation. Quand on a pleinement conscience de faire un travail de mauvaise qualité, soit on se rend malade en s’apitoyant sur son sort soit on prend du recul, de la distance, et on se détache petit à petit de son travail, en ne cherchant pas à s’impliquer et en renonçant totalement à essayer de faire changer les choses.

Je vous recommande la lecture de le post de Romain Verdier “Dégage sale programmeur ! ” qui décrit le problème avec infiniment plus de talent que moi.

Le métier de développeur est très complexe

Ce tableau assez noir n’est pas dû à la stupidité des personnes qui endossent le rôle de développeur (je pense que la majorité des développeurs est incompétente, je ne pense pas qu’ils sont stupides…) mais à la complexité du métier de développeur.

Un développeur doit posséder les compétences suivantes :

  • Etre avant tout un très bon “informaticien”. J’entends par là qu’il doit maitriser les notions fondamentales indispensables à la bonne utilisation et à la bonne exploitation de l’outil informatique. Maitrise d’un grand nombre de connaissances qui ne sont pas directement lié au développement (exemples : maitrise du fonctionnement d’un OS, de sa conception, de son architecture, sa gestion de la mémoire, maitriser la sécurité, savoir ce qu’est un process, un thread, maitriser la différence entre le 32 bits et le 64 bits, savoir ce qu’est une partition, savoir ce qu’est la virtualisation, connaitre les fondamentaux liés aux réseaux (ARP, DNS, IPV4, IPV6, MAC, etc.) etc., etc.)
  • Et après avoir acquis toutes ces connaissances “de base” sur l’informatique, le développeur pourra commencer à apprivoiser l’écriture de code et ceci via plusieurs langages puisqu’un seul ne suffira pas pour faire son métier (C#, VB, T-SQL, PL-SQL, XPath, Javascript, etc.). Il devra pour cela maitriser tous les fondamentaux de la programmation orientée objets, et découvrir par lui-même quelques bonnes pratiques qu’il n’a pas forcément ou pas correctement acquises durant sa formation. Puis au fil de son expérience devra comprendre en quoi consiste vraiment l’écriture de code (un code n’est pas figé et doit évoluer dans le temps = être maintenable, refactorisé et donc être testé, il doit de plus être géré via un source control (avec maitrise des concepts associés, checkin/checkout/label/shelve/merge, etc.).
  • Il devra également réellement comprendre en quoi consiste un projet de développement, le rôle et l’impact de chacun, et bien comprendre que développer ce n’est pas uniquement écrire du code.
  • Et bien évidemment comme l’informatique évolue très vite, une fois l’ensemble de ces connaissances acquises, le développeur doit être capable de les tenir à jour semaines après semaines en effectuant une veille technologique appropriée.

Bref, à mon avis un bon développeur se fait seul et n’apprends pas l’ensemble des concepts et notions qui feront de lui un développeur correct durant ses études (même après une école d’ingénieur). Cela nécessite un auto-apprentissage important (et donc un investissement personnel important) ce qui explique l’incompétence généralisée décrite au travers de ce post.

L’essentiel de la compétence d’un développeur s’acquiert via son expérience, il est nécessaire de réaliser que malgré toutes les compétences techniques qui ont pu (ou pas) être acquises durant les études, le métier de développeur nécessite de ne pas laisser tomber et de vraiment débuter à apprendre son métier lorsque l’on débute son expérience professionnelle le tout dans un contexte professionnel souvent très mauvais (mauvaise équipe de dév, mauvais chefs de projets, etc.)

Bon et bien évidemment, si vous pensez être dans les 5% évoqué ci-dessus ou même dans les autres 20%, je vous rappelle que je recherche du monde ! Clignement d'œil
(et maintenant vous connaissez certaines des questions que je pose durant les entretiens techniques…)

image

Les 3 stades de maturité d’une équipe de développement

Avec mon changement de métier en début d’année, j’ai naturellement enrichi ma liste de lectures avec des sites/blogs non techniques traitant du leadership d’équipes de développement.

Un des mes sites préférés dans ce domaine est le blog Five Whys de Roy Osherove et celui-ci identifie 3 stades de maturité d’une équipe de développement :

  • Le chaos : l’équipe ne possède pas les connaissances techniques fondamentales/de base/minimales nécessaires pour débuter à faire correctement les choses.
  • L’apprentissage : l’équipe possède certaines connaissances techniques ET non-techniques qui lui permettent de voir son niveau régulièrement s’améliorer
  • L’autonomie : l’équipe est quasiment autonome, et possède les connaissances nécessaires au bon déroulement d’un projet.

Vous pouvez vous référer à ce post ou encore à ces slides pour plus de détails sur ces stades de maturité.

image

Je n’avais jamais formalisé mon point de vue sur le niveau des équipes de dév. de cette manière avant d’avoir lu le blog de Roy Osherove, mais je suis entièrement d’accord avec ce découpage.

Et je trouve de plus qu’il permet d’expliquer énormément de choses concernant le monde du développement, et je vais m’attacher cette semaine à rédiger différents posts à ce sujet.

Stay tuned !

image_thumb3

News de la semaine #22

imageLa breaking news de la semaine est l’annonce de Miguel de Icaza de la création de la société Xamarin qui aura la charge du développement du framework Mono et de tous les frameworks et outils associés (MonoTouch, MonoDroid, etc.) suite au licenciement de l’équipe par Novell. Pour en savoir plus sur cette annonce vous pouvez consulter ce post de Craig Dunn.

Cette semaine a eu lieu les TechEd US l’occasion de faire quelques petites annonces : L’équipe ADO.net propose la CTP1 des Power Tools d’Entity Framework, le support des Enum dans la prochaine version d’Entity Framework, l’équipe de TFS présente les nouveautés de la prochain version de l’offre ALM.

Brian Harry décrit les avancées de TFS sur Windows Azure.

Il annonce également un SDK Java pour TFS.

Si vous souhaitez participer à l’amélioration des performances de Visual Studio, Bill Wagner vous explique quoi faire.

Sebastien Negomireanu propose une série de posts décrivant comment passer de MSUnit vers NUnit.
Il décrit également comment afficher le nom de la branche courante sur laquelle on travaille dans la barre de titre de Visual Studio.

Nathan Evan décrit comment autoincrémenter les versions d’assembly avec Mercurial.

Channel 9 propose presque en l’intégralité des keynotes de (presque) toutes les PDC.

Du côté de l’actualité française qui est riche cette semaine, Kalistic publie un premier post expliquant pourquoi les développeurs Java doivent arrêter de prendre de haut les développeurs C#.

Le webcast de l’après-midi du développement présenté par Matthieu Mezil et Michel Perfetti est disponible.

Matthieu Mezil décrit comment vérifier qu’il n’y ait pas une contrainte lors de la suppression d’un enregistrement via Entity Framework.

David Rousset met à disposition les slides de sa présentation sur HTML 5.

David Catuhe décrit son implémentation de la TPL cross-device  qu’il met à disposition sur CodePlex.

Il publie également les sources de sa présentation “Construire une interface réactive avec WPF 4.0”.

Guillaume Lacasa présente la version 2 de la librairie de contrôles pour WP7 nommée “Bewise Phone Controls”.

Etienne Margraff présente quelques nouveautés de la prochaine version de Visual Studio ALM.

sub_servers_hyper_v

Microsoft et la virtualisation

C’est avec un regard assez moqueur que je me suis lancé dans le visionnage de la session des TechEd US intitulée “Understanding How Microsoft Virtualization compares to VMWare”.

Regard moqueur puisque convaincu que l’offre de  Microsoft a des années de retard par rapport à celle proposée par VMWare.

J’ai d’ailleurs déjà posté à ce sujet en rappelant l’incroyable non-support du 64 bits sur les OS invités pour les produits de virtualisation suivants : Microsoft Virtual PC, Windows Virtual PC et Virtual Server. Seul Hyper-V supporte ce type  d’architecture pour les OS guest alors même que tous les PC actuels et ceci depuis plusieurs années sont en 64 bits. Il s’agit pour moi d’une limitation inexcusable et totalement anormale qui décribilise totalement l’offre de virtualisation de Microsoft (à l’exception d’Hyper-V).

Je me suis donc lancé dans le visionnage de cette session des teched US en m’attendant à regarder pas mal de bullshit marketing (un peu comme durant le premier keynote du Mix de cette année), et à ma surprise j’ai appris plusieurs points intéressants que je vais partager avec vous via ce post :

  • Premier point (non intéressant mais qui permet de situer le sujet), la session aurait du être nommée “Understanding how Hyper-V and System Center compares to VSphere”. Les autres outils de virtualisation destinés aux postes de travail tels que MS VPC, Win VPC, ou encore VMWare Workstation ou Player n’ont pas du tout été abordés.
  • Lorsque l’on passe d’une infrastructure physique à une infrastructure virtuelle, une des premières questions que l’on se pose est de savoir quelle est la perte de performance à laquelle on peut s’attendre si l’on fait du 1-1. Cette perte semble être d’environ 15%.
  • La notion d’OS guest supporté par Microsoft sur Hyper-V est complètement différente des autres éditeurs. Quand Microsoft indique qu’il supporte tel OS en guest cela signifie qu’il fournit un support complet de l’OS virtualisé. Ainsi quand ils annoncent le support de certaines versions de Red Hat Entreprise Linux, cela signifie qu’ils fournissent le support sur cet OS même si l’incident n’a absolument rien à avoir avec le fait qu’il soit virtualisé. L’éditeur travaille pour cela en collaboration avec les équipes support des OS dédiés.
    Ainsi quand VMWare annonce la plus large gamme d’OS guest supportés, ils ne parlent pas de la même chose puisque par exemple Microsoft ne supporte plus depuis longtemps MS DOS 6.22 que cela soit sur des machines physiques ou virtuelles (alros que VMWare annonce qu’ils supportent cet OS).
  • Les présentateurs ont ensuite proposé le bullshit marketing que j’attendais en expliquant qu’en fait il faut comparer VSphere à Hyper-V ET System Center, que System Center propose beaucoup plus de chose que VSphere mais qu’en fait VMWare propose la gamme VCenter qui est toute jeune et moins mature que System Center blabla, un discours orienté IT pro et non développeurs et qui donc ne m’a pas intéressé Sourire
  • Une session en partie intéressante donc même pour des profils développeurs, en attendant une session qui serait intitulée “How Windows Virtual PC and Microsoft Virtual PC compete with VMWare Workstation and Player”…

    News de la semaine #21

    imageCette semaine une actualité produits très riche avec une présentation des Productivity Power Tools (qui permettent entres autres d’avoir une vraie gestion des références dans VS 2010) est proposée par Channel 9.

    Suite à l’annonce de RedGate de ne plus offrir Reflector gratuitement puis de presque le réoffrir gratuitement, plusieurs éditeurs se sont lancés sur le créneau, avec JetBrains qui propose en Early Access DotPeek. Et Telerik qui propose JustDecompile.

    L’équipe de P&P propose un pack d’intégration Slverlight pour EntLib 5.0.

    NDepend est disponible en version 3.8.0. Et toujours à propos de NDepend Hendry Luk propose un exemple d’utilisation concret du produit grâce à la description d’une session de refactoring de SheepAOP.

    Une nouvelle release de l’ASP.net Ajax Control Toolkit est disponible.

    Le projet NuGet dispose d’une nouvelle documentation.

    Microsoft propose un toolkit Windows Azure pour iOS.

    Jesse Liberty propose une série de posts décrivant les nouveautés qui seront proposées par la mise à jour Mango de Windows Phone 7.

    Du côté de l’actualité française, Lionel Limozin décrit comment utiliser l’authentification Windows et Forms avec RIA Services.

    Microsoft France organisera un après-midi du développement spécial “Mango” le 1er Juin.

    image

    ReMix 11

    imageReMix 2011Comme indiqué dans les news de la semaine, Microsoft organisait hier le ReMix 11, version française et synthétique de l’évènement Mix 11 qui a eu lieu à Las Vegas il y a quelques semaines.

    La matinée était destinée aux “décideurs Marketing” et n’en était pas moins intéressante même pour un profil “Techos” comme le mien.

    Je ne vous parlerais donc pas des opportunités business apportées par les différentes technos présentées notamment dans le secteur du retail mais plutôt des éléments techniques que j’ai pu retenir.

    Et j’ai retenu un point de cette matinée :

    • Le support inconditionnel d’HTML 5 et les attentes suscitées par ce standard

    Que cela soit de la part de Microsoft ou des différents intervenants qui ont pu présenter leurs projets ou parler lors des tables rondes, tout le monde avait des attentes fortes sur HTML 5. Cela s’explique par la nécessité de disposer d’une norme unique et supportée par tout le monde (cross-browser et cross-device) afin de proposer un service simplement à destination de tous. Eric Cremer de Dailymotion résume bien la situation : alors que l’on parle beaucoup d’unification, nous sommes toujours (et de plus en plus) dans un monde très fragmenté. Entre les applications web qui doivent être compatibles multi-browser (Internet Explorer, FireFox, Google Chrome, Safari, etc.) et les applications riches (iPhone, Windows Phone 7, Android, etc.), fournir un service sur toutes les plates-formes coûte cher demande du temps pour toucher des utilisateurs qui sont souvent surévalués en nombre. Comme l’a indiqué Eric Cremer, les smartphones représentent 20% des téléphones, et les iPhone représentent 30% de ceux-ci. De quoi modérer les investissements vers ce type de plate-forme.

    L’HTML représente donc le messie que tout le monde attend afin d’être capable de développer une application qui fournira un même service à tous les utilisateurs puisque supporté par tous les principaux browser et devices.

    Nous avons eu d’ailleurs droit à plusieurs démonstrations sympathiques, d’un site Renault avec une expérience utilisateur riche rendue possible grâce à HTML 5 ou encore d’un CMS dont l’administration se fait (presque) sans BackOffice.

    Une matinée intéressante même si je n’en retranscrit ici qu’une faible partie.

    L’après-midi était elle destinée aux développeurs et aurait pu être commencée par David Rousset expliquant qu’HTML 5 ne serait pas le messie tant attendue par les marketeux du matin Sourire (même s’il s’en rapproche).

    Celui-ci s’est efforcé de montrer les énormes progrès et même les innovations apportées par IE 9 en terme de respect de standards (tant d’un point de vue de l’affichage que des performances) et à ensuite présenté un état des lieux objectif de la situation actuelle à propos d’HTML 5 :

    • Tous les navigateurs (IE compris) n’implémentent pas encore l’intégralité de la myriade des standards qui tournent autour d’HTML 5.
    • Il est donc nécessaire de fournir des modes dégradés aux navigateurs moins avancés que les autres
    • Certaines parties du standards sont encore sujettes à modification
    • Les benchmarks sont du bullshit marketing (ça c’est pas nouveau…)
    • Il manque les outils de développement qui permettent de créer de vrais applications HTML 5, et cela donc coute très cher à développer à l’heure actuelle. (Mon principal reproche sur HTML 5 actuellement)

    David Catuhe a quant à lui présenté les nouveautés de Silverlight 5 et Windows Phone 7.5 “Mango”. Il s’agissait de la présentation la plus technique et (donc ?) la plus intéressante puisque présentant des nouveautés que l’on avait pas vu jusqu’à présent (comme les nouveautés liées à au prochain émulateur de Windows Phone). Nous avons vu en vrac :

    • Le fait que Silverlight 5 sera peut-être PC only. J’espère sincèrement que cela ne sera pas le cas, mais la difficulté d’implémenter la couche 3D en cross-plateforme (alors que Flash le fait sans soucis sur Windows/Mac/Linux).
    • Un meilleur accès aux informations stockées par le téléphone (contacts, calendrier, etc.) sera proposée
    • De biens meilleures performances avec apparemment une exposition des contrôles “natifs” utilisés par Microsoft pour l’interface de Windows Phone dans Silverlight. Finis donc les problèmes de listbox qui rament alors qu’elles ne contiennent pas grand chose.
    • La mise à disposition d’un SQL Server CE
    • Des outils permettant d’émuler le GPS/boussole/gyroscope

    Here is the slide with #WP7 new features - with Spatial Framework information on it by @Deltakosh at #remix11

    Microsoft organisera d’ailleurs  un évènement le 1er Juin à propos de Mango afin de pouvoir découvrir toutes les nouveautés de cette version majeure de Windows Phone.

    David a ensuite parlé des opportunités offertes par les technologies UI telles que WPF et Silverlight, et Kinect en terme d’ergonomie et comment en profiter pour créer des applications avec une UX sympa et ayant conscience de leur environnement.

    En synthèse donc une bonne journée à laquelle j’ai pu assister de Pau tout en travaillant grâce au livestreaming qui était de bonne qualité.

    News de la semaine #20

    imageAnders Hejlsberg répond à différentes questions de développeurs sur cette vidéo de Channel9.

    Autre discussion celle-ci avec Herb Sutter à propos du C++.

    Rick Strahl nous présente les spécificités de la  compression Gzip/Deflate apportées par IIS 7.x

    Patrick Smacchia décrite les inconvénients de l’utilisation des membres statiques.

    Toujours à propos de membres statiques, Igor Ostrovsky décrit les locks implémentés autour des constructeurs statiques.

    Microsoft propose une nouvelle extension de WinDBG pour .net 4.0.

    L’équipe d’Entity Framework nous décrit l’implémentation des types spatiaux dans la prochaine version d’EF.

    Scott Hanselman nous propose son point de vue sur le choix entre HTML 5 et Silverlight.

    Du côté de l’actualité française,  Michel Perfetti continue sa série de piqures de rappel sur l’utilisation de TFS grâce à un post sur les contrôleur de source.

    Microsoft France lance un concours de développement d’applications Facebook hébergées sur Windows Azure.

    Du côté des évènements, il n’est pas trop tard pour vous inscrire au ReMIX 2011 qui aura lieu le 11 Mai chez Microsoft France.

    2 jours plus tard et au même endroit, vous pourrez également assister à un après-midi du développement sur XNA.