# Le futur du développement logiciel

Voici une traduction de l'article intitulé The Future of Software Development écrit par Alex Iskold et publié sur Read/WriteWeb qui reprend les bases et qui va remotiver tous les développeurs qui me lisent ;-). Je manque de temps en ce moment pour publier mais il y a pas mal de choses en gestation qui devraient évoluer au cours de la semaine.

En 1975, Frederick Brooks a écrit un livre sur la gestion de projets informatiques intitulé The Mythical Man-Month (le mythe du mois-homme). Dans cet ouvrage, il démontre brillamment qu'ajouter des personnes à un projet de développement va le ralentir et non l'accélérer. La raison évoquée est qu'ajouter de nouvelles personnes induit une augmentation non linéaire du temps consacré à la communication.

Cinq années avant le livre de Brooks, une méthodologie du développement logiciel appelée le « cycle » en cascade (Waterfall model) est inventée. Cette approche applique les idées de l'ingénierie (mécanique, civile, etc) au logiciel. L'idée était de commencer par recueillir les spécifications, puis faire le design, puis l'implémenter, enfin le tester, et finalement obtenir un logiciel de manière linéaire.

Il a coulé beaucoup d'eau sous les ponts depuis et nous avons beaucoup appris dans le développement logiciel. Le modèle en cascade est maintenant désuet car il est trop rigide et irréalisable. Dans la vraie vie, les projets de logiciels sont mal définis et ont des fonctionnalités en constante évolution, ce qui ne permet pas de tout envisager dès le départ. Les meilleurs logiciels sont aujourd'hui développés et entretenus grâce à des méthodes agiles. Ces techniques permettent aux ingénieurs de réajuster constamment le logiciel en fonction du marché et des exigences des clients.

Avec l'avènement des langages de programmation modernes (Java, PHP, Python et Ruby), les nombreuses bibliothèques et un nombre sans précédent d'infrastructures de services comme Amazon, nous sommes arrivés à un nouveau pallier de l'évolution. Digg, del.icio.us, YouTube et les autres sont les enfants d'une nouvelle ère du web développée par une poignée de développeurs. Pour concevoir un logiciel aujourd'hui, vous n'avez besoin que de quelques bons développeurs. Dans cet article, nous retraçons l'historique de cette évolution et analysons les possibilités futures.

## Pourquoi le modèle en cascade a-t-il échoué ?

Les néophytes pensent qu'une application est facilement modifiable. Comme ça reste relativement abstrait, les gens pensent que les logiciels peuvent être paramétrés et mis à jour en un claquement de doigts. Bien évidemment, ce n'est pas le cas. La conception, comme tout système mécanique, a un design et une structure ; ce n'est pas aussi simple que ça en a l'air.

Depuis toujours, l'accélération de l'économie requiert des modifications constantes des logiciels. Les anciennes méthodes de développement ne sont plus du tout adaptées au marché actuel. Lorsque l'on utilise le modèle en cascade, ces modifications sont impossibles, le cycle de développement est trop long, les logiciels sont des usines à gaz et finissent par coûter une fortune, pour le plus souvent ne pas fonctionner correctement au final.

Le problème c'est que le modèle en cascade est arrogant. L'arrogance vient du fait que nous pensions pouvoir concevoir l'application parfaite au premier essai. Le second problème, c'est que la vie d'un projet logiciel suit une évolution non linéaire. C'est en partant de ce constat que l'on s'est tourné vers les méthodes agiles de développement.

## Les méthodes agiles ou l'évolution des logiciels

Au début des années 90, un bon nombre de méthodes de développement agiles ont vu le jour. Bien qu'elles diffèrent dans le détail, elles amorcent une réflexion profonde sur la manière dont doit être mené un projet de développement. Tout d'abord, les développements doivent être réactifs aux changements. Les besoins d'aujourd'hui peuvent évoluer, et l'industrie logicielle doit pouvoir répondre à une telle évolution. Pour y parvenir, les promoteurs de telles méthodes prônent le retour à la simplicité. Concevoir aujourd'hui un système simple qui satisfait les besoins actuels et prêt à s'adapter en fonction des exigences de demain.

Deux techniques, initiées par les méthodes agiles, doivent être prises en considération : la généricité et les tests. La généricité, élégamment décrite par Martin Fowler dans son grand classique est l'idée d'améliorer le design du code actuel sans en changer le résultat.

La généricité est ce qui permet aux systèmes agiles d'être évolutifs, tout en restant élégants. Tout comme un décorateur d'intérieur change constamment celui-ci et améliore votre vie quotidienne, les développeurs agiles agissent sur le cœur de l'application de façon à en améliorer la qualité globale. Le code est en constante mutation de façon à obtenir en définitive le plus simple et le meilleur système adapté aux besoins.

Pour s'assurer de la non-incidence de ces changements perpétuels sur le résultat final, les méthodes agiles ont introduit les tests unitaires. À chaque nouvelle extension du projet, la base de test grossit proportionnellement. Chaque test porte sur un unique composant du système et s'assure de la validité de son fonctionnement. Généralement, les tests sont lancés à chaque modification et requièrent une correction immédiate si un échec est signalé.

