next up previous contents index
Next: Programmes et algorithmes Up: No Title Previous: Table des matières

Avant-propos

Computers in the future may weigh no more than 1.5 tons. Popular Mechanics, 1949

I think there is a world market for maybe 5 computers. Thomas Watson, chairman of IBM, 1943

640K ought to be enough for anyone. Bill Gates, 1981


Les informaticiens, quand ils se font linguistes, distinguent la syntaxe, la sémantique, et la pragmatique d'un langage de programmation.

La syntaxe regroupe les règles lexicales et grammaticales de formation des programmes, qui permettent de décider si un texte est un << programme syntaxiquement correct >>, ou plus simplement, est un << programme >>, ou bien s'il comporte des << erreurs de syntaxe >>. Tout débutant doit se sentir rebuté par cette forme d'écriture et sa rigidité qui ne pardonne pas la moindre faute de frappe ; la connaissance des règles syntaxiques facilitera surtout le travail du compilateur. L'idéal serait d'appliquer ces règles sans jamais devoir les apprendre, en utilisant un éditeur de texte bien configuré (c'est-à-dire Emacs) en lisant beaucoup de programmes bien écrits et en procédant par imitation.

En matière de syntaxe, un souci de non-exhaustivité a été résolument appliqué. On ne trouvera pas certaines constructions de C qui sont désormais obsolètes ; d'autres constructions, qui ne sont à la portée que de programmeurs avertis, et pour des usages spécifiques, sont hors du propos de ce cours ; enfin, quelques-unes, qui ne présentent pas plus d'intérêt -- sinon de confort -- que de difficulté, ont été écartées pour préserver la légèreté de ce cours. On trouvera cependant en annexe la grammaire complète de C et du préprocesseur, à titre de référence.

La sémantique explicite la signification des programmes : quelle est la valeur d'une expression, quel est l'effet d'une instruction. C'est ici que résident les concepts réellement importants de la programmation, qui s'appliquent également à d'autres langages : évaluation, portée des déclarations, appel de fonction, modes d'allocation, etc. Les objectifs de sûreté et d'efficacité des programmes nécessitent une connaissance précise de la sémantique : celle-ci sera donc traitée dans ce cours, de façon très informelle mais assez complète. S'il arrive que le compilateur détecte de probables << erreurs de sémantique >>, c'est plutôt en recourant à un debugger que l'on constatera un comportement inattendu qui est le symptôme de ce type d'erreurs. On n'oubliera pas que la programmation est une science expérimentale.

Formes (syntaxiques) et concepts (sémantiques) ne suffisent pas pour apprendre à programmer. La pragmatique désigne la mise en pratique de ces formes et concepts : quelle construction utiliser dans tel contexte, comment l'utiliser, etc. La pragmatique est aux langages de programmation ce que la rhétorique fut au langage parlé pendant des siècles : un ensemble de règles de l'art, de recettes, d'exemples et d'usages que reconnaissent les programmeurs. L'ambition de ce cours est de faire partager des éléments, nécessairement disparates, de cette pragmatique de C.

Il faut encore avoir quelque chose à dire, pour écrire des programmes qui ont du sens. Les programmes de ce cours satisfont un unique objectif, qui est de résoudre des problèmes, au moyen d'algorithmes. Ceux-ci sont conçus, parfois par des informaticiens, et souvent par des spécialistes de la discipline dont émane le problème posé, qui maîtrisent des techniques de résolution spécifiques (par exemple en mathématiques appliquées). Ce cours ne serait qu'une carcasse décharnée s'il n'était ponctué de ces algorithmes, qui attestent du rôle de l'informatique dans le champ technique. Le lecteur est renvoyé à d'autres cours (probabilités, analyse numérique, recherche opérationnelle, etc) pour leur élaboration. À l'exception de quelques résultats élémentaires, les algorithmes ne feront l'objet d'aucune étude (preuve de propriétés, analyse de complexité) : ce cours n'aborde donc pas l'algorithmique.

À une organisation hiérarchisée en chapitres, sections et sous-sections, j'ai préféré une structure linéaire en gif sections, chacune assez courte. Le lecteur aura la liberté de suivre cette ligne du début à la fin, ou bien de parcourir des chemins jalonnés qui s'entrecroisent. Voici les principaux thèmes de cheminement :

Mes remerciements à Laurent Bouaziz, Gilbert Caplain, Jean-Philippe Chancelier, Daniel Hirschkoff, Mathieu Jaume, Renaud Keriven, Bernard Lapeyre et Thierry Salset pour leur relecture de ce texte et leurs nombreuses corrections et suggestions. L'annexe sur Pascal et C a été rédigée par Thierry Salset, et le guide pratique Unix par Daniel Hirschkoff. L'installation des logiciels et de l'environnement de travail a été effectuée par Renaud Keriven. La traduction de ce texte, de LaTeX en HTML, et son installation sur le Web ont été réalisées par Jean-Philippe Chancelier.

René Lalement
Noisy-le-Grand, 16 septembre 1996


next up previous contents index
Next: Programmes et algorithmes Up: No Title Previous: Table des matières

Rene Lalement
Mon Sep 30 18:22:54 MET 1996