Suis-je maso ? Je pense que la question mérite d’être posée. En effet, s’attaquer à ce genre de sujet c’est s’immoler sur la place publique.
Personnellement, je ne peux pas rêver mieux, chaque langage à besoin de ses défendeurs. C’est grâce à ce genre de débats que l’on peut modifier son opinion et avancer. L’informaticien que je suis aujourd’hui ne sera surement pas le même dans 5 ans, et encore moins dans 10.
Le choix de nos langages, c’est un peu comme le choix d’une arme sur un champ de bataille. On peut aimer les grosses massues ou alors, la fine épée. Aucune des deux n’est meilleure que l’autre, tout est dans l’art et la manière de la manier, mais aussi et surtout du besoin initial.
Il n’y a pas de mauvais outils, il n’y a que de mauvais ouvriers
Le langage n’est qu’un support, un outil, et s’il me chante de faire un Tetris en Brainfuck, car je suis maso, c’est possible ! Il va donc être nécessaire d’utiliser des arguments un peu subjectifs pour défendre tel ou tel langage, dans un contexte global.
Le fameux « C’est impossible à faire dans se langage » est à exclure de ce débat. En effet, on se réduirait à un exemple précis dans une situation précise, et non à un cas général.
Tout est relatif
Pour illustrer cela, rien ne vaut un bel exemple.
Souvent j’entends parler de rapidité pour coder telle ou telle situation. Par exemple récemment, nous avons eu à produire un projet sur les complexités algorithmiques des tris. Le choix du langage était libre. Tout de suite les débats se sont ouverts :
Racam : Tient je vais faire ça en C, ça me changera un peu de l’orienté objet.
Barbe Noire : Mais tu es fou pas en C, tu vas perdre un temps considérable ! En python tu seras 2 fois plus rapide !
Cependant qu’est-ce que la rapidité ?
Caractère de ce qui est accompli dans un temps très bref.
Donc pour faire l’analogie avec notre exemple, c’est le temps que met le développeur à produire l’algorithme. En effet, c’est bien le développeur avec ses petits doigts qui tape sur le clavier.
Ainsi la rapidité est totalement relative : elle dépend en majorité du développeur et en minorité du langage.
Effectivement dans mon cas je suis une brelle en Python, je n’ai jamais utilisé ce langage contrairement au C. Ainsi, le temps que j’installe l’interpréteur Python, que je me renseigne sur la syntaxe, que je regarde les fonctions de bases proposées par le langage ; j’aurais déjà fini depuis longtemps en C. Et inversement pour Barbe Noire, en 2 temps 3 mouvements il aura fini en Python car il y est habitué.
Bien sûr ceci n’est qu’un exemple qui ne fait pas preuve. Il montre juste que tout argument placé dans un référentiel bien précis comporte ses avantages et ses inconvénients.
Un marteau piqueur pour tuer une mouche
Il est cependant clair que des différences notables se font sentir entre les différents langages de programmation. Cela permet de les placer dans plusieurs catégories, qui peuvent apporter des éléments de réponse quant à son futur choix.
- Les langages haut/bas niveaux
- Les langages objets/procéduraux
Ainsi pour programmation une GUI, on ira plus aisément vers un langage haut niveau qui offre une couche d’abstraction bien pratique. A contrario pour développer un jeux, ou des services on ira plus facilement vers une programmation bas niveau pour gérer précisément ce que l’on veut faire.
Pour comparer deux langages, il est alors nécessaire de les positionner dans un scénario où les deux on de la pertinence.
Mes langages de programmation préférés
J’en arrive enfin à mes préférences en terme de langages. J’ai pris le soin de les découper en plusieurs catégories et de dire quels sont leurs concurrents pour cette catégorie. Mes critères de choix s’appuieront sur : la base fournie par le langage (classes/fonctions…), mon confort avec ce langage, son optimisation.
- Algorithme pure : typiquement ce qui est demandé au coding games ou dans tout autre concours d’algorithmique. On retrouve en lice tous les langages. L’heureux élu est pour moi le PHP, car il offre une bibliothèque conséquente de classes et fonctions, il est aussi très permissive ce qui factorise bien le code. Enfin j’ai la grande habitude de coder avec à cause du Web. A noter que dans une utilisation base niveau, le C reste mon choix par défaut.
- Le Web : on retrouve ici les langages de programmation pour créer des sites, soit le PHP, Python, Java, .net avec asp. Le gagnant est pour moi le PHP, car très orienté web. Je suis tombé dedans quand j’étais petit, il dispose de pleins de frameworks et CMS, et c’est hyper simple à déployer.
- Les GUI : pour faire une belle interface utilisateur qui soit ergonomique. On a Java, C#, C++/C (gtk,Qt) (on abstrait les bindings) comme principaux rivaux. Je tendrais à aller vers le Java, qui est mieux construit et fourni que le C++ avec Qt. Pour le C# je n’en ai jamais fait, donc je ne peux pas juger, mais cela reste une piste très intéressante.
- La 2D/3D : Un petit Tetris ? Ou bien alors un joli monde 3D. Selon moi, les langages interprétés et semi-compilés (Java, C#) sont à exclure aux vues de leurs performances (qui a dit que Minecraft prenait 2Go de ram en fullscreen et fallait du SLI pour seulement 30fps ?). Reste donc les langages de programmation bas niveaux, C et C++ en tête, avec une préférence pour le C++, et son orienté objet qui permet l’utilisation de pattern design.
Voilà pour ce petit épilogue sur ma façon de voir le monde des langages de programmation.