Wir nutzen Cookies, um das allgemeine Benutzerelebnis zu verbessern. Mit der Nutzung unseres Wikis stimmst du der Nutzung von Cookies zu.

Vergleich von blockbasierten Programmiersprachen

Version vom 28. September 2016, 10:39 Uhr von LiFaytheGoblin (Diskussion | Beiträge) (Schützte „Vergleich von blockbasierten Programmiersprachen“: wiki wednesday ([Bearbeiten=Nur Administratoren erlauben] (bis 12. Oktober 2016, 10:39 Uhr (UTC)) [Verschieben=Nur Administratoren erlauben] (bis 12. Oktober 2016, 10:39 Uhr (UTC))))
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Dieser Artikel vergleicht blockbasierte Programmiersprachen, einerseits als Alternativen zu Scratch, andererseits als Möglichkeiten zum Umstieg auf eine Sprache mit zusätzlichen Features.

Sprachen im Vergleich

Editor von Scratch 2.0
Offline-Editor von Scratch 1.4
Editor von Snap!
Editor von ScratchJr
Skripteditor von Pocket Code
Editor von Stencyl
Scratch 2.0
Flash-basiert, große Community, eingeschränkter Sprachumfang
Scratch 1.4
das letzte Scratch mit der Squeak-Engine vor der Einführung von Scratch 2.0
Snap!
Implementierung in Javascript, Sprache gegenüber Scratch 2.0 erweitert und besser erweiterbar
Stencyl
Professionelle Entwicklungsumgebung für Spieleentwicklung mit blockbasierter Sprache
Pocket Code
Blockbasierte Programmiersprache, läuft auf Mobilgeräten
ScratchJr
Reduziertes Scratch für 5-7-jährige, läuft auf Mobilgeräten

Performance, Sprachumfang und Einschränkungen

Scratch 2.0 und Scratch 1.4 bieten einen eingeschränkten Befehlssatz, welcher das Programmieren zwar sehr übersichtlich macht, einzelne Aufgaben aber extrem kompliziert. Die Behandlung von Text ist besonders eingeschränkt, so gibt es keine Befehle zum Drucken von Text oder zur Unterscheidung von Groß/Kleinbuchstaben. Die grafische Ausgabe ist mit 480 mal 360 Pixel fixiert, was einige Anwendungen stark einschränkt. Code von größeren Projekten kann nur schwer strukturiert werden, da Aufrufe von Funktionen anderer Objekte mit Rückgabewert fehlen, ebenso wie lokale Variablen in Funktionen. Scratch ist bei der Ausführung von Programmen durch automatische Screen-Refreshes recht beschaulich, dies kann jedoch bei Scratch 2.0 durch Verwendung von Custom-Blöcken überwunden werden sodass eine akzeptable Performance erreicht wird. Diese ist allerdings trotz der vielen Strukuturen zur parallelen Programmausführung in Scratch auf eine Uniprozessoranwendung beschränkt.

Snap! bleibt weitgehend kompatibel zu den Scratch-Befehlen und erweitert diese zum Beispiel um Befehle zur besseren Stringverarbeitung. Über seine Erweiterbarkeit bietet Snap! somit eine Lösung für die meisten Einschränkungen bei Scratch. Unterprogramme können mit lokalen Variablen arbeiten und Rückgabewerte liefern und global definiert werden. Unter der Haube ist Snap! (wie der Vorläufer BYOB) eine grafische Implementationen der Listensprache SchemeWikipedia.jpg. Elemente wie Daten, Listen, Sprites und Code sind sogenannte "first-class"-Objekte, das heißt sie können beliebig als Argument an Funktionen übergeben, von diesen retourniert oder in Datenstrukturen gespeichert werden. Damit lassen sich z. B. neue Kontrollstrukturen implementieren oder eine rein funktionale Sprache aufbauen, was weit über Scratch hinausgeht. Derzeit fehlen bei Snap! noch wichtige Funktionen für die Objektorientierte Programmierung wie Zugriff auf andere Objekte oder Prototyping. Die Bühnengröße ist bei Snap! einstellbar, was umfangreichere Projekte oder Spiele ermöglichen würde, Snap!-Programme sind allerdings im Vergleich zu Scratch 2.0 zumeist deutlich langsamer (Ausnahme beim Erzeugen von Abdrücken von Figuren, da ist Snap! schneller). Ein detaillierter Performancevergleich findet sich im Artikel Geschwindigkeitsvergleich von blockbasierten Sprachen.