Les systèmes conçus à l'aide de méthodes agiles ont davantage de chances de réussir car ils sont évolutifs et adaptés au problème. Comme des organismes vivants, ces systèmes sont continuellement refaçonnés afin de s'adapter aux contraintes. Aucun doute là-dessus, les méthodes agiles ont eu un impact majeur sur notre manière de concevoir un logiciel aujourd'hui : dynamiquement et de manière continue.

## L'utilisation des bibliothèques

Parallèlement à la découverte de nouvelles méthodes de développement, de meilleurs langages de programmation sont arrivés à maturité. C a été remplacé par C++, puis vint Java. Perl était génial, mais PHP et Python on su tirer parti de ses erreurs. Plus récemment est apparu Ruby, qui est devenu très populaire grâce à sa manière expressive de déclarer le code. En raison de cette évolution, nous disposons aujourd'hui de nombreux langages excellents et virtuellement équivalents. (NdT : je ne suis pas vraiment d'accord avec ce paragraphe mais les langages et les éditeurs, ça ne se discute pas...)

Alors que le choix du langage de programmation est un sujet sensible, en fait ça ne dépend pas à proprement parler du langage mais des bibliothèques qui font la différence. C++ n'aura jamais la bibliothèque standard que détient Java. Oui Java est le langage le plus simple mais les gens utilisent C++ depuis une décennie sans problème. Ce qui avantage Java, c'est la richesse de ses bibliothèques réutilisables. Et c'est la même chose pour PHP. Il a été le langage de prédilection des développeurs web grâce à ses bibliothèques dédiées au web et aux interactions avec les bases de données.

En plus des bibliothèques accompagnant ces langages modernes, le mouvement open source a aussi contribué énormément à l'infrastructure de développement logiciel. La fondation Apache a elle seule a produit énormément de briques réutilisables de grande qualité. Nous arrivons à une période où nous disposons des fondations solides pour bâtir des systèmes complexes. Nous avons les méthodes et les outils, et après ?

## Le futur du développement logiciel : les petites équipes

Depuis les débuts du développement logiciel, les gens s'excriment afin de déterminer comment concevoir de bons systèmes le plus rapidement possible. De plus en plus de personnes se sont mises à plancher sur le problème, ne faisant qu'empirer les choses. Mais avec la récente explosion des applications web sociales nous avons assisté à la naissance d'un intéressant phénomène : une poignée de développeurs est maintenant capable de bâtir des systèmes utilisés par des millions d'utilisateurs. Comment est-ce possible ?

Le secret vient du fait qu'il ne faut que quelques hommes pour accomplir des tâches ardues. Avec un peu de discipline et une tonne de passion, de bons ingénieurs sont en mesure de concevoir des systèmes d'une grande complexité.

Équipés d'un langage de programmation moderne, de bonnes bibliothèques et de méthodes agiles, quelques développeurs intelligents dans leur garage arrivent tout simplement à faire beaucoup plus qu'une armée de développeurs médiocres.

Nous allons assister à des changements au cours des prochaines années :

- Les ingénieurs qualifiés et passionnés vont être très demandés et vont gagner beaucoup plus. NdT : comment ne pas être d'accord ?! ;-)
- Les développeurs qui n'ont pas des qualités de programmeur avérées vont devoir se recycler.
- Les changements qui sont en train de s'opérer dans le domaine des applications sociales va gagner le monde de l'entreprise.
- La délocalisation du développement va devenir désuette.
- L'informatique va devenir un domaine compétitif et prestigieux.

## Conclusion

Ironiquement, on a fait le tour avec le mythe du mois-homme. Ce qui était vrai 20 ans auparavant est toujours vrai, mais pour d'autres raisons. Un environnement exceptionnel regroupant des langages et des bibliothèques combinés à des méthodes de développement agiles ont permis de briser les dogmes anciens du développement logiciel. Une poignée de bons développeurs peut dorénavant concevoir des systèmes d'une grande complexité. L'homme des cavernes est finalement arrivé jusqu'au développement logiciel !

### Articles peut-être en rapport

- ★ Résolutions : rediriger, économiser et débattre
- ★ Résolutions : découvrir, concrétiser et transmettre
- ★ Bilan après une année de freelance

### Commentaires

NiCoS le 30/10/2007 :

