Dans le petit milieu que forme une
corporation il est risqué d’avouer que l’on ne connaît pas un des outils qu’elle
utilise couramment. Ceux qui ont été formés à cet outil ont en effet oublié les
étapes par lesquelles ils sont passés et son maniement leur est devenu naturel.
Ils s’indignent de votre ignorance, un peu comme ces parents qui ne conçoivent
pas qu’un petit enfant puisse faire des fautes d’orthographe, et certains
d'entre eux vous prennent pour un idiot.
Ceux qui n’ont pas été formés, par contre,
croient qu'il est impossible d’acquérir ce savoir et soupçonnent celui qui s’y
attelle de surestimer ses capacités. L’apprentissage, toujours pénible, l’est
rendu plus encore par le fait que l’apprenti est mal vu.
Je m’expose au risque de passer pour un
idiot prétentieux en avouant qu’ayant toujours ignoré la programmation en C, je
me suis attelé à l’apprendre. Je sais que cela va choquer ceux qui, comme
Laurent Bloch, préfèrent Scheme
ou qui, comme Jean-Paul Figer, estiment qu’il vaut mieux apprendre XML. Ils ont
raison, mais j’ai mes propres raisons.
* *
Dans les années 60 j’ai subi des cours de
Fortran. Par la suite j’ai appris Pascal pour m’amuser, puis
Scheme pour le plaisir.
Mais ne pas connaître C, c’est comme ne pas
pouvoir lire l’anglais : cela rend difficile l’accès à la littérature
informatique car la plupart des exemples sont en C ou dans des langages (C++,
Java etc.) inspirés de C[2].
Il y a plus grave : C occupe, parmi les
langages de programmation, une place analogue à celle du Sanscrit parmi les
langues indo-européennes. Les langages construits après C ont en effet pour la
plupart repris ses notations, et pour se sentir à l'aise il faut les connaître.
Or je trouve horribles le fameux int main(void),
les accolades, la façon dont sont présentées les conditions, les boucles etc.
Pour ceux qui se sont formés à C ces notations sont devenues naturelles ; pour
moi elles sont un obstacle à la lecture.
J’ai tenté à plusieurs reprises d’apprendre
C mais les manuels me sont tombés des mains. C'est qu'il existe peu de choses
plus ennuyeuses qu’un manuel d’informatique, surtout si l’auteur suppose que
vous savez déjà beaucoup de choses. Certains de ces livres sont de vrais rébus.
Heureux étudiants, que des professeurs alimentent à la petite cuiller et qui
avez le temps de faire des travaux pratiques ! Passé un certain âge on n’a plus
de professeur et on n’est plus assez disponible pour suivre des cours. Il faut
donc se débrouiller seul avec des livres et les conseils de quelques amis.
Heureusement, j’ai rencontré Beginning C
grâce à une petite annonce envoyée par amazon.com.
Beginning C était annoncé comme un livre pour
débutant, pour parfait ignorant, pour quelqu’un qui n’a jamais programmé. Voilà
ce qu’il me fallait !
* *
Je n’ai pas été déçu. Beginning C est
écrit comme je voudrais que tout les cours d’informatique le fussent. L’auteur
ne suppose pas le lecteur intelligent ; il explique tout dans le détail et
illustre son propos en donnant en exemple de nombreux programmes qu'il commente
ligne à ligne. On n’a pas à solliciter son imagination, ni sa mémoire, pour
deviner ce que peut vouloir dire telle notation. A la fin de chaque chapitre,
quelques exercices permettent de se faire la main. Ils sont faciles et en petit
nombre, et c’est bien car si j’ai pour règle de faire tous les exercices qu’un
manuel comporte, ma bonne volonté a été souvent rebutée par leur difficulté et
leur nombre excessifs. Le but des exercices n’est pas d’accomplir des prouesses,
mais de s’accoutumer à la mise en œuvre du langage.
J’ai téléchargé un compilateur C (plusieurs
sont gratuits) et me suis exercé à composer des programmes. On a beau avoir tout
compris, on fait beaucoup d’erreurs ;
mais à force on apprend à les éviter.
Les répétitions et les paraphrases allongent
le texte, le livre est donc gros, mais on le lit sans fatigue. On peut en un
jour ou deux lire un chapitre et faire les exercices qu’il contient. Il ne faut
pas relâcher l’effort : si l’on s’arrête quelques jours les notations
s’échappent de la mémoire et il faudra revenir en arrière pour retrouver le fil.
* *
Au passage, j’ai compris pourquoi tant de
personnes détestent C : il ne fait pas grand-chose pour aider le programmeur.
C’est à ce dernier qu’il incombe de déclarer les variables, de contrôler les
formats etc. et cela exige de la minutie. C est finalement très simple, très
sobre, mais la contrepartie est qu'il est vertigineusement dépourvu de
garde-fou. Beginning C est parsemé de phrases comme celle-ci : « Si vous
ne faites pas attention au format des données, telle fonction risque de fournir
n’importe quel résultat et vous aurez du mal à savoir d’où ça vient ». Le
programmeur peut bien sûr écrire les garde-fous et je suppose qu’il existe des
bibliothèques pour cela, mais c’est à lui de s’en soucier.
C n’est pas fait pour moi, mais pour ceux
qui ont besoin de manipuler les tripes de la machine, de programmer un système
d’exploitation etc. Il permet de manipuler les bits à l’intérieur d’un octet, de
manipuler la mémoire en jonglant avec des pointeurs : ce sont des outils dont je
n’aurai jamais besoin et qui, entre mes mains, seraient des plus dangereux. Je
ne serai donc jamais un véritable programmeur en C et je ne conseillerai pas ce
langage à ceux qui, comme moi, programment pour le plaisir. Qu’ils utilisent
plutôt Scheme s’ils veulent s’amuser à programmer un algorithme, ou XML pour les
tâches moins ludiques.
Mais je suis content d’avoir compris en quoi
C consiste et d’avoir écrit quelques petits programmes. Ses notations ne me
révoltent plus, car je perçois maintenant l’esprit dans lequel elles ont été
définies. Je pourrai maintenant lire sans subir de contrariété les programmes
qui, écrits en C++, en Java, en ASP etc., utilisent des notations influencées
par C.
|