Ce point là me paraît très important :
Correctness. Most companies don’t give a
**** about correctness. They don’t care about quality. They just want to shovel code out the door as fast as possible and earn wads of cash. If there are bugs, they’ll charge the customer money to fix them. Getting code right is of no interest; getting code fast is what counts. Haskell is a language that rewards those who sit back and deeply analyse the problem, and then produce a beautiful solution. Most companies don’t care for this approach; let’s just hack something together as fast as possible, and worry about fixing it later (i.e., never).
Les 2 seules questions qui intéressent le client sont :
- combien ça va coûter ?
- quand est-ce qu'on est livré ?
Le reste, il s'en fout.
En effet, essayez donc de dire à votre client :
"je peux vous faire votre projet, mais ça prendra un peu plus de temps et coûtera donc un peu plus cher. En contrepartie, le programme sera mieux écrit et plus correct", comme ça, juste pour rigoler. Il y a de fortes chances que votre client confie le projet à un concurrent...
Le client ne voit quasiment jamais à long terme. Il choisit l'offre la moins chère, et quand les problèmes arrivent, il paye des correctifs.
Le client ne sait pas définir ses besoins, il veut
"un truc qui marche" mais il ne sait pas dire comment. Et puis il change tout le temps d'avis, donc ça sert à rien de faire un truc bien pensé dès le départ.
Le client se fout de la flexibilité. Si le produit ne peut pas s'adapter au besoin, et bien on facturera une fonctionnalité supplémentaire.
Sachant tout cela, autant faire un truc
"vite fait, mal fait" et pas cher. Une fois qu'il est coincé avec votre architecture bancale, vous pouvez le saigner avec des correctifs et des mises à jour.
Le
"vite fait, mal fait" fait vivre pas mal de monde :
- le consultant qui arrive tel le chevalier blanc en criant fièrement:
"pour améliorer la qualité logiciel, on n'a qu'à faire plus des tests" (et par "on", il veut dire "VOUS"

. Les tests, c'est bien, mais ça ne fait pas tout. De plus, cela implique de détecter les erreurs à l'exécution... c'est-à-dire un peu tard. Ne serait-il pas mieux de réfléchir à un moyen de détecter plus d'erreurs à la compilation ? Surtout pas ! Réfléchir, c'est perdre du temps sur l'implémentation, t'arriveras pas à atteindre les objectifs du sprint...
- le ScrumMaster, qui fixe les objectifs à atteindre pour la fin du sprint. Ce qui compte, c'est ce que ça marche (même mal) à la fin du sprint. Le reste on verra après. Pas le temps de réfléchir, code !
- le responsable Software Quality Assurance qui vous dit comment bien coder... avec de mauvais langages. Il explique aussi comment faire de la documentation, des procédures, des contrôles... On vous explique même "la programmation pour les nuls", c'est à dire comment coder pour que même un gros nul ait une chance de vous comprendre (au détriment de tout le reste bien sûr: qualité de code, performances, etc.). Parce que des nuls, il y en a beaucoup... et même des fois ce sont ceux qui vous expliquent comment gérer votre projet...
On dirait que toutes les méthodes liées à la gestion de projet convergent vers le même objectif : produire du code en masse, ainsi que toute la documentation, les tests et les procédures qui vont avec. C'est à croire que tout ce beau monde est payé au poids !
C'en est à un point où lors d'un entretien d'embauche, on entend parfois la question: "et quelle est le plus gros projet sur lequel vous ayez travaillé en terme de nombre de lignes de code ?". Autant dire que je n'ai pas donné suite.
Je suis désolé, mais le "nombre de lignes de code" n'a jamais été une unité pour mesurer ni la complexité d'un programme, ni l'état d'avancement d'un projet, et surtout pas la qualité logicielle ! Le "nombre de lignes de code" ne sert à mesurer qu'une chose : le facteur
"ce programme est une vraie usine à gaz".
Cependant le "nombre de lignes de code" est une unité mesurable, alors que la "qualité logicielle" peut difficilement être mesurée. Or pour récompenser les gens, on a besoin de quantités mesurables, comme la production de code, de tests, de documentation, de procédures... L'ère du Stakhanovisme logiciel est en marche !
Maintenant, émettons une hypothèse : "
et si le développement logiciel était exactement l'inverse de ce qui a été dit précédemment ?", c'est-à-dire :
- prendre le temps de réfléchir au problème plutôt que produire bêtement du code (produire mieux plutôt que produire plus)
- fournir le même nombre de fonctionnalités avec un code avec un code réduit (small is beautiful !)
- factoriser : rendre chaque fonction aussi générale que possible, plutôt que d'écrire des fonctions hyper-spécialisées
- détecter un maximum d'erreurs avant qu'elles ne puissent se produire (à la compilation plutôt que dans les tests)
Quand on voit sur quels critères se base toute l'industrie informatique, on réalise que ceci n'est qu'une douce utopie.
Dans ces conditions, un langage qui ne ressemble à aucun autre, qui oblige à s'arrêter pour réfléchir et qui freine l'obtention d'une promotion parce qu'on ne produit pas assez de code/documentation/procédure... n'a effectivement aucune chance de percer dans l'industrie.
1 |
0 |