Ouais, enfin le modèle en cascade a encore de beaux jours devant lui. Suffit de faire une mission chez un "grand compte" pour s'en apercevoir. Leurs tentatives pour devenir agile ne font que souligner leur inertie et la lourdeur de leur structure (sans parler de la résistance au changement). Dans certaines SSII, c'est encore vrai aussi. Ce n'est pas évident de mettre un projet en mode "agile" :-/
Certaines personnes voient même ça comme une faiblesse du prestataire à faire des jolies specs & co :-(
A l'inverse, certains prennent les méthodes agiles comme un moyen de se débarasser des specs et de naviguer à vue (par temps de brouillard) sur un projet. Faut faire aussi attention à cet écueil là.
Sinon, sur le fond, je suis d'accord :-)
++
NiCoS, en plein projet cascade :-((((

Earered le 30/10/2007 :

hmrf, une analogie de mon pôpa (dans le médical), c'est que l'informatique est comparable au médical dans le nombre de domaine qu'il couvre réellement.
De la même façon qu'il n'y a pas grand chose à voir entre un proctologue et un dentiste, il n'y a pas grand chose à voir entre le développement du logiciel controlant la ligne 14 à Paris et celui d'une page web.
Donc oui, rajouté une personne sur un projet de 6 mois avec 3 personnes ne va pas faire grand chose de bien.
Mais en former 15 pendant 6 mois, par groupe, avec 3 personnes à plein temps pour former, sur un projets prévu à l'origine sur 2 ans avec 50 personnes aura un effet radical (est ce que le temps consacré à la formation, sera rentabilisé par l'apport de main d'oeuvre supplémentaire, et est ce que les taches (séparation en couche de l'application) sont suffisament séparé pour que l'overhead de communication ne soit pas pénalisant par rapport au gain apporté par la main d'oeuvre).
Et non, le C n'a pas disparu (sisi), le python, le java ne remplace pas le C, ils permentent d'autres choses. Un petit tour sur Gartner ou les offres d'emplois, ou les appels d'offres et résultat: pour le C ça n'a que peu bouger. Par contre, des langages de plus haut niveau permettent de faire d'autres choses (des jeux rapidement sur téléphone portable), mais ne remplace pas les compilateurs, ou la programmation des générateurs de compilateur (les tâches des anciens langage évolues). L'activité informatique a énormément grossi, de nouvelles choses sont apparus. Appuyé sur de bonnes bases bien adapté mais qui ne change pas rapidement.
L'informatique évolue peu au sens biologique (ou en fait si, dans le sens ou il y a toujours des requins, mais maintenant il y a aussi des dauphin, mais pas dans le sens ou les espèces précédent le dauphin disparaisse). Elle aurait plutôt tendance à créer de nouvelles branches. vi existe toujours (légèrement évolué en vim), et probablement autant utilisé aujourd'hui qu'il y a 10 ans. Eclipse n'existait pas.
En conclusion, le texte m'a titillé dans le mauvais sens du poil sur certains termes, et sur un certain optimisme, mais ça n'enlève rien à l'intéret des nouveauté (automatisation et formalisation des tests, développement de composant isolé de façon à ne pas préjugé des évolutions futurs, mais là on est dans le domaine de la conception/ingénierie logiciel plus vraiment dans une histoire de cycle de développement) :p
P.S. pour les bibliothèques, je me demande si ça n'est pas plutôt une évolution de l'ingénierie juridique qui les rends et moins couteuse (licence libre), et que du coup des produits (logiciel) qu'il n'aurait pas été rentable de créer appraisse maintenant et le son (et enrechisse le domaine, mais ça semble normal quel que soit le domaine).

omic le 30/10/2007 :

Lecture très intéressante. Merci pour ce résumé de qualité. :o)

neolao le 30/10/2007 :

très bon article
je pense également que le domaine va devenir plus compétitif
c'est fini les petits dev

Damien B le 30/10/2007 :

Je commente l'article, pas le traducteur :-D
Et je pars en hors-sujet aussi, j'aime bien polluer ici :-D
"Les meilleurs logiciels sont aujourd'hui développés et entretenus grâce à des méthodes agiles."
Houlà. Si ça ça n'est pas du retrofitting ! Ou alors c'est considérer que tout ce qui n'est pas cycle en V (ou waterfall, ce qui est quasi identique) est agile : on en est loin. Et ensuite, le meilleur logiciel est inconnu de l'immense majorité des gens. En même temps, il faut prendre le terme de logiciel dans le contexte du blog Read/WriteWeb, c'est-à-dire de manière assez restreinte.
"Ironiquement, on a fait le tour avec le mythe du mois-homme. Ce qui était vrai 20 ans auparavant est toujours vrai, mais pour d'autres raisons.Les ingénieurs qualifiés et passionnés vont être très demandés et vont gagner beaucoup plus."
Et ta soeur ?
"Ironiquement, on a fait le tour avec le mythe du mois-homme. Ce qui était vrai 20 ans auparavant est toujours vrai, mais pour d'autres raisons. Un environnement exceptionnel regroupant des langages et des bibliothèques combinés à des méthodes de développement agiles ont permis de briser les dogmes anciens du développement logiciel."
Rappelons que le Mythe du mois-homme est basé sur l'expérience de Brooks dans le développement d'OS/360, et qu'on souhaite beaucoup de courage au prochain qui voudra développer quelque chose de la même ampleur avec des méthodes agiles ; la première étape consiste à trouver le client pour lui demander tous les 15 jours : "et là, pour avoir l'aide en ligne de commande, vous préférez /h, -h, /? ou -? ? Ou on peut le faire de manière totalement dynamique ! C'est agile, c'est fou !". Bref. là où cet article est trompeur, comme une palanquée de la Liturgie Agile, c'est qu'il est basé sur le dogme suivant : il n'y a pas complexité irréductible. (Et cette idée est d'ailleurs discutée dans le livre de Brooks).
Et on retrouve là le palimpseste du web, le même que celui qui a fait disparaître les Community Management System de l'histoire des systèmes de publication. Il suffit pour cela de remplacer "Méthodes agiles" dans l'article par L4G. L'environnement exceptionnel c'est le L4G. La poignée de développeurs expérimentées qui claquent un ERP en trois semaines ? C'est grâce aux L4G. Les modifications en permanence à faible coût ? L4G toujours.
Alors, pourquoi ne parle-t-on plus des L4G ? Qu'est-ce-qui dans ces Méthodes Agiles n'était pas déjà promis par les L4G ?
Ce qui nous amène au titre :
"Le futur du développement logiciel"
Houlà. On a presque eu une info... "Le mythe du mois homme" : 1975, "No Silver Bullet" : 1986, "Le mythe du mois édition anniversaire" : 1995, "Extreme Programming Explained: Embrace Change" : 1999. Pour le futur, on repassera :-D

zyegfryed le 30/10/2007 :

Salut,
Merci pour cet (traduction d') article ! C'est rafraichissant et motivant !
J'accompagne l'auteur dans ses pensées quant à notre manière de travailler actuelle et future. Vivement l'avènement des petites équipes de développeurs passionnés et passionnants grâce auxquels on apprend autant que se que l'on peut échanger. Bref, la culture open source au boulot c'est pour quand ? :)
Seb

kib le 30/10/2007 :

>>ajouter de nouvelles personnes induit une augmentation non linéaire du temps consacré à la communication
Il faudrait alors préciser le terme "non linéaire", il y a plein de choses qui ne le sont pas. Et on peut très bien ne pas l'être et s'en approcher de très près.
En tout cas, développer seul est très long et on aimerait parfois avoir de l'aide, ça c'est certain.
>>Juste en dessous de l'image avec le bouquin : "recueillir les spécification"<--- ton prof de Français ne serait pas content, tu me le copieras dix fois :)
Quand à la conception, on est tous d'accord là dessus : qui voudrait d'un logiciel non extensible de nos jours ? Ces petits "plugins" rendent bien service et s'adaptent à nos besoins, même si on fini par en abuser souvent (tiens par exemple, combien d'extensions FireFox possédez-vous ?). Ils sont cependant beaucoup plus difficiles à mettre en place en pratique, le système doit être simple à manipuler pour le quidam moyen.
La généricité et le développement par les tests ont faits leur preuve : ce sont d'excellents outils.
>>nous disposons aujourd'hui de nombreux langages excellents et virtuellement équivalents
Oui, 'virtuelement' en effet.
Quant aux bibliothèques des langages, elles sont à la fois un atout mais aussi une faiblesse: Java a une bien jolie API (certainement la plus fournie), mais qui n'en a jamais eû peur à première vue ? Perso, je préfère une bibliothèque standard bien moins élaborée, mais dans laquelle je me retrouve.
>>Les ingénieurs qualifiés et passionnés vont être très demandés et vont gagner beaucoup plus.
Si ça pouvait être vrai...
>>La délocalisation du développement va devenir désuette.
Ah ? Tu veux dire par là qu'on pourra bientôt rivaliser avec des développeurs Indous chez nous ? Ca me paraît difficile à croire :
1. Ils sont pour la plupart passionnés et ont un niveau technique vraiment très élevé;
2. Ils ne sont pas très chers (et moins exigeants sur les contrats) comparé à un développeur moyen Européen.
Dans dix ans tu pourras certainement réécrire le même billet concernant les méthodes d'aujourd'hui : on croît toujours détenir la vérité à l'instant t, à t+1 on s'aperçoit là encore que le monde n'évolue pas de façon linéaire...et on remet ça !
Beau billet, @ +.

Arnaud le 31/10/2007 :

Bonjour,
Merci pour cet article intéressant.
Je me pose certaines questions à propos de l'Agile développement tant acclamé dans les pays occidentaux.
Je ne renie pas le fait que d'avoir une poignée de gens motivés et de nombreux échanges avec le client final permettent d'avoir un logiciel mieux adapté aux exigences en étant de très bonne qualité.
J’ai juste l’impression que les ingénieurs et développeurs occidentaux tentent par tous les moyens de justifier l’importance de leur travail de proximité avec le client final. Ceci fermant directement la porte à la production dans des centres Offshores en Asie ou autres.
Le développement Agile semble être ce bouclier idéal contre la mondialisation courante, sans parler de l’argumentaire Marketing indéniable.
- On parle beaucoup d’Agile (comme le Java à l’époque)
- Lire les 12 principes généraux de L’Agile développement dans WIKIPEDIA laissent penser que le client est vraiment ROI, ça fait peur…
Par ailleurs le client final ne dispose pas toujours des moyens et de la compréhension nécessaire du monde de la systématisation. L’échange direct et rapide avec les développeurs peut tourner à la catastrophe.
Je pense que la bonne méthode se situe entre les deux: une analyse stricte et relativement cadenassée avec de la flexibilité lors de certaines phases du développement et les batteries de tests unitaires en support.
Qu’en pensez-vous ?

Aguillem le 31/10/2007 :

Bonne traduction.. merci bien ;)
Bon moi je ne vais pas faire un commentaire aussi long que l'article ;) mais je pense aussi que les méthodes agiles sont un bon moyen d'avancer, a condition de les utiliser avec parcimonie et non pas bêtement.
Par contre, avant que le développement en cascade soit mort... on a le temps. Comme dit dans un commentaire plus haut, les grands comptes fonctionnent encore beaucoup comme ça et ça c'est très dur à faire bouger...

giz404 le 31/10/2007 :

Merci pour cette traduction ! Ca faisait longtemps que ça n'avait pas bougé par ici, mais ce retour en fanfare en vaut la peine !
@Nicos : "Certaines personnes voient même ça comme une faiblesse du prestataire à faire des jolies specs & co :-( "
Complètement !! J'étais dans ce cas pendant 2 ans, ou on faisait du développement "agile" comme Monsieur Jourdain fait de la prose.
Rachetés et fusionnés avec une autre boite, on s'est retrouvé à devoir adopter des méthodes et procédures qui nous ralentissaient plus qu'autre chose sans améliorer la qualité des applications produites...
De façon plus générale, je suis assez d'accord avec ce qui est dit dans l'article et j'ai déjà pu voir au cours de ma maigre expérience les 2 modèles d'organisation dans le développement logiciel :
- le développement "à l'ancienne" avec définition très précise du besoin, procédures, specs etc, puis développement bête et méchant à partir de ces specs par des équipes délocalisées pour gagner de l'argent. Ce modèle fonctionnera bien sur des grosses applis à la mise à jour peu fréquente.
- le développement agile : petites équipes composées de gens brillants et motivés, (et bien payés pour entretenir leur motivation). Cette organisation sera réservée aux projets sujets à changements fréquents (applications web en particulier)
Clairement, le modèle "agile" est plus attirant pour les passionnés. Les personnes qui développent dans un seul but "alimentaire" trouveront leur compte dans une entreprise organisée à l'ancienne, mais n'auront pas leur place dans un process de développement agile où il faut être technologiquement à la pointe, créatif dans son approche et ses solutions.
Alors le développement agile, le futur ? Oui, mais pas pour tout le monde...

Christian Fauré le 31/10/2007 :

On peut peut-être distinguer deux situations :
- on développe pour un client
- on développe en interne (comunauté open source, editeur de logiciel ou développement pour le web)
Dans le deuxième cas le développement agile peut beaucoup apporter. Peut-être moins dans le deuxième cas, car cela suppose un "client agile".

Grogro le 31/10/2007 :

>> Les développeurs qui n'ont pas des qualités de programmeur avérées vont devoir se recycler.
C'est quoi un développeur avec des qualités avérées de programmeur ? un fantasme ?
>> Les changements qui sont en train de s'opérer dans le domaine des applications sociales va gagner le monde de l'entreprise.
>> La délocalisation du développement va devenir désuette.
... quand le monde deviendra un grand village ou tous les hommes marcheront main dans la main libres et égaux en droit, tout ça grâce à la grande révolution technologique que nous préparent nos ingénieurs informaticiens (et développeurs avec des qualités avérées).
>> L'informatique va devenir un domaine compétitif et prestigieux.
J'espère que non car je crains le pire avec de telles visions de l'avenir que nous préparent ces ingénieurs surdoués ... un avenir pavé des meilleures intentions.
Désolé, pas envie de contredire plus loin ce ticket pourtant intéressant au départ. J'aime le logiciel libre mais aussi la pensée libre, pas ce genre de discours indigeste et bon marché qui semble tout droit sorti d'une pub Microsoft ou Apple.

Timothée le 31/10/2007 :

Merci pour ce post.
J'ai récemment fait une présentation des méthodes agiles dans ma boite pour tout un service, le concept est apprécié mais globalement tout le monde se dit c'est trop beau pour être appliqué.
Pourtant, c'est vrai que c'est inévitable, l'économie et la société vont beaucoup trop vite pour que l'entreprise machin puisse aujourd'hui livrer une application et dire "Allez, à dans 5ans pour en changer". Non ça n'est plus possible (enfin si dans les administrations et les 'grands comptes', mais ça devrait changer progressivement), surtout avec l'avènement des nouvelles technologies et ce qu'il est convenu d'appeler le web 2.0, qui habitue les utilisateurs à la version bêta permanente et à l'implication des utilisateurs (clients).
Et puis avec des applications compliquées qu'on peut réaliser de plus en plus vite et simplement, ce n'est plus le système qui va devenir prédominant, mais le service rendu aux utilisateurs, d'où l'intérêt des méthodes agiles...

David, biologeek le 31/10/2007 :

Wow, ça motive toutes ces réactions !
Bon alors par où commencer... ah oui, déjà ces propos sont ceux de l'auteur et je n'en suis que le traducteur ce qui implique une traduction dans le respect du style de l'auteur et je ne suis pas forcément d'accord avec tout ce qui est écrit ici.
L'avantage d'avoir des lecteurs de qualité c'est que vous avez déjà en grande partie détecté et corrigé les faiblesses de l'article :-).
Mon commentaire sur les méthodes agiles (mais il faudrait un billet complet), c'est qu'en tant que développpeur c'est vraiment motivant et la motivation est une composante essentielle de la réussite d'un projet et de l'épanouissement personnel donc ça serait dommage de ne pas l'utiliser à bon escient.
Après ce n'est pas la réponse à tout non plus mais dans l'état actuel c'est un de mes critères de choix. Le prochain billet devrait apporter un éclairage nouveau à ce commentaire mais j'en ai déjà trop dit.
Pour répondre à quelques réactions particulières :
@NiCoS : que les SSII aient du mal à être agiles est normal, ce n'est tout simplement pas dans leur intérêt car elles facturent à la journée et ensuite au résultat donc les projets qui traînent sont des vaches à lait. De plus, avec un développement agile les maintenances et les évolutions ne seraient pas assez facturées...
@Earered :
> Mais en former 15 pendant 6 mois, par groupe, avec 3 personnes à plein temps pour former, sur un projets prévu à l'origine sur 2 ans avec 50 personnes aura un effet radical
Le problème actuel en informatique c'est aussi le turn-over dû à la pénurie de développeurs. Dans un projet de cette envergure, au bout d'un an la moitié des formés auront probablement trouvé une place ailleurs. C'est une réalité qui ne s'applique pas au domaine médical.
> Et non, le C n'a pas disparu (sisi), le python, le java ne remplace pas le C, ils permentent d'autres choses.
Je suis entièrement d'accord avec ça et j'ai d'ailleurs bondi en traduisant cette partie.
(analogie et proctologue dans le même commentaire, c'est parti pour des referers douteux ;-))
@neolao :
> c'est fini les petits dev
Je ne suis pas d'accord, je pense qu'on s'oriente vers deux types de projets : ceux qui sont très spécialisés et qui vont permettre le développement de bibliothèques à forte valeur ajoutée et ceux qui vont être la glue entre ces bibliothèques. L'idéal étant que chacun de ces projets reste « petit » justement.
@Damien B. :
> Et je pars en hors-sujet aussi, j'aime bien polluer ici :-D
Fais toi plaisir, j'aime bien ta pollution :-).
> Pour le futur, on repassera :-D
Les références sont anciennes mais malheureusement encore trop rarement appliquées... il n'y a qu'à voir certains commentaires de réaction ici-même.
@zyegfryed :
> Bref, la culture open source au boulot c'est pour quand ? :)
C'est pour quand TU veux, ça existe déjà !
@kib:
> Il faudrait alors préciser le terme "non linéaire"
Tiré de l'article de Wikipédia : Formule des canaux de communication : n(n − 1) / 2 (pour 50 informaticiens, on a 50(50 − 1) / 2 = 1225 canaux de communication).
> Quand à la conception, on est tous d'accord là dessus : qui voudrait d'un logiciel non extensible de nos jours ? Ces petits "plugins" rendent bien service et s'adaptent à nos besoins
L'article ne parle pas des plugins mais bien de bibliothèques ce que je considère différemment, il ne s'agit pas de petits ajouts à l'appli actuelle mais bien de son cœur qui évolue de manière agile avec des unités fonctionnelles pouvant s'adapter aux changements.
> Ah ? Tu veux dire par là qu'on pourra bientôt rivaliser avec des développeurs Indous chez nous ?
Non, si c'était ma prose je n'aurais pas sous-estimé la délocalisation. Dans les deux types de projets dont je parlais avec neolao plus haut, le premier peut justement être délocalisé. Maintenant la délocalisation nécessite de nouveau métiers du style chef de projet « amélioré » qui sont encore trop peu présents et qui conduisent à certains échecs qui peuvent refroidir. C'est encore une fois une problématique de communication.
Maintenant on pourrait discuter de l'esclavage Nord-Sud moderne mais c'est un autre débat...
> on croît toujours détenir la vérité à l'instant t, à t+1 on s'aperçoit là encore que le monde n'évolue pas de façon linéaire...et on remet ça !
N'est-ce pas l'un des intérêts de la vie ? Si l'informatique me plaît c'est justement aussi pour sa constante évolution. Être obligé de se remettre en question régulièrement est un de mes stimulants.
@Arnaud :
> Le développement Agile semble être ce bouclier idéal contre la mondialisation courante, sans parler de l’argumentaire Marketing indéniable. [...] Qu’en pensez-vous ?
Je pense que la proximité a encore de beaux jours devant elle et certaines entreprises un peu échaudées par les développements offshore y reviennent (je ne peux pas citer mes sources ici donc il faudra me croire sur parole). Pour moi l'informatique c'est du code mais c'est aussi tout ce qui gravite autour et qui compte pour beaucoup, nous ne sommes pas (encore) des robots !
Cela étant dit, oui c'est un argument marketing mais c'est très difficile de faire changer les mentalités et les méthodologies donc le marketing est nécessaire et ne porte ses fruits qu'à long terme. Pour exemple, malgré une communication assez conséquente sur les standards du web, l'usage des css, etc que l'on pourrait qualifier de marketing, il reste de nombreux sites conçus sans en tenir compte aujourd'hui...
@giz404 :
> Clairement, le modèle "agile" est plus attirant pour les passionnés. Les personnes qui développent dans un seul but "alimentaire" trouveront leur compte dans une entreprise organisée à l'ancienne, mais n'auront pas leur place dans un process de développement agile où il faut être technologiquement à la pointe, créatif dans son approche et ses solutions.
Merci pour ce résumé :-).
@Christian Fauré :
> cela suppose un "client agile"
Tu mets le doigt là où ça fait mal, c'est effectivement la principale cause d'échec d'un développement agile (d'après ma propre expérience). Le client ne comprend pas forcément qu'il a une large part de responsabilité dans le développement qui va répondre à SON besoin. Cela présuppose donc une phase d'éducation du client qu'il ne faut pas sous-estimer.
@Grogro :
> C'est quoi un développeur avec des qualités avérées de programmeur ? un fantasme ?
Non, un CV gonflé car la personne a fait 3 lignes de PHP dans sa vie et que l'on est en pénurie d'informaticiens...
> J'aime le logiciel libre mais aussi la pensée libre, pas ce genre de discours indigeste et bon marché qui semble tout droit sorti d'une pub Microsoft ou Apple.
Huhu. J'espère que tout ce que j'ai écrit ci-dessus te convaincra que le but de ce billet n'était pas de distribuer des œillères numériques mais bien d'ouvrir la discussion.
@Timothée :
> Et puis avec des applications compliquées qu'on peut réaliser de plus en plus vite et simplement, ce n'est plus le système qui va devenir prédominant, mais le service rendu aux utilisateurs, d'où l'intérêt des méthodes agiles...
Excellente conclusion.

