[Squeak-fr] fin de l'experience

nicolas cellier ncellier at ifrance.com
Sam 28 Jan 01:54:52 CET 2006


J'ai appris Smalltalk il y a près de 20 ans en premier avec Smalltalk V.
Je ne me souviens pas que cela a été particulièrement difficile et douloureux.
Mais il y a sans doute 2 raisons principales à cela:
 1) l'image était beaucoup plus petite (150 classes 3500 méthodes). Donc 
beaucoup plus facile de naviguer dans le code sans se perdre dans les 
méandres et de comprendre globalement l'implémentation.
 2) le "tutorial" de Smalltalk V était très bien conçu, simple et graduel. On 
apprend la syntaxe et quelques classes et messages de base en même temps en 
utilisant l'interpréteur (doIt printIt inspectIt) avant d'attaquer la 
programmation d'une classe. 

Ensuite je suis passé sur Smalltalk-80 (350 classes 7000 méthodes mais 
compilateur Smalltalk inclus) et j'ai approfondi avec les 3 Adele Goldberg 
(Blue, Orange et quoi déjà ?). Mais il m'a peut être fallu un an ou plus pour 
désosser le jouet et bien comprendre la machine virtuelle, le compilateur, le 
byte code, Metaclass class, aucune instruction de branchement nécessaire 
hormis sendMessage et return, le garbage collect et autres beautés. Tout cela 
n'est pas nécessaire, mais la curiosité...

Je dirais aux nouveaux qu'il ne faut pas se décourager mais dépenser ces 
quelques jours d'investissement. C'est quand les acquis vont s'accumuler que 
la beauté du langage va apparaître. Personne n'a appris Smalltalk en trois 
jours.
Au début, on est tenté d'ouvrir les implementors/senders et de pister le code 
en ouvrant des dizaines de fenêtres (les poupées russes) pour reconstituer le 
fil linéaire habituel. Le code est toujours simple, quelques lignes, mais 
éparpillé, c'est un peu déroutant. On a l'impression que quelque chose nous 
échappe, qu'on a jamais fini de débobiner la pelote. Et puis il y a toutes 
ces branches possibles (les implementors d'une même méthode).
Puis on finit par retrouver les mêmes classes et mêmes messages dont on 
commence à comprendre le sens, et le puzzle se reconstitue, ce n'est pas un 
déclic mais quelque chose qui vient progressivement. On finit par abandonner 
complètement la vision linéaire du gros fichier source global quand on a 
l'impression de pouvoir faire le tour d'un joli code Smalltalk fait d'un 
nombre réduit de petites méthodes élégantes. Small is beautiful. On devient 
fasciné par ces méthodes qui ne font pas plus de 5 lignes.
Rien de tel alors que de naviguer dans le code source existant pour 
appréhender le langage et apprendre par l'exemple.

Toutefois, mon impression est que si je démarrais aujourd'hui avec Visualworks 
(+ de 3000 classes 80000 méthodes) ou Squeak (+ de 2000 classes 50000 
méthodes) ce serait beaucoup plus difficile. Simplement parce que le nombre 
de classes et de méthodes a explosé et fait qu'on peut se perdre dans le code 
et qu'on a l'impression d'être devant une montagne. L'implémentation a 
souvent perdu en simplicité (Les interfaces graphiques par exemple). La liste 
hiérarchique des classes, et leurs méthodes faisaient partie du tutorial 
Smalltalk V. Aujourd'hui on pourrait remplir des centaines de pages avec 
l'image actuelle ! 

Commencer à naviguer dans le code d'une image moderne demande un effort mental 
harassant pour un nouveau. Quand on cherche les implementors, on peut en 
avoir plus de 10 pour un message, alors pour explorer le code, il faut être 
capable de fermer un certain nombre de parenthèses mentalement. Si il y a des 
centaines de classes et des milliers de méthodes à ingurgiter avant de 
comprendre l'implémentation, cela devient rédhibitoire et on a alors besoin 
de prêtres et de gourous pour nous initier. Mais ce n'est pas cela l'esprit 
initial de Smalltalk.

C'est pourquoi je pense qu'il est essentiel de commencer par un bon 
didacticiel et une image réduite pour apprendre le langage, ses concepts, la 
syntaxe, la réflexivité (self, super, les classes sont des objets, et les 
essentiels Behavior Metaclass perform:...), et les bibliothèques principales 
(Collections ArithmeticValue MVC etc...). Apprendre à naviguer, découvrir que 
le navigateur lui même est écrit en Smalltalk, le modifier en ligne... 
Modifier le langage lui même: créer des structures de contrôle et pourquoi 
pas modifier la syntaxe... Jouer avec le système. Je ne connais aucun autre 
langage qui donne un tel pouvoir au programmeur.

Bien sûr, la tentation est grande de balancer tout de suite le novice dans le 
grand bain, en lui faisant miroiter ces outils formidables Seaside et autres 
RefactoringBrowser. Mais je suis sûr que je devrais probablement moi même 
"browser" des centaines de méthodes avant de comprendre où faire une petite 
modification dans le RefactoringBrowser. Ce n'était pas le cas pour le vieux 
Browser.

On n'apprend pas le langage C à un programmeur en lui donnant à lire les 3 
millions de lignes de code de la machine virtuelle Java.

Il est beaucoup plus gratifiant de comprendre un programme simple que de 
sécher devant un programme compliqué non ? Et il est encore plus gratifiant 
de se rendre compte qu'un problème compliqué peut être résolu par un petit 
programme si simple...

L'image squeak est formidablement riche, foisonnante et imaginative, il y a 
certes un côté ludique, mais cela à aussi tendance à rendre l'interface plus 
complexe (je pense aux Morph).

Je comprends parfaitement qu'un nouveau venu se sente aujourd'hui frustré.
Je milite pour qu'une version allégée soit proposée aux autodidactes pour 
apprendre la philosophie du langage, et se rendre compte à quel point 
Smalltalk est élégant efficace lisible compréhensible et Small. Quitte à 
changer pour une image plus étoffée quand l'acquis est suffisant.

Qu'en pensez vous ?



More information about the Squeak-fr mailing list