Après avoir brièvement entendu parlé de WinDev et étant incapable de trouver des critiques basées sur des faits, j'étais sceptique et j'ai donc décidé de faire quelques essais. Aujourd'hui, je ne suis plus sceptique, alors je publie cette critique afin d'aider ceux qui se demandent si WinDev est vraiment une bonne idée.

Soyons clair, je ne vais pas passer mon temps sur les avantages de WinDev. Je ne vais pas non plus passer en revue tous ses inconvénients, car selon moi, ils sont trop nombreux et il y a aussi de nombreux plantages/défauts pour lesquels je ne peux pas fournir un scénario de test pour les reproduire. Je vais donc me concentrer sur les quelques éléments qu'un développeur qui veut « développer 10 fois plus vite » s'attendrait normalement à voir aujourd'hui en 2014. Cet avis n'est donc qu'une présentation de faits pour vous donner une idée de la vraie philosophie des produits PC SOFT.

Tous mes tests ont été effectués avec WinDev 17 et plus précisément :

  • Produit concerné : WinDev 17.0
  • Version interne : 01F170078n
  • Version du produit : 17.0.203.0


Philosophie

Alors que de nombreux outils de développement sont développés par des entreprises spécialisées, WinDev développe un écosystème tout-en-un notamment composé de :

  • un langage de programmation appelé WLangage et un ensemble de bibliothèques logicielles,
  • un SGBDR (Système de gestion de base de données relationnelle) nommé HyperFileSQL,
  • un IDE (Integrated Development Environment),
  • un système de gestion des sources.

WinDev n'essaie pas seulement de vous faire « développer 10 fois plus vite » avec un seul de ces outils, mais avec chacun d'eux. C'est un défi très ambitieux pour une seule entreprise. Cela ne prouve rien mais gardez ça à l'esprit !

Licences

Tout l'écosystème est la propriété exclusive de PC SOFT et tout est fortement cloisonné. Je ne vais pas m'étendre sur les inconvénients des logiciels privateurs et des formats fermés sauf pour illustrer un exemple concret.

Les formats de fichier sont propriétaires et fermés, cela signifie que vous ne pouvez pas ouvrir un fichier source avec un éditeur de texte basique, cela aurait pour conséquence de projeter un paquet d'octets illisibles sur votre écran. Vous ne pouvez donc pas utiliser d'outils tierces comme votre éditeur de texte favori (vim, Emacs, Notepad + +, etc) ou votre système de gestion de sources préféré (git, mercurial, etc.). Autrement dit, vous êtes forcé d'utiliser leurs éditeurs et leur système de gestion de sources.

Coût

L'écosystème WinDev de base est payant. Si vous voulez quelques options « supplémentaires », vous devrez également payer un supplément. C'est le cas par exemple si vous souhaitez acquérir l'outil d'internationalisation pour extraire toutes les chaînes de textes de votre projet afin de les fournir aux traducteurs de votre application. Le package de base promettant de « développer 10 fois plus vite », je ne m'attendais pas à voir cet outil dans les options supplémentaires. Mais n'ayez pas d'inquiétudes, si vous n'avez pas cet outil, vous pouvez toujours internationaliser votre application ... en remplissant manuellement et individuellement chaque formulaire correspondant à chacune des traductions ... ou demander aux traducteurs de le faire eux-même tout en leur précisant d'être très prudent avec le code source de l'ensemble du projet.