Ploum le 31/10/2007 :

Beaucoup de grandes boites se targuent de faire du dev agile dans certaines équipes : petite équipe, refactoring, test unitaires.
ça, c'est la théorie. En pratique, c'est juste du modèle en cascade : l'équipe de 10 personnes embauche de plus en plus car elle prend du retard, le refactoring consiste à réécrire 15.000 fois un truc qui marche et à supprimer des features pour avoir au final des trucs incompréhensibles (des génériques de génériques de génériques de génériques... je n'exagère pas, exemple vécu), les tests unitaires datent de mathusalem et ne passent plus car on a changé un truc mais les tests sont en fait pas valides.
Bref, faut pas se fier au nom.
Aussi, je suis un gros opposant à la pseudo réutilisabilité. Dans 90% des cas, un programmeur va complexifier à mort son code pour pondre une classe "réutilisable" mais devenue incompréhensible et qui ne sera de toutes façons jamais réutilisées car la réutilisation nécéssite :
1) de savoir qu'on est le cas particulier d'un cas général déjà traité
2) de savoir qu'une classe pour traiter notre cas général existe déjà
3) de savoir où se trouve cette classe général
4) de constater qu'on est bel et bien face à un cas général et pas à un refactoring bête du cas particulier du collègue
5) d'apprendre à utiliser cette classe générale avec moins d'effort que de bêtement réécrire notre petit truc particulier
6) de pouvoir utiliser notre cas général (dépendances différentes, infrastructure différente, ...)
7) Ne pas avoir à modifier la moitié du projet pour pouvoir réutiliser une classe "générale" qui ne s'interface pas exactement avec notre projet actuel (je l'ai vu faire)
Bref, en pratique, j'ai découvert que la réutilisabilité est une belle utopie mais que les programmeurs "agiles" en font un but et non plus un outil.

