Wie das Erlernen von Smalltalk Sie zu einem besseren Entwickler machen kann

Smalltalk wird weithin als alte, sterbende Sprache wahrgenommen – eine Antiquität aus einer vergangenen Zeit. Nichts könnte weiter von der Wahrheit entfernt sein.

Smalltalk ist immer noch sehr relevant. Es ist eine ausgezeichnete Unterrichtssprache, um Menschen ohne technischen Hintergrund das Programmieren beizubringen. Es ist eine Prototyping-Sprache der Superlative für Startups. Es ist eine industrietaugliche Unternehmenssprache, die von großen und kleinen Unternehmen auf der ganzen Welt verwendet wird. Es gibt gute Gründe, den Einsatz moderner Smalltalk heute in Betracht zu ziehen, da sich in den letzten Jahren viel geändert hat, um die Aussichten zu verbessern.

Sie müssen Smalltalk heute nicht in der Produktion verwenden, sondern versuchen, etwas in Smalltalk zu codieren und zu sehen, wie es sich anfühlt. Es sollte sich vertraut anfühlen, da Smalltalks Implementierung des objektorientierten (OO) Paradigmas so hervorragend ist, dass es eine ganze Generation von OO-Sprachen beeinflusst hat, wie Objective-C, Python, Ruby, CLOS, PHP 5, Perl 6, Erlang, Groovy, Scala, Dart, Swift und so weiter.

Wenn Sie Smalltalk lernen, werden Sie verstehen, wie all diese nützlichen Funktionen in den heutigen OO-Sprachen entstanden sind. Das Erlernen von Smalltalk könnte Ihnen auch einen großen Vorteil bei den Programmierkenntnissen Ihrer Kollegen verschaffen, und es könnte ein großartiges Werkzeug sein, um Anfängern das Programmieren beizubringen.

Was hat uns Smalltalk gebracht?

Smalltalk hat ein reiches Erbe an Beiträgen zur Softwareindustrie. Schauen Sie sich einfach diese Liste der Funktionen und Technologien an, die eingeführt wurden:

  • Smalltalk führte die Welt in die Sprache ein virtuelle Maschine (oder VM), mit der Software plattformunabhängig sein kann. Dies ist die gleiche Technologie, die Java (JVM) und .NET sowie Android (Dalvik) zugrunde liegt.
  • Smalltalk war auch Pionier der JIT-Kompilierung (Just-in-Time), einer Technik zur dramatischen Verbesserung der Leistung von Bytecode-Software wie Java.
  • Von Smalltalk kam die erste moderne IDE (Integrated Development Environment), die einen Texteditor, einen System- oder Klassenbrowser, einen Objekt- oder Eigenschafteninspektor und einen Debugger enthielt. Dies führte zu den vielen IDEs, die Entwickler heute bevorzugen, wie Visual Studio, Xcode und IntelliJ IDEA. Persönlich denke ich, dass keine dieser IDEs mit Smalltalks IDE in Einfachheit, Eleganz und Entwicklungsgeschwindigkeit vergleichbar ist; Das Original ist immer noch das Beste!
  • Smalltalk hatte von Anfang an Closures, die lexikalisch erstklassige Funktionen sind. Im Wesentlichen ist ein Closure eine Callback-Funktion, die nicht-lokale Variablen an der Stelle sehen kann, an der sie definiert wurden. Dies kann Ihnen helfen, viel kompakteren und lesbareren Code zu schreiben. Closures finden ihren Weg in viele wichtige Sprachen wie Java, C # und PHP.
  • Smalltalk war das erste Sprachwerkzeug, das „Live“ -Programmierung und erweiterte Debugging-Techniken wie On-the-Fly-Inspektion und Codeänderungen während der Ausführung unterstützte. Heute ist Live-Debugging in C # mit Visual Studio „Edit and Continue“ und in Java mit HotSwap möglich.
  • Smalltalk führte MVC (Model-View-Controller) in die Welt ein. MVC ist ein Softwarearchitekturmuster zur Implementierung von Benutzeroberflächen. Es ist beliebt bei Desktop-GUI-Anwendungen und Webanwendungen. Heutzutage ist es die Architektur, die die meisten Webentwickler zuerst lernen.
  • Smalltalk ist zu einem großen Teil dafür verantwortlich, dass wir testgetriebene Entwicklung (oder TDD) und extreme Programmierung (oder XP) erhalten, die beide einen großen Einfluss auf die heutigen agilen Standardpraktiken haben.
  • Smalltalk hat „duck Typing“ zu einem Haushaltswort gemacht (nun, wenn Ihr Haus einen Programmierer enthält). Bei der Duck-Typisierung wird die „Typprüfung“ bis zur Laufzeit verschoben — wenn Reflexionsfunktionen verwendet werden, um das korrekte Verhalten sicherzustellen. Wir finden Duck Typing heute in vielen Sprachen, einschließlich Java, Python, Common Lisp, Go, Groovy, Objective-C und PHP.
  • Smalltalk war Pionier bei der Entwicklung von Objektdatenbanken. Obwohl sie es nicht in den Mainstream geschafft haben, haben Objektdatenbanken ihre Nischenmärkte. Das beste Beispiel für ein Objektdatenbankprodukt ist GemStone / S, das sich gut für skalierbare, leistungsstarke, mehrstufige verteilte Systeme eignet.
  • Smalltalk gab uns den ersten Refactoring-Browser. Natürlich kann Refactoring-Unterstützung heute in den meisten IDEs gefunden werden.
  • Smalltalk war maßgeblich an der Entwicklung der grafischen Benutzeroberfläche (GUI) und der Benutzeroberfläche „what you see is what you get“ (WYSIWYG) beteiligt.

