Quelques généralités sur le choix du langage de programmation

Une question récurrente de débutants sur les forums de programmation est celle-ci : je veux faire ceci ou cela, quel langage dois-je apprendre ?.

Ce genre de question a tendance à agacer les contributeurs plus expérimentés. En effet, elle va très probablement finir en trolls et autres disputes, qui, au final, n'apportent rien à l'auteur du topic.

Dans cet article, nous nous proposons de rappeler quelques généralités sur les langages qui permettront aux débutants de faire le choix par eux-mêmes, tout en citant de nombreux langages que vous pourrez (re)découvrir.

Le ciel ne vous tombera pas sur la tête

Un premier point important est que le choix d'un premier langage, bien que déterminant, n'est ni absolu ni définitif. En d'autres termes, vous pouvez très bien laisser tomber un langage pour en apprendre un autre, et ce n'est pas parce que vous choisissez d'apprendre le Scheme en premier que vous serez condamnés à faire du Scheme toute votre vie !

Ainsi, le meilleur moyen de choisir un langage, c'est encore d'en essayer plusieurs par soi-même. Vous trouverez certainement des tonnes de noms de langages sur le web, avec des exemples de code (du style hello world!) ou des tutoriels. Plutôt que de vous fier aux critiques souvent répétées (bouh le Python c'est lent), vous pourrez vous faire votre propre idée.

De plus, en essayant plusieurs langages, vous verrez quel style de programmation vous plaît le mieux, et quel genre de langage semble correspondre à vos besoins. En effet, on peut souvent regrouper les langages de programmation par familles, qui partagent beaucoup de caractéristiques. Ainsi, si vous trouvez un langage qui semble vous convenir, mais qui possède juste quelques petits points qui vous chagrinent, vous pourrez certainement trouver un langage très proche, mais ayant une approche vous plaisant mieux sur ces points. Là encore, les informations se trouvent sur le web.

Un langage, c'est une manière de penser

Un exemple classique des « petits points qui chagrinent » dans un langage est la syntaxe. On voit souvent des gens à la recherche d'un langage dire des choses du style « je ne peux pas supporter la syntaxe d'Objective Caml » ou pire, juger un langage simplement sur sa syntaxe. C'est une erreur, puisque la syntaxe sert le langage, et pas le contraire. En clair, l'important dans un langage, c'est la façon dont il fait penser le programmeur et les choix de syntaxe ne sont que des conséquences de cette manière de penser.

Le risque est donc de voir des gens détester un langage à cause de sa syntaxe, car ils ont une autre approche de la programmation que celle du langage qu'ils essaient. Ainsi, la syntaxe du SmallTalk, relativement inhabituelleβ, provient d'un état d'esprit bien particulier. Quelqu'un qui essaierait ce langage sans se plonger dans cet état d'esprit s'arrêterait à la syntaxe, qu'il ne comprendrait pas et qui lui semblerait inutilement lourde : « 3 + 2 * 5 = 25 ? Ce langage ne gère même pas la priorité des opérateurs, il doit être bien trop primitif pour pouvoir en faire quelque chose ! ».

Il est donc important de se renseigner sur la manière de penser la programmation qu'on les créateurs d'un langage que vous aborder. C'est en général très simple : il suffit de visiter le site web officiel du langage. Si l'on parle anglais, on y trouve souvent ce que l'on cherche. Par exemple, au sujet du langage Haskell, on lit sur la page d'accueil :

Haskell is an advanced purely functional programming language. An open source product of more than twenty years of cutting edge research, it allows rapid development of robust, concise, correct software.

On apprend donc que :

Et simplement en lisant un paragraphe, on sait si on a envie d'essayer ce langage ou s'il ne correspond pas à ce que l'on cherche. En plus, on évite de poser la question sur un forum et de provoquer l'apparition de 5 pages de troll sur la programmation fonctionnelle et sur Caml VS Haskell.

β : En SmallTalk, 3 + 2 * 5 vaut 25 et non 13, car il n'y a pas d'opérateurs ni d'appels de fonction à proprement parler.

Exploiter les logiciels libres

Cependant, une succincte présentation du langage ne suffit parfois pas à répondre à nos questions. Et l'idée de déclencher un troll monstrueux qui sera sauvagement stoppé par les modos de notre forum préféré, sans apporter de réponse, ne semble pas très enthousiasmante non plus. On a parfois besoin de voir un gros morceau de « vrai » code pour se faire une idée sur le langage.

C'est à ce moment que les logiciels libres interviennent. Il s'agit de programmes dont le code source est librement consultable, redistribuable et modifiable par tous. Or, il existe une quantité énorme de logiciels libres, à tel point que la plupart des utilisateurs d'ordinateurs pourraient trouver un équivalent libre à chacun des logiciels qu'ils utilisent. Il existe donc très probablement des logiciels libres codés avec le langage qui vous intéresse, et vous pouvez donc voir à quoi ressemble un « vrai » projet dans ce langage.

Pour certains paradigmes peu usités, le fait voir un projet complet peut servir de preuve que le langage marche vraiment. En effet, parfois, lorsqu'on rencontre un dialecte particulièrement ésotérique, on se dit : "mais il est impossible de coder une application complète en ce langage !". Pourtant, ça l'est, et le projet en est la preuve. Ainsi, on pourrait a priori penser que le langage de programmation Erlang ne permet pas, ou très difficilement, de coder des sites web. Pourtant, il existe un framework web, Nitrogen, prévu pour cela !

Curiosité vs pragmatisme

Les logiciels libres - et tous les logiciels en général, mais vu qu'on dispose de moins d'informations sur les logiciels propriétaires, on peut se contenter de regarder les libres - peuvent également servir d'indicateur de popularité d'un langage. Ainsi, si quelqu'un cherche à coder un FPS complet, en 3D et tout et tout, il remarquera rapidement que beaucoup de programmes de ce genre sont codés en C++. On pourra en déduire que C++ paraît adapté à la création de jeux vidéos en 3D, ne serait-ce que puisque beaucoup de monde l'utilise, il existera plus de support pour ce langage.

C'est ce raisonnement qui conduit la plupart des posteurs à répondre "PHP" lorsqu'un débutant demande par quel langage commencer le développement Web. Celui-ci trouvera beaucoup de tutoriels et d'aides sur le forum s'il fait du PHP. Mais le fait est qu'il existe déjà des dizaines de FPS 3D en C++, et bien plus encore de sites web pseudo-communautaires en PHP. On peut alors se demander : mais qu'est-ce qu'une n+1-ième communauté sur l'élevage de chiens apportera au Web ?

Tout dépend alors du but recherché par celui qui souhaite apprendre le langage. Soit il se fiche plus ou moins de la programmation, ne la voit que comme un outil, et veut résoudre son problème. Dans ce premier cas, faire comme tout le monde paraît être un bon compromis. Mais notre développeur en herbe gagnera alors peut-être à faire coder son application par quelqu'un qui s'intéresse vraiment au code, soit en recrutant un développeur, soit en utilisant une base existante (typiquement : les CMS pour le Web).

D'autres préfèrent apprendre la programmation par plaisir, pour découvrir de nouvelles choses et faire travailler leurs méninges. Ceux-là auront tout intérêt à essayer des choix originaux, comme un FPS 3D en Haskell, un site web en Caml ou encore un blog avec les commandes Unix de base.

Ce sont deux visions quasiment inconciliables de la programmation informatique. C'est ce conflit qui est à la base de pas mal de trolls qui éclatent lorsque quelqu'un pose la question du choix d'un langage. Certains voudront conseiller au posteur des outils qui lui permettront de réaliser sa tâche, point, alors que d'autres les suggéreront des moyens de s'amuser et de résoudre le problème d'une manière originale.

C'est pour cela qu'il faut éviter au maximum les topics pour demander un conseil sur un langage. Documentez-vous, expérimentez, demandez en privé à des gens. Cela vaudra mieux pour tout le monde. Dans le pire des cas, précisez-bien dans votre sujet de quel côté vous vous placez : vous diminuerez peut-être un minimum les trolls.

Conclusion

Comme premier langage, il n'y a pas spécialement de bons ou de mauvais choix, même si vous avez des besoins très précis : on peut faire un OS en Caml, comme on peut faire un compilateur en assembleur. L'idéal est donc de se documenter, et surtout, d'essayer par vous même beaucoup de langages différents pour vous faire votre propre idée.

Mais, par pitié, plus de je veux faire un OS en PHP, est-ce que je dois apprendre le JavaScript et le HTML ou c'est pas la peine ?