# Snap! (Programmiersprache)

Snap!, bis zu Version 3.1.1 unter dem Namen BYOB bekannt (englisch Abk. von Build Your Own Blocks deutsch: „Bau deine eigenen Blöcke“), ist eine auf Scratch aufbauende und von Scheme und damit auch Lisp inspirierte bildungsorientierte visuelle Programmiersprache inklusive ihrer Entwicklungsumgebung für fortgeschrittene Schüler und für die Erwachsenenbildung. Programmbefehle und Programmierumgebung sind englischsprachig.

## Kurzbeschreibung

Snap!/BYOB erweitert Scratch um komplexere und abstraktere Konzepte, die in Scratch zugunsten der Kindertauglichkeit bisher fehlten. Trotz der spielerischen Anmutung, die es sich aus seiner Scratch-Herkunft bewahrt hat, geht BYOB mit seinen anschaulichen und durchgängigen First-Class-Objekten und Meta-Programmierung weit über die Möglichkeiten traditioneller Programmier-Lern-Sprachen hinaus. Unter anderem kann der Lernbereich „Algorithmen und Datenstrukturen“ mit BYOB direkt und vollständig abgedeckt werden, während Programmierkenntnisse nebenbei erworben werden.
Snap!/BYOB ist Open Source und kommt im Sekundarstufen-II-Unterricht an deutschen Schulen und an amerikanischen und deutschen Universitäten zum Einsatz.
Die live in Unterricht und Vorlesung per Drag and Drop erstellbaren grafischen Programme ähneln Ablaufdiagrammen, sind aber direkt lauffähig, wodurch ein hoher Zeit- und Motivationsvorteil erzielt wird, da Redundanzen und Brüche zwischen Theorie und Praxis vermieden werden (Wegfall von: Diagramm → Pseudocode → lauffähiges Programm → Tipparbeit → Syntaxfehler → Testdurchläufe → Zeitverschwendung und Demotivation).

## Entstehung, Entwicklung und Verbreitung

Die Ursprünge von BYOB gehen auf das Freizeitprojekt Chirp zurück, das der deutsche Jurist und Softwareentwickler Jens Mönig ab 2008 als Modifikation von Scratch 1.2.1 publizierte und auf das der für sein UCB-Logo bekannte Berkeleyprofessor Brian Harvey aufmerksam wurde. Gemeinsam schufen sie daraus die für die Erwachsenenbildung geeignete Programmiersprache BYOB, um das in seinen Grundlagenvorlesungen eingesetzte Scheme abzulösen. Als Berater fungierten u. a.: John Maloney (der Chefentwickler von Scratch), Dan Ingalls, Mitchel Resnick und Mark Guzdial. Auch in einer mehrtägigen Zusammenkunft mit Alan Kay und seinem Team wurden BYOB/Snap! reflektiert. Durch die Bewilligung öffentlicher Forschungsgelder wurde aus dem Hobbyprojekt eine Vollzeittätigkeit, die schließlich zu einer kompletten von der Scratch-Technologiebasis unabhängigen Neuimplementierung von BYOB führte, das ab der Version 4.0 unter dem neuen Namen Snap! von der University of California, Berkeley publiziert wird und – in über 20 Sprachen übersetzt – direkt im Browser frei verfügbar ist.
BYOB/Snap! ist ein wesentliches Element der vielbeachteten Berkeley Grundlagenvorlesung The Beauty and Joy of Computing, die als Pilotprojekt für das neue Examen AP CS:Principles gewählt wurde auf dessen Basis die National Science Foundation ab 2015 10.000 Lehrer im Fach Informatik ausbilden will (CS10K). In diesem Zusammenhang wurden weite Teile der Vorlesung incl. der BYOB/Snap!-Teile als Moodle-Version und YouTube-Videos öffentlich gemacht, incl. exemplarischer Examensprüfungen.
Die hohe Popularität von Scratch bei seiner gleichzeitigen Nichteignung für den fortgeschrittenen Informatikunterricht hat eine weltweite Aufmerksamkeit von IT-Didaktikern auf BYOB/Snap! ausgelöst, da es dieses entscheidende Defizit von Scratch ausgleicht. Der deutsche Informatik-Didaktiker Eckart Modrow erkannte dieses Potenzial früh und trug durch Fachartikel, Vorlesungsskripte sowie Vorträge und Lehrerfortbildungen dazu bei, dass auch der deutsche Informatikunterricht von BYOB/Snap! profitieren kann. 2013 kam BYOB erstmals auch in deutschen Abiturprüfungen zum Einsatz.

## Erweiterungen gegenüber Scratch