Aber wie kann mich das Erlernen von Smalltalk zu einem besseren Entwickler machen?

Smalltalk hat mehrere Killer-Features, die ihrer Zeit weit voraus waren:

  • Bildbasierte Persistenz
  • Objekte: Alles ist ein Objekt, und Objekte kommunizieren nur über Nachrichten (das „reinste“ OO und eines der frühesten)
  • „Live“ -Programmierung
  • Erweiterte Debugging-Techniken wie Änderungen des Codes im laufenden Betrieb
  • Eine einfache, übersichtliche IDE-Schnittstelle
  • Domänenspezifische Sprachen (DSLs): Die einzige Möglichkeit, wie Smalltalk funktioniert, ist, dass sich Programmierer auf die Problemdomäne konzentrieren müssen, indem sie eine Sprache und Notation verwenden, die für diese Domäne natürlich ist

Und es gibt ein paar andere Funktionen, die Smalltalk auch besonders machen.

Smalltalks Hauptvorteil als produktives Sprach- und Lernwerkzeug besteht im Wesentlichen darin, dass es den größten, wenn nicht sogar den gesamten kognitiven Stress in gängigen OO-Sprachen wie Java beseitigt. Smalltalk präsentiert keine syntaktische Unordnung oder störende Funktionen. Es wird einfach aus dem Weg, so dass Sie alle Ihre Aufmerksamkeit auf das Problem oder die Anwendung zur Hand konzentrieren können. Es ist nicht so, dass Java eine schlechte Sprache ist, um komplexer zu sein (und Klassennamen mit 30 Zeichen zu haben); Was ich sage ist, dass das Erlernen einer unbelasteten OO-Sprache Sie tatsächlich zu einem besseren Java-Programmierer machen kann, wenn Sie seine OO-Konzepte aus einer anderen Perspektive verstehen.

Die Beseitigung von kognitivem Stress ist ein grundlegendes Ziel vieler Sprachen – zum Beispiel Python, Ruby, Elixir, Elm und Go. Auch wenn du es nicht spürst, der Stress ist da. Es wird oft gesagt, dass das Programmieren in Smalltalk oder Python eher wie Zen ist; dein Geist fließt einfach mühelos mit der Aufgabe. Dies ist die Schönheit und der Wert der sprachlichen Einfachheit, und Smalltalk hat dies in Pik.

In Smalltalk wird OO auf seine grundlegendsten Konzepte von Klassen und Methoden, Metaklassen und Reflexion und vor allem Nachrichtenübermittlung destilliert. Smalltalk vermittelt Ihnen aufgrund seiner Objektreinheit und -konsistenz ein tiefgreifendes besseres Verständnis der objektorientierten Programmierung und ihrer optimalen Verwendung.

