C’est un truc que je vois souvent et depuis longtemps. Je préfère mettre ma prose dans un sujet particulier pour ne pas pourrir les autres sujets et pour pouvoir la retrouver plus facilement.
Attention ça risque d’être un peu pédant, je mérite ma signature !
[size=150]Développement ?[/size]
Le développement de logiciel est un travail qui regroupe un ensemble de tâches. Le principal, celui qui vient tout de à l’esprit c’est l’écriture du code source, mais il y a de nombreuses autres tâches variées comme la mise en place et le requêtage d’une base de données (que ce soit un SGBDR ou autre chose), la mise en place de tests, la compilation des sources, la gestion de version,… Tous les développeurs ne font pas toutes ces tâches mais tous ont plusieurs tâches spécifiques. La question reste de savoir comment le développeur va gérer ça.
[size=150]« The unix way » : une tâche => un outil[/size]
La plus ancienne des méthodes est de se construire un environnement de développement via divers outils. L’idée consiste à utiliser un ensemble d’outils bien séparés que l’on utilise tour à tour ou que l’on fait collaborer pour obtenir un résultat. Pour utiliser le gestionnaire de version on va utiliser un client de ce gestionnaire (soit l’officiel soit un autre). On peut aller jusqu’à écrire des petits scripts glus vont permettre d’automatiser ou de s’implifier l’usage de certains de ces outils.
L’avantage de cette solution est d’avoir un ensemble de joyaux entre les mains, on utilise des outils potentiellement très puissants pour chaque étape. C’est une solution qui est simple car on peut choisir petit à petit chacun des outils. Au final on sait pourquoi est-ce qu’on utilise tel ou tel outil.
L’inconvénient est qu’il est difficile de choisir et/ou de maîtriser chacun de ces outils. On peut souvent avoir des outils qui se recoupe. C’est long et pas forcément simple de choisir ces outils et les faire interagir entre eux n’est pas toujours possible.
[size=150]Un IDE ?[/size]
Un Environnement de développement intégré est un outil qui tente de regrouper l’ensemble des outils dont le développeur a besoin. Il va permettre de lui même de faire l’édition du code, la gestion de version, la compilation, l’exécution des tests, la gestion de la base de données, etc. Ces outils soient utilisent des outils préexistants soit ils ont leurs propres outils.
L’avantage de ces outils et qu’ils paraissent simples. Ils permettent dans une certaine mesure de faire abstraction des outils par exemple ils vont permettre d’utiliser de la même manière les différents gestionnaires de version et en simplifie l’usage. Ils permettent aussi d’avoir des fonctionnalités difficiles à avoir via des outils séparé. L’exemple le plus parlant est ce que l’on appel le refactoring. Cela consiste à ce que l’outil « comprenne » le code (il maintient une représentation sous forme d’AST) et on peut manipuler le code de manière sémantique (au lieu de remplacer tous les “toto” par “tata” on va renommer la variable “toto” en “tata”, ce qui permet de ne pas toucher à une autre variable qui s’appelle aussi “toto”).
L’inconvénient c’est que ces outils sont lourds et complexes. Ils regroupent une partie de la complexité de l’ensemble des outils d’un environnement de développement « unix ». Ils peuvent rendre des choses simple en cachant certaines actions ce qui peut être dommageable.
[size=150]Et donc qu’est ce qu’il faut prendre ?[/size]
Il n’y en a pas l’un mieux que l’autre. Le bon c’est celui qui plaît. Mais surtout je ne vois pas d’intérêt à opposer les deux personnellement j’utilise à la fois les deux approches. En fonction du langage et de la tâche que je fais soit j’utilise un IDE soit un outil spécifique. C’est à mon avis sincèrement contre productif et puéril de chercher quel approche est la meilleure. Surtout que la distinction entre IDE et éditeur peut être assez confuse (emacs peut quasiment tout faire). Il est plus intéressant de s’intéresser aux fonctionnalités qu’apporte tel outil ou tel IDE et de se poser la question de savoir si ça nous est utile (ce n’est pas forcément le cas) et si oui de comment obtenir cette fonctionnalité dans notre environnement. Par exemple jusqu’à assez récemment il n’y avait presque aucun outil qui permettait d’avoir un refactoring efficace pour les langages C et C++ seul Kdevelop (ou Qdevelop) avait quelque chose qui s’en approchait.