Styles

lundi 18 août 2008

Programmer dans un langage

David Gries, dans son livre The Science Of Programming (page 235, 18.3.11) énonce un principe plein de sagesse :

Principle : Program into a programming language, not in it.

que l'on peut difficilement (et très librement) traduire en français par :

Principe : Programmer dans un langage, pas pour un langage.

C'est une mauvaise traduction, les mots, "in" et "into" n'étant pas très facile à distinguer.

L'idée est de programmer de façon quasiment abstraite (j'ai dit quasiment, j'ai pas dit complètement :) avec le langage comme simple support du programme. Il faut éviter de programmer pour un langage, c'est à dire, que son programme ne soit structuré par les contraintes et possibilités d'un langage particulier.

David Gries propose de construire son programme et ses structure de données indépendamment du langage utilisé. Cela rejoint un peu la programmation par pensée désirée qui vise à construire un programme en partant d'une vision abstraite et désirée du monde.

Une fois que le programme désiré a été codé, on peut ensuite raffiner les données et le programme pour qu'il "colle" mieux au langage, et ce pour des raisons performance, lisibilité, cohérence avec l'ensemble des librairies à dispositions, etc. Mais ce raffinement ne vient que dans un deuxième temps. Il est nécessaire de ne pas se laisser guider/contraindre par un langage particulier.

On pourrait croire, qu'avec un tel principe, il est nécessaire de savoir coder dans n'importe quel langage. C'est aller un peu vite en besogne, et c'est même l'inverse que je préconiserait. En effet, la véritable maîtrise d'un langage de programmation nécessite plusieurs années d'apprentissage.

Il ne suffit pas de connaître la syntaxe de base du langage. Celle-ci est souvent très simple et peut s'apprendre très rapidement (sauf certains cas significatifs comme Perl qui justement vise à offrir un langage très riche en raccourcis et tournure de phrase). Le plus important est de connaître ce qui existe déjà dans ce langage, les librairies et comment les utiliser.

Ce dernier aspect est crucial pour la productivité d'un programmeur. C'est souvent au bout de plusieurs années qu'un développeur maîtrise aisément toutes ces API. Le problème est bien là : la maîtrise prend du temps. Et le temps, personne n'en a jamais assez.

C'est pour ça que la popularité d'un langage de programmation est rarement due à sa capacité à exprimer tous les paradigmes informatiques connus mais plus par sa capacité à montrer qu'il est le seul et unique langage qu'on vous demandera d'utiliser en milieu professionnel.

La période nécessaire d'apprentissage étant longue, un informaticien professionnel choisissant d'avoir quand même une vie en dehors de l'informatique et de son boulot, choisira nécessairement un seul langage.

A cause de cet apprentissage long, il est important de "maîtriser" au moins un langage de programmation, tout en gardant l'esprit ouvert sur les autres langages existants. Autant choisir un langage qui permet de mettre en œuvre un maximum de paradigmes. Même si il est vrai que le domaine du développement logiciel a largement avancé en restreignant ce que peuvent faire les programmeurs avec leur code, comme nous le rappelle Steve McConnell dans Code Complete 2 :
At one time or another, someone thought that each of the following control structures was a good idea:

- Unrestricted use of gotos

- Ability to compute a goto target dynamically and jump to the computed location

- Ability to use goto to jump from the middle of one routine into the middle of another routine

- Ability to call a routine with a line number or label that allowed execution to begin somewhere in the middle of the routine

- Ability to have the program generate code on the fly and then execute the code it just wrote

At one time, each of these ideas was regarded as acceptable or even desirable, even though now they all look hopelessly quaint, outdated, or dangerous. The field of software development has advanced largely through restricting what programmers can do with their code.

A vous donc, de choisir le bon langage de programmation pour lequel vous êtes prêt à investir un nombre d'heures déraisonnable pour en acquérir toute la maîtrise.

Aucun commentaire: