RECHERCHE :
Bienvenue sur le site de Michel VOLLE
Powered by picosearch  


Vous êtes libre de copier, distribuer et/ou modifier les documents de ce site, à la seule condition de citer la source.
 GNU Free Documentation License.

Commentaire sur :

Ivor Horton, Beginning C, Apress 2006

30 novembre 2006

Version imprimable

Pour poster un commentaire


Pour lire un peu plus :

- S'apprivoiser à un nouveau logiciel
- Entretien avec Laurent Bloch
- La programmation comme hobby

- Langage et "langage"
- The Art of Computer Programming
-
Structure and Interpretation of Computer Programs

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[1] 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[3] ; 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.


[1] Voir Entretien avec Laurent Bloch.

[2] Donald Knuth fait exception car pour pouvoir évaluer la performance de ses algorithmes il s'est créé un langage personnel proche de l'assembleur

[3] C’est une découverte un peu inquiétante : ne commettons-nous pas beaucoup d’erreurs dans les domaines de la vie que nous avons compris mais où nous manquons de doigté ? dans ces domaines-là, aucun compilateur ne signale les bogues que nous commettons…