grogro le 31/10/2007 :

>Huhu. J'espère que tout ce que j'ai écrit ci-dessus te convaincra que le but de ce billet n'était pas de distribuer des œillères numériques mais bien d'ouvrir la discussion.
Oui presque convaincu, et aussi par d'autres articles publiés sur ce blog qui sont vraiment passionnants, l'offense est donc presque pardonnée ... j'attends la suite pour confirmer ce "presque" ;-)

loïc m. le 05/11/2007 :

@David & @Christian Fauré :
> cela suppose un 'client agile'
> Tu mets le doigt là où ça fait mal, c'est effectivement la principale cause d'échec d'un développement agile (d'après ma propre expérience). Le client ne comprend pas forcément qu'il a une large part de responsabilité dans le développement qui va répondre à SON besoin. Cela présuppose donc une phase d'éducation du client qu'il ne faut pas sous-estimer.
Par expérience personnelle, je ne peux que souligner ce point très important et bien difficile parfois suivant les clients.
Pas facile d'expliquer ces concepts à une personne qui ne connait rien au monde informatique...

Bluebird le 15/11/2007 :

@ploum:
Sur la problématique de la généricité, il est à noter que les méthodes de développements agile sont de très grands fervents de la simplicité et par là même opposés à la généricité. La phrase la plus répétée dans le livre de Kent Beck est "you ain't going to need it" i.e. "tu n'en auras pas besoin".
L'approche agile encourage à faire le "minimum qui marche" et à valider par des tests. Si les besoins augmentent vers de la généricité, on la rajoutera après et on validera avec les tests existants mais elle reste régulièrement au placard parce que on remplit le besoin (les tests) sans l'avoir mise.
L'approche par les tests ("tests driven development") encourage ce côté simplicité puisque le besoin est défini par les tests et le développement se réduit à faire marcher les tests. Il y a moins de risque de dérive du genre "ah ouais mais je rajoute juste un niveau d'indirection et deux trois méthodes" puisque le test est le référentiel.
Sinon, la blague des tests unitaires qui sont là mais qui ne marchent pas et qui n'ont jamais été maintenus est un classique.
Quand j'explique l'architecture technique et la démarche qualité de mon entreprise, beaucoup me disent "mais on fait pareil". Ils font pareil sauf que les tests ont beaucoup de retard sur l'implémentation, que le code censé marcher sur trois plateformes différentes ne fonctionne que sur une seule, que les branches de développement se rajoutent sans se réutiliser (comprendre qu'il n'y a plus de branche principale du produit mais n produits dont aucun ne comprend toutes les fonctionnalités des autes), qui l'équipe X a fait telle modif mais ne l'as pas mise sous svn, etc etc.
Faire du développement agile et plus généralement programmer avec qualité, c'est quand même un combat quotidien contre le "oui je sais que c'est mal (de faire un gros copier colle, de ne pas réparer les tests, ...) mais j'ai pas le temps".