Im Gegensatz zu Scratch, welches auf Einfachheit und sofortiges Verständnis durch Anfänger zielt, ist BYOB um programmiertechnisch komplexere Konzepte ergänzt. Da viele dieser Konzepte an die multi-paradigmen-Programmiersprache Scheme angelehnt sind, ermöglicht BYOB sowohl funktionale und prozedurale als auch objektorientierte und sogar Meta-Programmierung. Dazu werden dem Repertoire der Sprache nur wenige, aber sehr wirkmächtige Optionen hinzugefügt, wie das Erstellen von Blöcken, First-Class Funktionen oder Prozeduren (ihre mathematischen Grundlagen werden auch als Lambda-Kalkül bezeichnet), First-Class-Objekt-Listen (einschließlich Listen von Listen) und First Class Sprites. Mit prototypenbasierter Programmierung wird in BYOB Objektorientierung ohne abstraktes Klassenkonzept ermöglicht: Neue Objekte entstehen als Kopie vorhandener Objekte (sog. Cloning).

### BYOB macht First-Class-Objekte anschaulich

Die aus Scratch bekannten Spielfiguren (Sprites), Programm-Skripte, Listen und anderes, sind in BYOB First-Class-Objekte, die wie Zahlen und Zeichenketten in Variablen und Listen gespeichert werden können. Alle Operationen, die direkt auf diese Objekte angewendet werden, können auch auf die Variablen und Listenelemente angewendet werden, welche diese Objekte enthalten. Dabei sind einige Operationen wie say/sage (Sprechblase) und think/denke (Denkblase), die sich bei Scratch nur auf Zahlen, Texte oder Listen von diesen beziehen, auf alle Objekte anwendbar. Dadurch, dass Programmcode in Variablen und Listen gespeichert und ausgeführt werden kann, können neue Kontrollstrukturen und Datenstrukturen frei definiert werden, die gleichwertig zu den Grundstrukturen der Programmiersprache verwendbar sind, was Meta-Programmierung ermöglicht: BYOB lässt sich in BYOB erweitern und ist mit der gleichzeitigen visuellen Orientierung eine der anschaulichsten Programmiersprachen, in der dies möglich ist.
Damit ermöglicht es BYOB prinzipiell, jede denkbare Kontroll- und Datenstruktur zu lehren und zwar wahlweise sowohl ihre Implementierung, als auch ihre Anwendung. Nachvollziehbar wird dies bereits in den zwei Beispielen aus dem Titelbild des BYOB-Handbuches, das rechts dargestellt ist. Es enthält zwei Gruppen von Bildern, die jeweils zusammenhängend ein Beispiel bilden:

#### First-Class-Objekte benutzen

Die gelbe Spielfigur links unten im Bild führt den sage/say-Block auf einen Listenblock aus, der eine Liste mit den zwei Spielfiguren Sprite1 und Sprite2 erzeugt: Dadurch erscheint die Liste mit den Spielfiguren in der Sprechblase.

#### Kontrollstrukturen definieren

BYOB umfasst keinen Programmierbefehl-Block für eine For-Schleife. Jedoch kann diese Kontrollstruktur leicht definiert und dann so verwendet werden, als sei der For-Block ein normaler Bestandteil der Programmiersprache, wie das Definitionsskript oben links im Bild zeigt. In dessen Kopfblock werden die lokale Übergabevariablen i, start, end und action festgelegt. i ist durch den Pfeil nach oben als Variablenübergabevariable gekennzeichnet, welche die Laufvariable der Schleife aufnimmt. Die Wertübergabevariablen start und end sind mit 1 und 10 vordefiniert, wenn bei der Verwendung des For-Schleifen-Blocks keine anderen Angaben eingesetzt werden. Der aktive Programmcode, der im Innern einer For-Schleife ausgeführt werden soll, wird der Variable action übergeben und weiter unten im Definitionsskript als Parameter des run-Blocks ausgeführt. Mit Hilfe des zum BYOB-Sprachbestandteil gehörenden repeat-Blocks wird eine For-Schleife nachgebaut. Im Beispielskript rechts wird der so entstandene Block der For-Schleife zweimal ineinander verschachtelt verwendet: Bei Ausführung zählt die gelbe Spielfigur rechts zehnmal von 3 bis 5.

## Einschränkungen gegenüber Scratch

Bis zum Auseinanderdriften der Entwicklungsplattform (mit Scratch 2.0/BYOB 4.0) basierte BYOB auf dem in Squeak implementierten Quellcode von Scratch und war zu diesem aufwärtskompatibel. Eine wesentliche Beschränkung von BYOB, wie auch aller anderen Scratch-Modifikationen, war dabei das Fehlen eines webfähigen Abspielers für die mit ihm geschaffenen Projekte. Damit fehlte – neben allen anderen hierzu notwendigen Ressourcen – auch die Technologiebasis für eine mit Scratch vergleichbare Online-Community-Plattform. Wie traditionelle Programmier-Lern-Umgebungen setzte BYOB hier auf eine rein lokale Verfügbarkeit.
BYOB 3.x Projekte können nur nach einer manuellen Umwandlung in Scratch-Projekte online publiziert werden, wobei natürlich auf alle BYOB-Fähigkeiten verzichtet werden muss. Wie in Scratch 2.0 sind jedoch in BYOB 4.0 nicht nur die Projekte im Webbrowser abspielbar, sondern zudem die komplette Entwicklungsumgebung ohne Installation online verfügbar. Beide Systeme sind heute (Anfang 2013) im Prereleasestadium nutzbar. Ob darauf basierend für BYOB 4.0 (bzw. Snap! s. u.) auch eine Online-Plattform geschaffen und etabliert werden wird, wie für Scratch, ist unbekannt.