Si vous n'utilisez pas la dernière version de l'année en cours, vous devez payer pour le support technique ou tout simplement l'éviter. Et ce même si vous leur fournissez un scénario simple pour reproduire un crash de leur IDE. Mais vous pouvez toujours demander à d'autres utilisateurs sur le forum PC SOFT qui, par ailleurs, est soumis à une modération à priori (http://forum.pcsoft.fr/fr-FR/pcsoft....lasse/read.awp).

Qualité

J'ai trouvé plusieurs erreurs dans la documentation. Voici un exemple (http://doc.windev.com/en-US/?6010002...tiation_object, https://web.archive.org/web/20140324...tiation_object) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
// declaration code of global variables
gpo is Class1 dynamic
gArr is array of Class1 dynamic
 
// any code
o1, o2, o3 are Class1
gpo1 = o1
Add(gArr, o2)
 
// at the end of the process
// o1 is not destroyed because it is referenced by the global variable gpo
// o2 is not destroyed because it was added to the gArr array
// o3 is not destroyed because there is only the local reference
La variable gpo est mystérieusement renommée gpo1 et le dernier commentaire est faux, o3 est détruit, du moins si on en croit la version française de la page (http://doc.pcsoft.fr/fr-FR/?6010002&...nciation_objet, https://web.archive.org/web/20140324...nciation_objet).

Toujours à propos de la qualité, PC SOFT est également impliqué dans le web avec son produit WebDev. Je ne sais pas si ils utilisent leur produit pour leur propre site web, mais en tout cas, ils ne semblent pas vraiment préoccupés par les normes W3C :



Selon moi, cela révèle certaines méthodes de travail au sein de PC SOFT et en particulier l'absence de vérification de leur documentation. Peut-être préfèrent-ils investir d'avantages de temps dans le sujet suivant de cet article.

Femmes

Je comprends que l'utilisation des femmes peut aider à vendre du chocolat ou des voitures à un consommateur lambda, mais quand il s'agit d'ingénierie logiciel, je ne le comprends pas et je le prends même comme une insulte. Mais après tout, mettre l'accent sur ces dames plutôt que sur les éléments techniques aide peut-être à « développer 10 fois plus vite » ;-)

Références

Malgré un catalogue de témoignages conséquent (http://www.pcsoft.fr/pcsoft/120pages...gnagesWDWB.pdf), je n'ai jamais entendu parler d'un logiciel grand public (éditeur de texte, navigateurs, lecteur multimédia, …) réalisé avec WinDev.
On notera également que les illustrations du catalogue sont beaucoup plus axées sur les produits des clients de PC SOFT que les applications réalisées avec WinDev, WebDev et WinDev Mobile ! Ça me rappelle le point précédent !

Technique

Verbosité et confusion

« Explicite » est mieux que « implicite » et je suis totalement d'accord avec cela, je n'ai pas de problème avec les instructions à rallonge tant qu'elles améliore la lisibilité du code. Je préfère « numberOfCars » comme nom de variable plutôt que « number » ou pire « i ».
Cependant, les langages de programmation ne sont pas les langages naturelles et ne sont donc pas destinés à être parlé. En tentant cela malgré tout, le WLangage utilise différentes variantes de mots clés inutiles afin de pouvoir lire le code comme un langage naturel. Cela se traduit en un échec qui alourdit inutilement le code avec des mots clés n’ayant aucunes implications techniques et qui, par conséquent, ajoute de la confusion et/ou augmente le temps d'apprentissage du langage.
Par exemple, je peux déclarer quelques chaîne de caractères en procédant comme suit:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
MyString1 is string
MyString2 is a string
MyString3 is strings
MyString4 is a strings
MyString5 are string
MyString6 are a string
MyString7 are strings
MyString8 are a strings
 
MyStringA1, MyStringB1 is string
MyStringA2, MyStringB2 is a string
MyStringA3, MyStringB3 is strings
MyStringA4, MyStringB4 is a strings
MyStringA5, MyStringB5 are string
MyStringA6, MyStringB6 are a string
MyStringA7, MyStringB7 are strings
MyStringA8, MyStringB8 are a strings
Vous voulez plus de choix? Codez en français ! Oui, tous les mots clés (ou presque) sont disponibles en anglais et en français.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
MyString1 est chaîne
MyString2 est une chaîne
MyString3 est des chaîne
MyString4 est chaînes
MyString5 est une chaînes
MyString6 est des chaînes
MyString7 sont chaîne
MyString8 sont une chaîne
MyString9 sont des chaîne
MyString10 sont chaînes
MyString11 sont une chaînes
MyString12 sont des chaînes
 
MyStringA1, MyStringB1 est chaîne
MyStringA2, MyStringB2 est une chaîne
MyStringA3, MyStringB3 est des chaîne
MyStringA4, MyStringB4 est chaînes
MyStringA5, MyStringB5 est une chaînes
MyStringA6, MyStringB6 est des chaînes
MyStringA7, MyStringB7 sont chaîne
MyStringA8, MyStringB8 sont une chaîne
MyStringA9, MyStringB9 sont des chaîne
MyStringA10, MyStringB10 sont chaînes
MyStringA11, MyStringB11 sont une chaînes
MyStringA12, MyStringB12 sont des chaînes
Encore plus de choix? Je vous laisse faire le mélange des mots-clés français et anglais au sein d'une même instruction et de profiter de l'une des capacités les plus inutiles de WinDev !
Cependant, de façon surprenante, aucune des formes simplifiées ci-dessous n'est autorisée :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
MyString1 string
MyString2 chaîne
Maintenant, passons aux choses sérieuses. Je viens de parler des types de variable définis par le système, mais supposez que je code en français et que j'ai créé la classe « Animal », voici ce que je peux écrire :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Animaux est un tableau de 13 Animal
Animaux est un tableau de 13 objet Animal
Animaux est un tableau de 13 objets Animal
et voici ce que je ne peux pas écrire:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Animaux est un tableau de 13 Animals
Animaux est un tableau de 13 Animaux
Dommage, nous avions presque atteint la perfection !

Gestion de la mémoire

Examinons un extrait de la documentation (http://doc.pcsoft.fr/fr-FR/?6010006&...oprietes#NOTE4) :

Lors de copies d'instances de classes, tous les membres de la classe sont recopiés dans la nouvelle instance, sauf les tableaux. Ainsi, si la valeur d'un membre de type tableau est modifiée, cette valeur est modifiée dans toutes les instances.
Je suppose que c'est ce qui se passe quand il n'y a pas de distinction claire entre ce qu'on appelle en C++ : variables, références et pointeurs.
Et à cause de l'absence de différentes syntaxes (et les explications qui vont avec) entre les concepts de variable, référence et pointeur, vous pouvez potentiellement planter votre application lors de chaque accès à un membre d'une prétendue variable qu'une autre portion du code source aura transformée en sorte de pointeur null. Je vous laisse imaginer ce qui arrive à un développeur reprenant un gros projet codé façon spaghetti : le WLangage n'est pas son meilleur allié !

Recherches textuelles

La recherche de texte n'est-elle pas une des fonctions les plus importantes d'un éditeur de code ? J'ai essayé en vain de trouver une recherche de texte par expression régulière. Malheureusement, parce que le code source du projet utilise des formats de fichiers non standards, j'ai également dû accepter l'idée que l'utilisation d'expressions régulières ne me serait tout simplement pas possible.

Mélange des concepts généraux

Dans les produits PC SOFT, il règne une profonde confusion entre le concept de jeu de caractères et celui d'encodage de caractères. Par exemple, la documentation redéfinit le terme UNICODE comme ceci (http://doc.pcsoft.fr/fr-FR/?3024038&...nes_caracteres) :

L'UNICODE est un système de codage spécifiant un nombre unique pour chaque caractère. Ce codage est réalisé sur 16 bits. Ce nombre est lisible quelle que soit la plate-forme, le logiciel et la langue utilisée.
Je suggère à PC SOFT de consulter cet article : http://www.joelonsoftware.com/articles/Unicode.html.

Gestion des sources

Aujourd'hui en 2014, pour « développer 10 fois plus vite » au sein d'une équipe, j'aurai tendance à choisir un système de gestion de sources décentralisé (DVCS) plutôt que centralisé. Malheureusement, WinDev ne me laisse pas le choix.

Conclusion

Ces précédents points ne sont que quelques exemples de ce qui ne m'aide pas à « développer 10 fois plus vite » avec WinDev.

Je veux juste ajouter, très honnêtement, que vous pouvez certainement construire un excellent logiciel avec WinDev. Cependant, ce n'est pas parce que vous pouvez faire quelque chose de formidable avec un outil que ça en fait un outil approprié. WinDev me rappelle ce billet de blog : « PHP: a fractal of bad design » (http://me.veekun.com/blog/2012/04/09...of-bad-design/). Et pourtant, Facebook a bien commencé avec du PHP. Cela dit, je n'ai jamais entendu parler d'un logiciel de type Facebook fait avec WinDev.

En conclusion, relativement à l'offre actuelle en terme d'outils de développement, j'affirme fermement que WinDev n'est pas un outil approprié pour réaliser un logiciel solide et durable.