Gelono. Création logiciel le 16/09/2008 :

J'appartiens à une nouvelle entreprise (http://www.gelono.com)qui fait du web mais aussi des dev pour l'aéronautique. Nous nous efforçons d'appliquer les méthodes de dernière génération pour garantir une efficacité et une réactivité maximale dans nos développements.
Merci pour l'article.

mehdi le 14/10/2008 :

Les méthodes en cascade ne répondent plus à la réalité d’aujourd’hui, non seulement pour les clients externes, mais aussi internes.

L’adoption en soit, des méthodes agiles, n’est pas aussi la solution miracle, il faut savoir comment tirer profit de ces méthodes et comment les adapter a la réalité de notre entreprise/projet.

Le plus dur n’est pas de faire le pas vers les méthodes agiles, mais de choisir et d’adapter la bonne méthode au bon projet, toute les clés n’ouvrent pas toutes les portes, a nous de choisir la bonne clé qui correspond a notre porte, et ne pas hésiter à aiguiser la clé pour qu’elle glisse mieux.

Et je suis d’accord sur le fait, qu’augmenter le nombre de développeurs dans un projet, n’accélérera pas les délais de ce dernier : « Il faut 1 femme et 9 mois pour faire un bébé, mais 9 femmes et 1 mois ne feront jamais un bébé »

Robert le 03/11/2010 :

Je suis totalement d'accord.

Comme tout projet, il suffit d'un nombre restreint de développeurs pour amener à terme un logiciel. Il est évident que passer son temps à transmettre à d'autres développeurs comment il faut implémenter le logiciel c'est une perte de temps.

Et il ne faut pas oublier que les gens ont tendance à partir sur des structures complexes au lieu de partir sur des bases simples. Il ne faut pas qu'un logiciel devienne aussi un produit qui fait la cuisine, le ménage et des calculs de simulation, mais seulement qu'il exécute les tâches que l'on veut effectuer avec, ce n'est pas un fourre-tout.

Et je reviens sur le fait que pour travailler dans le développement, il y a 3 choses à valider :
-être passionné par le développement
-être terriblement structuré
-être plus cultivé que la moyenne (lire des livres, avoir l'esprit ouvert, revenir à des activités manuelles, )
car j'ai vu des gars développer des logiciels de simulation mécanique sans jamais avoir tenu dans leur vie un tournevis ou conduit une voiture, des vrais abru...!!

stemlaur le 24/12/2010 :

Chez Stemlaur Inc. © nous avons une vision un peu différente du développement dans le futur :

http://stemlaur.com/blog/2010/11/03/developpeur-en-2030/