Die Einfachheit von Smalltalk macht es auch zu einer idealen Unterrichtssprache zum Erlernen der Programmierung, insbesondere wenn Sie keinen technischen Hintergrund haben. Die Einfachheit der Sprache und der Werkzeuge ermöglicht es Ihnen, Ihre Energie auf das Erlernen von Programmiertechniken zu konzentrieren, nicht auf Sprachformalitäten.

Wie funktioniert Smalltalk? Der bildbasierte Ansatz zur Programmierung

Smalltalks Hauptanspruch auf Ruhm ist sein bildbasierter Ansatz zur Softwareerstellung. Ein Image ist ein Snapshot des Arbeitsspeichers, der alle Objekte in Ihrer laufenden Anwendung oder Ihrem System enthält. Es kapselt den gesamten Ausführungsstatus Ihres Programms. Ein Bild kann auf der Festplatte gespeichert werden, und die Ausführung kann später genau dort fortgesetzt werden, wo Sie aufgehört haben!

Das Bild von Smalltalk klingt vielleicht etwas verrückt, aber tatsächlich ähnelt es stark etwas, das heute weit verbreitet ist: Systemabbilder in der Betriebssystemvirtualisierung, wie wir sie in VMware und VirtualBox finden. Sie müssen sich daran erinnern, dass Smalltalk ursprünglich ein eigenständiges Betriebssystem war, als es in den 1970er Jahren bei Xerox PARC erstellt wurde.

Das Bild von Smalltalk hat auch eine starke Ähnlichkeit mit dem DOM (Document Object Model) einer Webseite. Beachten Sie, dass eine Webanwendung im Wesentlichen ein System für sich ist, das im Webbrowser gespeichert ist und den direkten Zugriff auf das Dateisystem des Hosts und andere Ressourcen verweigert. Wenn ein Webbrowser geschlossen wird, kann der Status der dynamischen Website gespeichert oder zwischengespeichert werden, und wenn der Browser das nächste Mal fortgesetzt wird, kann die Website im Browser wiederhergestellt werden (mit einigen Einschränkungen).

Selbst die bescheidene Tabellenkalkulation haucht eng an das Bildkonzept heran. Es kapselt den gesamten Ausführungsstatus. Es kann nicht auf die Systemressourcen des Hosts zugreifen. Es kann gespeichert und wiederhergestellt werden. Und Sie sollten wissen, dass Tabellenkalkulationen immer noch verwendet werden, um anspruchsvolle Modelle und Anwendungen mit einer eigenen Sprache zu entwickeln.

Das Bildkonzept ist also weit verbreitet. Es ist eine so schöne Art, Software zu entwickeln, dass eine Version des Image-Konzepts für JavaScript im Lively-Kernel erstellt wurde.

Alles in Smalltalk ist ein Objekt

Keine Ausnahmen: Alles ist ein Objekt. Es gibt keine primitiven Datentypen. Es gibt keine Kontrollstrukturen wie Selektion und Iteration! Alles in Smalltalk wird durch Senden von Nachrichten an Objekte erledigt. Das macht Smalltalk so einfach, elegant und leicht zu erlernen. Das macht die Sprache syntaktisch so sauber.

Der folgende Codeausschnitt erweitert beispielsweise die Number-Klasse, um eine nicht rekursive faktorielle Operation zu unterstützen:

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

7 factorial printNl.

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

Hier ist ifTrue: eine Schlüsselwortnachricht, die an das Boolesche Objekt gesendet wird, das sich aus der Auswertung des Ausdrucks ergibt (self < 2). Das Argument für das Schlüsselwort message ist ein Codeblock (durch eckige Klammern gekennzeichnet). Eigentlich ist ifTrue: der erste Teil einer zweiteiligen Schlüsselwortnachricht, der zweite Teil ist ifFalse: .

Die unäre Nachricht new wird an die OrderedCollection-Klasse gesendet, um eine neue Sammlung zu erstellen. Die printNl-Nachricht wird an das Ergebnis (ein Objekt) des Sendens der my_factorial-Nachricht an die Nummer 7 gesendet. Das Ganze liest sich fast wie natürliche Sprache!

Computational reflection in Smalltalk