ScratchJr bietet einen stark eingeschränkten Befehlssatz. Befehle werden nur sehr langsam in einem fixen Takt ausgeführt.

Stencyl implementiert ein objektorientiertes Sprachkonzept welches dem erfahrenen Programmierer sehr viele Möglichkeiten bietet. Die Bildschirmgröße ist anpassbar. Stencyl ist als System zum Programmieren von Spielen konzipiert. Projekte in Stencyl werden in sehr performante ausführbare Programme übersetzt.

Pocket Code hat einen im Vergleich zu Scratch eingeschränkten Befehlssatz, bietet dafür aber Funktionen zum Zugriff auf die Sensoren des Mobilgeräts. Pocket Code-Programme laufen nicht besonders schnell, ein weiteres Problem ist das Fehlen von Funktionen zur Kollisionserkennung zwischen Objekten oder zwischen Objekt und einer Farbe, was bei vielen Projekten das Ausprogrammieren einer solchen Funktion erfordert.

Unterstützte Plattformen

Scratch 2.0 läuft in jedem gängigen Webbrowser, erfordert aber Adobe Flash was mobile Plattformen wie iOS komplett ausschließt und bei Android die nachträgliche Installation von Flash und dem Dolphin Browser erfordert. Mit Adobe Air kann der Scratch-Editor auch offline auf Systemen mit Adobe Flash ausgeführt werden. Mit dem Phosphorus-Player können Scratch-Projekte auch auf mobilen Plattformen abgespielt werden, es sind derzeit aber noch nicht alle Funktionen in Phosphorus abgebildet.

ScratchJr läuft auf mobilen Plattformen, erfordert aber das Öffnen der App zum Abspielen eines Projekts.

Snap! ist in Javascript implementiert und läuft somit auf jeder gängigen Plattform, einschließlich Android und iOS.

Stencyl erlaubt ein Cross-Plattform-Deployment der Projekte, welches Web, Windows, Linux, MacOS, und die mobilen Plattformen Android und iOS unterstützt. Diese Features erfordern aber eine professionelle Version von Stencyl welche mit ca. 200€ pro Jahr vergleichsweise teuer ist. In der kostenfreien Version von Stencyl ist nur ein Export auf Adobe Flash möglich.

Pocket Code läuft derzeit nur auf Android Geräten (Tablets und Smartphones). Pocket Code erlaubt das Erstellen von Android Apps welche als App installiert werden können.

Editor

Der Editor von Scratch 2.0 ist sehr benutzerfreundlich. Besonders ausgereift sind der Blockeditor und das Bearbeiten von Grafiken direkt in Scratch, welches Rastergrafik und Vektorgrafik ermöglicht. Der Klangeditor ist weniger elaboriert, bietet aber die wichtigsten Funktionen zum Verändern der Lautstärke und zum Beschneiden von Klängen.

Scratch 1.4 und Snap! sind beim Block-Editor vergleichbar, der grafische Editor ist aber wesentlich einfacher gehalten, so dass das Bearbeiten von Grafiken hier besser durch ein externes Programm erfolgen sollte. Vektorgrafiken können weder erstellt noch bearbeitet werden. Bei Snap! ist das Hochladen einer svg-Datei zwar möglich, die Darstellung wird aber laut einer Warning nach dem Hochladen nicht von jedem Browser unterstützt.

Bei Snap! leidet die Übersichtlichkeit zusätzlich daran dass zum Beispiel Skripte für Unterprogramme in den Variablen zu finden sind und dass das Veröffenlichen von Projekten im Speichern/Laden-Dialog versteckt ist.

Stencyl bietet eine Unmenge von Menus und Objekttypen, welche eine längere Beschäftigung mit dem Interface erfordern. Es gibt keine integrierten Editoren für Musik oder Bilder, diese können allerdings über ein Drag- and Drop-Interface schnell einem Projekt hinzufügt werden.

Der Pocket Code-Editor ist für mobile Geräte konzipiert und setzt somit auf eine Touch-Schnittstelle anstatt einer mit der Maus zu bedienenden Oberfläche. Durch die kleine Auflösung ist man in der Übersicht gegenüber eines Desktopsystems eingeschränkt, die Integration in das Smartphone ist aber vergleichsweise gut gelungen, was auch für den grafischen Editor gilt. Leider war der Pocket Code-Editor auf mehreren gestesteten Systemen nicht stabil und stürzte gelegentlich ab.

