Comment apprendre Smalltalk peut faire de vous un meilleur développeur

Smalltalk est largement perçu comme une langue ancienne et moribonde — une antiquité d’une époque révolue. Rien ne pouvait être plus éloigné de la vérité.

Smalltalk est toujours très pertinent. C’est un excellent langage pédagogique pour enseigner la programmation à des personnes qui n’ont aucune formation technique. C’est un langage de prototypage superlatif pour les startups. C’est un langage d’entreprise de force industrielle utilisé par les entreprises grandes et petites du monde entier. Il y a de bonnes raisons d’envisager d’utiliser Smalltalk moderne aujourd’hui, car beaucoup de choses ont changé ces dernières années pour améliorer ses perspectives.

Vous n’avez pas besoin d’utiliser Smalltalk en production aujourd’hui, mais essayez de coder quelque chose dans Smalltalk et voyez comment cela se sent. Cela devrait vous sembler familier, car l’implémentation par Smalltalk du paradigme orienté objet (OO) est si excellente qu’elle a influencé toute une génération de langages OO, tels que Objective-C, Python, Ruby, CLOS, PHP 5, Perl 6, Erlang, Groovy, Scala, Dart, Swift, etc.

En apprenant Smalltalk, vous comprendrez comment toutes ces fonctionnalités utiles dans les langues OO d’aujourd’hui sont devenues. L’apprentissage de Smalltalk pourrait également vous donner un avantage considérable en matière de compétences en programmation parmi vos pairs, et ce pourrait être un excellent outil pour enseigner la programmation aux débutants.

Qu’est-ce que Smalltalk nous a donné?

Smalltalk a un riche héritage de contributions à l’industrie du logiciel. Il suffit de regarder cette liste de fonctionnalités et de technologies qu’elle a introduites:

  • Smalltalk a présenté au monde le langage de la machine virtuelle (ou machine virtuelle), qui permet aux logiciels d’être indépendants de la plate-forme. C’est la même technologie qui sous-tend Java (JVM) et .NET, ainsi qu’Android (Dalvik).
  • Smalltalk a également été le pionnier de la compilation JIT (juste à temps), une technique permettant d’améliorer considérablement les performances des logiciels de bytecode tels que Java.
  • De Smalltalk est venu le premier environment moderne (environnement de développement intégré), qui comprenait un éditeur de texte, un navigateur de système ou de classe, un inspecteur d’objets ou de propriétés et un débogueur. Cela a conduit aux nombreuxEs que les développeurs privilégient aujourd’hui, tels que Visual Studio, Xcode et IntelliJ IDEA. Personnellement, je pense qu’aucun de cesEs ne peut se comparer à l’E de Smalltalk en termes de simplicité, d’élégance et de rapidité de développement; l’original est toujours le meilleur!
  • Dès le début, Smalltalk avait des fermetures, qui sont des fonctions de première classe à portée lexicale. En substance, une fermeture est une fonction de rappel qui peut voir les variables non locales à l’emplacement où elles ont été définies. Cela peut vous aider à écrire du code beaucoup plus compact et lisible. Les fermetures trouvent leur chemin dans de nombreux langages majeurs, tels que Java, C # et PHP.
  • Smalltalk a été le premier outil de langage à prendre en charge la programmation « en direct » et les techniques de débogage avancées telles que l’inspection à la volée et les modifications de code pendant l’exécution. Aujourd’hui, le débogage en direct est possible en C# avec « Edit and Continue » de Visual Studio et en Java avec HotSwap.
  • Smalltalk a introduit MVC (Model-View-Controller) dans le monde entier. MVC est un modèle architectural logiciel pour la mise en œuvre d’interfaces utilisateur. Il est populaire avec les applications GUI de bureau et les applications Web. De nos jours, c’est l’architecture que la plupart des développeurs Web apprennent en premier.
  • Dans une large mesure, Smalltalk est responsable du développement piloté par les tests (ou TDD) et de la programmation extrême (ou XP), qui sont tous deux très influents dans les pratiques agiles standard d’aujourd’hui.
  • Smalltalk a fait de « duck typing » un mot familier (enfin, si votre maison a un programmeur dedans). Le typage de canard est l’endroit où la « vérification de type » est différée jusqu’à l’exécution — lorsque les capacités de réflexion sont utilisées pour assurer un comportement correct. Nous trouvons le duck typing dans de nombreux langages aujourd’hui, y compris Java, Python, Common Lisp, Go, Groovy, Objective-C et PHP.
  • Smalltalk a été le pionnier du développement de bases de données d’objets. Bien qu’elles ne soient pas entrées dans le grand public, les bases de données d’objets ont leurs marchés de niche. Le meilleur exemple de produit de base de données d’objets est GemStone / S, qui est bien adapté aux systèmes distribués multi-niveaux évolutifs, performants et multi-niveaux.
  • Smalltalk nous a donné le premier navigateur de refactorisation. Bien sûr, le support de refactorisation peut être trouvé dans la plupart desEs aujourd’hui.
  • Smalltalk a joué un rôle déterminant dans le développement de l’interface utilisateur graphique (ou GUI) et de l’interface utilisateur « ce que vous voyez est ce que vous obtenez » (WYSIWYG).