Reflection in Smalltalk ist besonders wertvoll als Mittel für ein Programm, um seine eigene Struktur und Berechnung zur Laufzeit zu überprüfen. Dies verleiht enorme Macht und ermöglicht es Programmen, sich mit neuen Klassen und Methoden zu erweitern oder zu fragen: „Wer hat mir diese Nachricht gesendet?“

Computational Reflection wird verwendet, um eine leistungsstarke Methode zur Fehlerbehandlung zu implementieren. Wenn einem Objekt eine Nachricht gesendet wird, die es nicht implementiert, erhält es eine doesNotUnderstand: message zusammen mit einer Verdinglichung der ursprünglichen Nachricht. Es gibt viele Dinge, die das Programm mit der doesNotUnderstand: -Nachricht tun kann, einschließlich der Erweiterung um neue Funktionen!

Das Bildkonzept und die Reflexion ermöglichen es Smalltalk auch, die Grenze zwischen Anwendung und IDE zu beseitigen. Alles, was Sie zum Entwickeln, Debuggen und Ausführen Ihrer Anwendung benötigen, ist im Image enthalten. Sie müssen Ihre Anwendungsumgebung niemals verlassen. Es ist ein völlig ganzheitlicher Ansatz für die Softwareentwicklung, der alles Zen-artiger und produktiver macht.

Smalltalks Renaissance

Die letzten 15 Jahre der Entwicklung in der Welt von Smalltalk haben die Sprache viel attraktiver gemacht.

Smalltalk ist jetzt für die Front-End-Webprogrammierung mit Amber Smalltalk verfügbar, das in JavaScript transpiliert wird. Die Entwicklung erfolgt komplett im Browser. Eines der erstaunlichen Dinge an Amber ist, dass beim Importieren einer JavaScript-Bibliothek deren Objekte wie Smalltalk-Objekte behandelt werden können.

Im Jahr 2002 wurde das Seaside Web Framework veröffentlicht und wurde zum beliebtesten Tool für die Webentwicklung in Smalltalk. Sein fortsetzungsbasierter Ansatz bot einen herkömmlichen „Call / Return“ -Mechanismus für Ihre Webanwendung. Es kann helfen, Probleme wie die doppelte Anfrage und Zurück-Taste Probleme zu lösen. Für seine Zeit ziemlich revolutionär und in anderen Web-Frameworks immer noch nicht üblich.

Das Pharo-Projekt begann 2008, um sich auf moderne Software-Engineering- und Entwicklungstechniken zu konzentrieren. Es hat Smalltalk viel weiter gebracht als das vorherige Open-Source-Projekt namens Squeak, das auf dem ehrwürdigen Smalltalk-80-Dialekt basierte. Das Pharo-Projekt hat auch die Erforschung einer neuen Art von IDE namens IDE Toolkit hervorgebracht. Es basiert auf der Idee, dass Ihre Programmierumgebung „formbar“ sein sollte, um Ihren Anforderungen zu entsprechen.

Letztes Jahr wurde das hoch angesehene Dolphin Smalltalk Open Source und bietet eine weitere wunderbare Option für Smalltalk-Fans. Dolphin Smalltalk wurde häufig für eine der besten Implementierungen der Smalltalk-IDE gelobt.

Das Smalltalk-Erbe: Programmieren zum Spaß machen

Wenn Sie die vielen Möglichkeiten der modernen Softwareentwicklung wie JVM, Eclipse IDE, Closures, „Live Coding“, MVC, TDD, VMware und sogar die einfache alte Web-App nutzen, denken Sie an ihre Ursprünge in Smalltalk zurück und haben Sie mehr Respekt vor dem, was Sie tun. Haben Sie eine größere Wertschätzung für die Sprachen, die Sie verwenden, ob Objective-C, Python, Ruby, Groovy, Scala, Dart oder Swift.

Die Arbeit mit der Sprache, die all diese großartigen Funktionen und Technologien hervorgebracht hat, bietet eine einzigartige Gelegenheit, Ihr Wissen, Ihre geistige Schärfe und Ihre Produktivität als Softwareentwickler erheblich zu verbessern. Das Wort „Spaß“ führt nicht immer zu Diskussionen über Software—Engineering, aber ich denke, dass Smalltalk — und seine OO-Brüder – die geringe kognitive Barriere und die einfache Programmierung bieten, die Software-Engineering zum Spaß machen können.



+