Komplexität

ScratchJr ist am einfachsten gehalten, was sich durch die sehr junge Zielgruppe ergibt. Lesefähigkeit wird nicht benötigt.

Scratch 2.0 und Scratch 1.4 sind aber trotz der zusätzlichen Blöcke nur wenig komplexer sodass sich ein einfacher Umstieg von ScratchJr ergibt. Um Scratch auszureizen, sind aber viele nicht von vorneherein offensichtliche Tricks nötig (zum Beispiel das Vergrößern einer Figur vor dem Positionieren um die Randeinschränkung aufzuheben), was Programme vor allem für andere schwer lesbar macht. Die fehlenden Möglichkeiten zur funktionsorientierten oder objektorientierten Strukturierung trägt das ihre dazu bei.

Pocket Code hat einen sehr übersichtlichen Befehlssatz und ist dadurch einfacher als Scratch. Längere Programme sind aber durch die reduzierte Bildschirmgröße schwer nachvollziehbar.

Snap! ist durch die zusätzlichen Blöcke und die Eigenheiten des Editors als etwas komplexer als Scratch einzuordnen.

Stencyl bietet mit Abstand die meisten Funktionen was es trotz der blockbasierten Programmiersprache als Einsteigersprache unbrauchbar macht.

Lizenz

Scratch 1.4, Scratch 2.0, Snap! und Pocket Code stehen unter einer Open Source Lizenz. Die veröffentlichten Sourcen von Scratch 2.0 erlauben jedoch anders als die veröffentlichte Scratchversion nicht das automatische Laden und Ausführen eines Programms, so dass Mods von Scratch 2.0 derzeit nur eingeschränkte Brauchbarkeit aufweisen.

ScratchJr ist gratis für Android und iOS verfügbar, steht jedoch derzeit nicht unter einer Open Source Lizenz.

Der Stencyl-Editor und die Exportfunktion nach Flash ist gratis. Um ein Spiel auf andere Plattformen zu exportieren ist allerdings eine Version mit einer jährlichen Lizenzgebühr von 99$ (Desktop) bzw. 199$ (Desktop, Android und iOS) notwendig.

Community

Blockbasierte Programmiersprachen haben gegenüber textbasierten Programmiersprachen einen entscheidenden Nachteil: Algorithmen und Programmteile können nicht einfach über textbasierte Foren geteilt werden. Daher stellen Möglichkeiten zum Finden von Beispielprogrammen und zum Remixen von Programmen ein sehr wichtiges Feature dar.

Scratch bietet die mit Abstand größte Community mit Foren, Wikis und mehreren Millionen veröffentlichten durchsuchbaren Projekten. Seit der Veröffentlichung von Scratch 2.0 wurden allerdings fast alle Resourcen auf Scratch 2.0 ausgerichtet, sodass Scratch 1.4 hier nun ein Defizit aufweist. Das Veröffentlichen von Projekten in der Cloud ist aber mit Scratch 1.4 weiterhin problemlos möglich.

Snap! bietet ein Veröffentlichung auf der Cloud an, allerdings sind veröffentlichte Projekte nicht einfach auffindbar. Somit ist man bei Snap! auf ein paar wenige Beispielprogramme angewiesen. Neue Projekte können auch nur schwer in der Snap!-Community beworben werden, ebenso fehlt ein Wiki. Anstatt eines Forums gibt es derzeit nur einen einzelnen Userthread im Scratch-Forum welcher Snap! gewidmet ist.

Stencyl hat durch über 100000 registrierte Benutzer eine gute Nutzerbasis welche sich über ein Forum austauschen.

Pocket Code hat wie Snap eine Startseite auf der veröffentlichte Projekte zu finden sind. Diese könnnen heruntergeladen und der Code analysiert oder in einer lokalen Kopie verändert werden.

ScratchJr hat aufgrund der Fokussierung auf sehr junge Kinder keine Community-Funktionen.

Fazit

Von den untersuchten Sprachen ist keine perfekt.

Wer am Mobiltelefon programmieren möchte, ein Android Phone sein eigen nennt und die Grundschule hinter sich hat wählt wohl Pocket Code, ansonsten ScratchJr.