## BYOB 5.0/Snap!

Im Gegensatz zu den meisten anderen Modifikationen basiert die kommende Version nicht mehr auf dem Quellcode von Scratch selbst, sondern wurde vollständig neu programmiert, da – wie bei Scratch 2.0 – eine komplette Onlineverfügbarkeit von Projekt-Player und Entwicklungsumgebung angestrebt wird.

### Aus BYOB 5.0 wird Snap!

Der neue Name Snap!, der ab BYOB 5.0 verwendet wird, leitet sich lautmalerisch vom einschnappen der Programmierbausteine ab, wenn sie miteinander zu den Programm-Skripten eines Snap!-Projektes verbunden werden.
Hintergrund dieser Umbenennung ist, dass BYOB eine weitere, im englischen sogar bekanntere Bedeutung als Build Your Own Blocks (Bau deine eigenen Blöcke) hat. Das Verwechslungsrisiko mit bring your own beer/bottle („Bring Deine Flasche/Dein Bier selbst mit“, siehe Buddelparty) machte das Akronym für eine Anwendung im Bildungsbereich letztlich unattraktiv.

### Technologie und Onlineverfügbarkeit

Wie bei Scratch 2.0 ist die Entwicklungsumgebung von Snap! und damit auch der Player ohne Installation direkt im Webbrowser verfügbar. Hierzu wurde Squeak Smalltalk, die bisher gemeinsame Grundlage von Scratch und BYOB, verlassen und – wie auch bei Scratch 2.0 – eine komplette Neuentwicklung auf einer webfähigen Plattform durchgeführt, die ohne Installation in gängigen Webbrowsern laufen soll. Während Scratch 2.0 jedoch auf Flash basiert, wurde für Snap! als Plattform HTML5-Canvas und JavaScript verwendet. Auf dieser Basis wurde das aus Squeak bekannte Morphic neu implementiert und zur graphischen Grundlagenbibliothek von Snap!.

### Alternative zu Scratch auf iPhone/iPad/iPod

Damit stellt Snap! eine Alternative zu Scratch auf den mobilen Geräten von Apple (iPhone/iPad/iPod) und anderen Plattformen dar, auf denen Java und Flash nicht unterstützt werden und somit weder der Scratch-Projekt-Abspieler von Scratch 1.x, noch die Entwicklungsumgebung von Scratch 2.x ausführbar sind. Allerdings liegt die Snap! erst im Alphastadium vor und ist noch nicht voll kompatibel zu Scratch.

### Veröffentlichung

Snap! steht seit Beginn seiner Entwicklung 2011 öffentlich im Netz zur Verfügung und ist aktuell (Februar 2013) weitgehend nutzbar, incl. Sprachversionen in Deutsch und einem knappen Dutzend anderer Sprachen. Der aktuelle Status von Snap! wird von den Entwicklern als Alpha angegeben. Mit Hinzukommen eines Cloud-Servers soll im Jahr 2013 ein Betastadium eingeleitet werden und dann kurzfristig ein erster offizieller Fertigstellungspunkt definiert werden, bei dem man – aufgrund der permanenten Nutzbarkeit bereits vorher – jedoch nicht von einem richtigen Veröffentlichungszeitpunkt sprechen kann. Ein offizielles englischsprachiges Handbuch zu Snap! wurde Anfang 2018 herausgegeben.

## Kooperation zwischen Scratch- und BYOB-Entwicklung

Durch eine intensive Kooperation zwischen Scratch- und BYOB-Entwicklern fließen regelmäßig in BYOB erprobte Konzepte in Scratch ein, wie z. B. die Scratch-Listen, die lange vor ihrer Einführung in Scratch bereits in BYOB implementiert waren. Auch die Fähigkeit, eigene neue Programmierbausteine definieren zu können, wird – allerdings in vereinfachter Form, ohne Ein- und Ausgabeparameter – in der neuen Version Scratch 2.0 einfließen. Während im kleineren BYOB-Entwicklerteam der schnellen Entscheidung für Innovationen ein höherer Stellenwert zugeschrieben wird, setzt das größere Scratch-Entwicklerteam auf längere praktische Evaluierung, bevor ein neues Konzept offiziell eingeführt wird, was – aufgrund der jüngeren Zielgruppe und der wesentlich größeren Nutzergemeinde von Scratch – sinnvoll ist. Da für BYOB 4.0 mit JavaScript und HTML5 eine weniger etablierte, aber zukunftsträchtigere Plattform gewählt wurde, lässt sich vermuten, dass es auch in diesem Fall einen Einfluss auf zukünftige Scratch-Versionen nach 2.0 haben könnte, speziell, wenn die für Scratch 2.0 gewählte etablierte Plattform Flash tatsächlich rückläufig und damit auf immer weniger Systemen verfügbar sein sollte, worauf bereits heute einiges hindeutet.