URL: https://linuxfr.org/users/chat_de_sorciere/journaux/c-est-decide-j-apprends-common-lisp Title: C'est décidé, j'apprends Common Lisp! Authors: Michaël Date: 2017年10月06日T14:23:46+02:00 License: CC By-SA Tags: programmation et common_lisp Score: 36 Il y a trois semaines j'ai décidé d'apprendre *[Common Lisp](https://en.wikipedia.org/wiki/Common_Lisp),* motivé principalement par la curiosité et attiré par l'approche assez différente de la programmation qu'a Common Lisp par rapport à des langages d'autres familles. Je vous raconte ma vie, des fois que vous ayiez aussi envie d'apprendre ce langage et vouliez gagner du temps avec les premier pas. **Mon profil.** Je suis mathématicien de formation (cursus math/info, calcul scientifique puis géométrie algébrique) et je travaille depuis 6 ans avec beaucoup de programmation dans des rôles variés – et je programmais déjà auparavant en hobby. Je connais pas mal de langages (OCaml, C, Bourne Shell, JavaScript, TeX) et j'ai déjà écrit des programmes substantiels dans d'autres langages (C++, Python 2.X, perl, PHP, assembleur 8086) donc je ne suis plus tout à fait un débutant en programmation. (Surtout des simulations numériques, du GUI, du traitement de données géographiques, de l'automatisation de traitement de Cloud, des traitements de données.) **Mon premier environnement.** J'ai choisi d'utiliser SBCL, une implémentation libre largement disponible sur les systèmes actuels et Emacs/[SLIME](https://common-lisp.net/project/slime/) comme environnement de développement. Dans Emacs la commande `slime` permet de démarrer une boucle d'évaluation, ce qui est suffisant pour commencer à expérimenter. **Mon premier livre pour Common Lisp.** Après avoir évalué les ressources suggérées sur reddit j'ai décidé de prendre le livre de Paul Graham, ANSI Common Lisp. Je l'ai préféré à un autre choix apparemment populaire, le livre de Peter Seibel [Practical Common Lisp](http://www.gigamonkeys.com/book/) parceque ce dernier ne propose pas systématiquement des exemples complets (il utilise beaucoup de "supposons que f soit une fonction qui fasse ceci-cela") alors que Graham ne donne que des exemples qu'on peut réellement utiliser dans la boucle d'évaluation, ce qui est très chouette pour expérimenter et apprendre de façon interactive. A posteriori je suis encore plus content de ce choix parceque le livre de Graham peut aussi être utilisé comme référence, par exemple si on veut se remettre en mémoire les détails de la façon de définir une fonction il suffit de relire le chapitre "Fonctions." De ce côté là le livre de Seibel est un peu moins pratique mais c'est néanmoins une seconde lecture très recommendable. Le livre de Graham n'est pas trop recommandé pour les débutants en programmation, notamment à cause de son utilisation de mnémoniques un peu abstruses pour nommer les variables et les fonctions, ce qu'on considère aujourd'hui comme un exemple à ne pas suivre. En me prenant une demi-journée par jour et en faisant un peu de rab le week-end, il m'a fallu une grosse semaine pour faire le tour du livre. Le seul gros défaut du livre de Graham est qu'il manque quelque peu d'exemples substantiels. Dans le cœur du livre le seul gros exemple est un petit *ray tracer* – c'est assez *fun!* Dans les derniers chapitres, il y a un petit système de déductions formelles, un générateur de HTML (cela fait délicieusement rétro aujourd'hui) et une implémentation de la logique objets (le *method dispatching*). Un des meilleurs livres est le livre sur "Le langage Caml" qui présente plein d'exemples ambitieux (compression de données, mini machine virtuelle, un assembleur et un compilateur Pascal pour n'en citer que quelques uns!) **Aprés le livre.** Une fois les bases connues, il est grand temps d'affiner ses connaissances! Des pistes à explorer toutes en même temps sont l'essai de [bibliothèques](http://www.cliki.net/current%20recommended%20libraries), la lecture de leur code, l'apprentissage de SLIME, notamment grâce à la [vidéo de Marco](http://common-lisp.net/project/movies/movies/slime.mov), puis de [quicklisp](https://www.quicklisp.org/beta/) et l'organisation d'un projet (voir les exemples de bibliothèques sur par GitHub et dans la base quicklisp). Pour ma part je me suis arrêté sur [JSCL](https://github.com/jscl-project/jscl) un compilateur Lisp vers JavaScript et je voudrais y ajouter une intégration de React, pour pouvoir programmer des GUIs React en Lisp. Amusez-vous bien!