Wer Programme für Mobiltelefone schreiben will, kann zwischen Snap! und Pocket Code wählen. Snap! Programme laufen über den Browser auch auf iOS.

Zum Einstieg in das Programmieren ist Scratch 2.0, Snap! und Pocket Code geeignet, wobei Scratch hier wohl das benutzerfreundlichste Interface bietet.

Die Bedeutung von Scratch 1.4 schwindet da mit der Umstellung der Scratch-Webseite auch eine gute Million Beispielprogramme nach Scratch 2.0 konvertiert wurden und somit für Scratch 1.4 nicht mehr zur Verfügung stehen. Eine Zeit lang wird Scratch 1.4 aufgrund des ressourcenschonenden Offlineeditors noch auf Mini-Linux-Systemen wie dem Raspberry Pi zu finden sein.

Will man sich von Scratch aus weiterentwickeln, so wird man wohl zu Snap! oder Stencyl greifen, wobei die fehlenden Communityfeatures von Snap! und die Preisgestaltung von Stencyl schmerzen. Eine Alternative sind hier wohl textbasierte Programmiersprachen wie zum Beispiel Python oder andere Spiele-Engines wie Unity, welche bereits in der freien Version eine bessere Plattformunterstützung als Scratch aufweisen.

Andere blockbasierte Programmiersprachen

Abgesehen von den hier vorgestellten Programmiersprachen gibt es noch eine Reihe weiterer blockbasierten Programmiersprachen, welche aufgrund stark eingeschränkter Funktionialität, Fokussierung auf eine einzelne Anwendung oder mangelnder Verfügbarkeit hier nicht im Detail behandelt wurden.

GP (Programmiersprache)
Vielversprechende Programmiersprache, bis jetzt gibt es aber noch keine offizielle Release
Blockly
Kein eigenständiges System sondern Bibliothek von Google zur Integration von blockbasiertem Coding in anderen Systemen
Lego Mindstorms
Fokussiert auf Robotikanwendung mit dem Lego Mindstrom NXT Brick als Hardwareplattform
Enchanting (Scratch Modifikation)
Fokussiert auf Robotikanwendung mit dem Lego Mindstrom NXT Brick als Hardwareplattform
Chirp
Nur mehr historisch als Vorläufer von BYOB interessant, nur mehr in einem Archiv verfügbar
BYOB
Nur mehr historisch als Vorläufer von Snap! interessant
Beetle Blocks
Fokussiert auf 3D-Modellierung
BlocksCAD
Fokussiert auf 3D-Modellierung
ZappedTech! (Scratch Modifikation)
Funktionalitätszuwachs gegenüber Scratch gering, Erlaubt derzeit noch kein automatisches Abspielen von Projekten
Hopscotch
Scratch-ähnliche blockbasierte Programmiersprache auf mobilen Apple-Geräten
MIT App Inventor
Ursprünglich vom US-amerikanischen Unternehmen Google Inc. entwickelte Entwicklungsumgebung, um mit grafischen Blöcken Anwendungen für Android zu entwickeln. App Inventor steht unter einer quelloffenen Lizenz, der Code wird derzeit vor allem vom MIT gepflegt.

Ein humorvoller Vergleich

Scratch ist wie Apple Mac OS. Es wird vom Scratch Team streng gemanaged, bietet aber genau das was die meisten User haben wollen. Ein Ausbrechen aus dem Vorgegebenen ist nur schwer möglich. Das was da ist funktioniert bestens und es ist alles durchgestylt.

Snap! ist wie Linux. Das System ist vollständig Open Source und man kann sich jederzeit seine eigene Version basteln. Alles ist möglich, aber für viele Dinge muss man "nur schnell" einen Javascript-Block zusammenhacken, was die meisten User überfordert. Das Design ist funktionell und es wird keine Notwendigkeit gesehen es zum Beispiel mit einer Projektseite zu verschönern.

Und dann gibt es noch Java. Java ist in diesem Vergleich Microsoft Windows. Es ist nicht wirklich bequem anzuwenden, wird aber von der Mehrzahl verwendet. Java wird vielerorts als Anfängerprogrammiersprache angeboten und ist neben C die am meisten verwendete Programmiersprache der Welt.

Siehe auch



Code zum Einbinden ins Forum:
[wiki=de:Vergleich von blockbasierten Programmiersprachen]Vergleich von blockbasierten Programmiersprachen[/wiki]