Mais comment apprendre Smalltalk peut-il faire de moi un meilleur développeur?

Smalltalk possède plusieurs fonctionnalités de tueur qui étaient bien en avance sur leur temps:

  • Persistance basée sur l’image
  • Objets : Tout est un objet et les objets ne communiquent que par le biais de messages (l’OO « le plus pur » et l’un des plus anciens)
  • Programmation « Live »
  • Techniques de débogage avancées telles que les changements de code à la volée
  • Une interface simple simple et épurée
  • Langages spécifiques au domaine (DSL): La seule façon dont Smalltalk fonctionne, les programmeurs doivent donc se concentrer sur le domaine problématique en utilisant un langage et une notation naturels à ce domaine

Et il y a quelques autres fonctionnalités qui rendent Smalltalk spécial aussi.

En substance, le principal avantage de Smalltalk en tant qu’outil de langage et d’apprentissage productif est qu’il élimine la plupart, sinon la totalité, du stress cognitif dans les langages OO traditionnels tels que Java. Smalltalk ne présente pas d’encombrement syntaxique ou de fonctionnalités distrayantes. Il se dégage simplement de votre chemin afin que vous puissiez concentrer toute votre attention sur le problème ou l’application à portée de main. Ce n’est pas que Java est un mauvais langage pour être plus complexe (et avoir des noms de classes de 30 caractères); ce que je dis, c’est que l’apprentissage d’un langage OO non encombré peut en fait faire de vous un meilleur programmeur Java une fois que vous comprenez ses concepts OO sous un autre angle.

L’élimination du stress cognitif est un objectif fondamental de nombreux langages — par exemple, Python, Ruby, Elixir, Elm et Go. Même si vous ne le ressentez pas, le stress est là. On dit souvent que la programmation en Smalltalk ou en Python est plutôt Zen; votre esprit s’écoule sans effort avec la tâche. C’est la beauté et la valeur de la simplicité du langage, et Smalltalk l’a à la pelle.

Dans Smalltalk, OO est distillé à ses concepts les plus élémentaires de classes et de méthodes, de métaclasses et de réflexion, et surtout de transmission de messages. Smalltalk, de par sa pureté et sa cohérence d’objet, vous donnera une compréhension profondément meilleure de la programmation orientée objet et de la façon de l’utiliser au mieux.

La simplicité de Smalltalk en fait également un langage pédagogique idéal pour apprendre la programmation, surtout si vous n’avez pas de formation technique. La simplicité du langage et des outils vous permet de concentrer vos énergies sur l’apprentissage des techniques de programmation, pas sur les formalités linguistiques.

Comment fonctionne Smalltalk? L’approche basée sur l’image de la programmation

La principale revendication de renommée de Smalltalk est son approche basée sur l’image de la création de logiciels. Une image est un instantané de la mémoire qui contient tous les objets de votre application ou système en cours d’exécution. Il encapsule tout l’état d’exécution de votre programme. Une image peut être enregistrée sur le disque et l’exécution peut ensuite reprendre exactement là où vous vous étiez arrêté!

L’image de Smalltalk peut sembler un peu loufoque, mais en fait, elle ressemble fortement à quelque chose de largement utilisé aujourd’hui: les images système dans la virtualisation du système d’exploitation comme on en trouve dans VMware et VirtualBox. Vous devez vous rappeler que Smalltalk était à l’origine un système d’exploitation autonome lorsqu’il a été créé à Xerox PARC dans les années 1970.

L’image de Smalltalk ressemble également fortement au DOM (Modèle d’objet de document) d’une page Web. Notez qu’une application Web est essentiellement un système en soi, séquestré dans le navigateur Web et privé d’un accès direct au système de fichiers de l’hôte et à d’autres ressources. Lorsqu’un navigateur Web se ferme, l’état du site Web dynamique peut être enregistré ou mis en cache, et la prochaine fois que le navigateur reprend, le site Web peut être restauré dans le navigateur (avec certaines limitations).

Même la feuille de calcul humble se rapproche du concept d’image. Il encapsule tout l’état d’exécution. Il ne peut pas accéder aux ressources système de l’hôte. Il peut être enregistré et restauré. Et vous devez savoir que les feuilles de calcul sont toujours utilisées pour développer des modèles et des applications sophistiqués avec son propre langage.

Le concept d’image est donc assez répandu. C’est une façon tellement agréable de développer un logiciel qu’une version du concept d’image a été créée pour JavaScript dans le noyau Lively.

Tout dans Smalltalk est un objet

