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 ?
Le 28 janv. 06 à 01:54, nicolas cellier a écrit :
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:
- 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.
[ ... ]
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 ?
Je trouve ton analyse très bonne et tout à fait pertinente. Il nous faut retrouver la simplicité ! En effet, disposer d'une image simplifiée serait intéressante avec des étudiants qui apprennent Smalltalk. Je pense qu'un des objectifs de la SqueakFoundation si elle existait, serait de développer une image minimale avec une API bien précise et d'autres groupes pourraient développer des couches par dessus : Tweak, Croquet, Squeakland, ... Il y a déjà du progrès avec les dernières versions 3.8 et 3.9 : les différentes partie de l'image ont été packagés, l'image de base contient de moins en moins de chose. Il y a quelqu'un qui a fait une version SqueakLight, il faudrait voir ce qu'il y a dedans.
Cordialement, -- oooo Dr. Serge Stinckwich OOOOOOOO Université de Caen>CNRS UMR 6072>GREYC>MAD OOESUGOO http://purl.org/net/SergeStinckwich oooooo Smalltalkers do: [:it | All with: Class, (And love: it)] \ / ##
Salut
nicolas notre experience a berne est qu'un etudiant tres bon met une semaine pour apprendre, un bon 3 semaines, 1 mois et plus pour qq de normal.
Maintenant le refactoring browser on peut just l'utiliser sans savori ce que c'est ni aller le pacthe :).
Moi je ne connais que tres peu de Squeak. Je ne cherche pas a tout comprendre :)
Stef
squeak-fr@lists.squeakfoundation.org