Aucune exception: Tout est un objet. Il n’y a pas de types de données primitifs. Il n’y a pas de structures de contrôle telles que la sélection et l’itération! Tout dans Smalltalk se fait en envoyant des messages aux objets. C’est ce qui rend Smalltalk si simple, élégant et facile à apprendre. C’est ce qui rend la langue si parfaitement propre syntaxiquement.

Par exemple, l’extrait de code suivant étend la classe Number pour prendre en charge une opération factorielle non récursive:

Number extend
ifFalse: .
^ (c fold: ) ]]].

7 factorial printNl.

7 my_factorial printNl. "should be the same result as the previous line"

Ici, ifTrue: est un message de mot clé envoyé à l’objet booléen qui résulte de l’évaluation de l’expression (self < 2). L’argument du mot clé message est un bloc de code (délimité par des crochets). En fait, ifTrue: est la première partie d’un message de mot-clé en deux parties, la deuxième partie étant ifFalse:.

Le message unaire new est envoyé à la classe OrderedCollection pour créer une nouvelle collection. Le message printNl est envoyé au résultat (qui est un objet) de l’envoi du message my_factorial au numéro 7. Le tout se lit presque comme un langage naturel!

Réflexion computationnelle dans Smalltalk

La réflexion dans Smalltalk est particulièrement utile en tant que moyen pour un programme d’inspecter sa propre structure et son calcul au moment de l’exécution. Cela confère un pouvoir énorme, permettant aux programmes de s’étendre avec de nouvelles classes et méthodes ou de demander « qui m’a envoyé ce message? »

La réflexion de calcul est utilisée pour implémenter un moyen puissant de gérer les erreurs. Lorsqu’un objet reçoit un message qu’il n’implémente pas, il reçoit un message doesNotUnderstand:, ainsi qu’une réification du message d’origine. Il y a beaucoup de choses que le programme peut faire avec le message doesNotUnderstand:, y compris s’étendre avec de nouvelles fonctionnalités!

Le concept d’image et la réflexion permettent également à Smalltalk d’éliminer la frontière application/E. Tout ce dont vous avez besoin pour développer, déboguer et exécuter votre application est dans l’image. Il n’est pas nécessaire de quitter votre environnement applicatif. C’est une approche complètement holistique du développement logiciel qui rend tout plus zen et productif.

Renaissance de Smalltalk

Les 15 dernières années de développement dans le monde de Smalltalk ont rendu le langage beaucoup plus attrayant.

Smalltalk est maintenant disponible pour la programmation Web frontale en utilisant Amber Smalltalk, qui se transpile en JavaScript. Le développement Amber se déroule entièrement dans le navigateur. L’une des choses étonnantes à propos d’Amber est que lorsque vous importez une bibliothèque JavaScript, ses objets peuvent être traités comme des objets Smalltalk.

En 2002, le Seaside web framework a été publié, devenant l’outil le plus populaire pour le développement web dans Smalltalk. Son approche basée sur la continuation a fourni un mécanisme « d’appel / retour » conventionnel pour votre application Web. Il peut aider à résoudre des problèmes tels que les problèmes de double demande et de bouton de retour. Assez révolutionnaire pour son époque, et encore peu adopté dans d’autres frameworks web.

Le projet Pharo a débuté en 2008 pour se concentrer sur le génie logiciel moderne et les techniques de développement. Il a amené Smalltalk beaucoup plus loin que le projet open-source précédent appelé Squeak, qui était basé sur le vénérable dialecte Smalltalk-80. Le projet Pharo a également donné lieu à des recherches sur un nouveau type d’EDI appelé Glamorous Toolkit. Il est basé sur l’idée que votre environnement de programmation doit être « moulable » pour répondre à vos besoins.

L’année dernière, le très réputé Dolphin Smalltalk est devenu open source, offrant une autre option merveilleuse pour les fans de Smalltalk. Dolphin Smalltalk a souvent été félicité pour avoir l’une des meilleures implémentations de l’E Smalltalk.

L’héritage de Smalltalk: Rendre la programmation amusante

Lorsque vous utilisez les nombreuses fonctionnalités du développement logiciel moderne telles que la JVM, l’EDI Eclipse, les fermetures, le « live coding », MVC, TDD, VMware et même l’ancienne application web, repensez à leurs origines dans Smalltalk et respectez davantage ce que vous faites. Ayez une plus grande appréciation des langages que vous utilisez, qu’ils soient Objective-C, Python, Ruby, Groovy, Scala, Dart ou Swift.

Travailler avec le langage à l’origine de toutes ces fonctionnalités et technologies offre une occasion unique d’améliorer considérablement vos connaissances, votre acuité mentale et votre productivité en tant que développeur de logiciels. Le mot « fun » n’entre pas toujours dans les discussions sur le génie logiciel, mais je pense que Smalltalk — et ses frères OO — fournissent la faible barrière cognitive et la facilité de programmation qui peuvent rendre le génie logiciel amusant.



+