Blog - Kategorie Scala

Scala Entwicklungsumgebung aufsetzen

Veröffentlicht am 25. January 2016

Ich möchte in nächster Zeit hier einige über die funktionale Programmiersprache Scala schreiben. Um darin entwickeln zu können, muss aber zunächst die “Toolchain” aufgesetzt werden, inklusive JRE (Java Laufzeitumgebung), SBT (Scala Build Tool) und Integration in einer IDE (hier: Eclipse).

In diesem kurzen Tutorial möchte ich daher kurz beschreiben, wie man alle notwendige Software installiert, um mit der Scala-Programmierung loslegen zu können.

Kategorie: Scala

Scala-Kurs auf Coursera

Veröffentlicht am 25. November 2012

Scala-Kurs auf Coursera

Ich habe kürzlich die Gelegenheit genutzt, an einem Online-Kurs für die Programmiersprache Scala auf der Plattform Coursera teilzunhemen. Der Kurs wurde gehalten von dem Computerwissenschaftler Martin Odersky, dem “Erfinder” von Scala, der außerdem eine wichtige Rolle bei der Entwicklung von Java gespielt hat.

Zunächst kurz etwas zu Coursera. Coursera ist ein Plattform für E-Learning, bei der verschiedene Universitäten der ganzen Welt frei zugängliche Online-Kurse anbieten. Die Spanne an Fachbereichen ist sehr groß; man findet interessante Kurse aus Informatik, Mathematik, Medizin, Jura, Geschichte, Biologie, Wirtschaftslehre und vielen mehr.

Die Plattform bietet die Möglichkeit, wöchentlich Lehrvideos der Dozenten zu den jeweiligen Kursen anzusehen und heruterzuladen, sowie Übungsaufgaben zu den Lehrinhalten zu bearbeiten und die Ergebnisse hochzuladen (natürlich nicht mit persönlicher, sondern maschineller Rückmeldung). Außerdem gibt es Foren, in denen die Studenten untereinander oder mit den Dozenten über die Lehrinhalte und Übungsaufgabene sprechen können. Ein so genannter “Honor Code” unter den Studenten ruft dazu auf, keine Lösungen zu Übungsaufgaben öffentlich zu machen, um andere Studenten nicht zu “spoilern”.

Insgesamt als eine sehr gelungene und angenehme Plattform für E-Learning, die ich nur empfehlen kann!

Zu Scala muss man erklären, dass es sich hierbei um eine funktionale Programmiersprachen handelt. Das heißt, die Sprache verwendet nicht das klassische imperative/objektorientierte Programmierparadigma, wie man es von Java oder C++ gewohnt ist, sondern bietet dem Programmierer die Möglichkeit, seine Ziele über andere Programmierkonzepte zu erreichen.

Das wichtigste an der funktionalen Programmierung von Scala ist das Konzept, möglichst alle Programmlogik als mathematische Funktionen aufzufassen, also:

  • Es gibt keine (kaum) globalen Variablen
  • Das Ergebnis einer Funktion hängt nur von ihren Parametern ab, nicht vom aktuellen Zustand des restlichen Programms
  • Jede Funktion ist im wesentlichen ein Ausdruck, der den Rückgabewert aus den Parametern berechnet
  • Komplexere Berechnung werden nicht durch Kontrollstrukturen (for/while) und iterative Rechenschritte durchgeführt, sondern durch Rekursion und Hilfsfunktionen
  • Alle Daten sind immutable (unveränderlich), das heißt, ein Funktionsausruf ändert die Eingabewerte nie, sondern agiert nur durch seinen Rückgabewert (was Methoden mit Rückgabetyp “void” sinnlos macht)
  • Funktionen sind Objekte. Es kann also Funktionen geben, die andere Funktionen als Parameter übergeben bekommen (sog. “Funktoren” oder Funktionen höherer Ordnung)
  • Es gibt Ausdrücke, die nicht zur Definitionszeit ausgewertet werden, sondern erst zur Zeit, wo ihr Wert abgefragt wird (um Berechnungszeit bei ungenutzten Werten zu sparen)

Dieses Konzept ist für einen Programmierer, der immer nur imperativ/objektorientiert programmiert hat, nicht leicht zu verinnerlichen, aber es bietet eine Reihe von Vorteilen:

  • Einfaches Aufteilen von Berechnungen auf mehrere Kerne/Prozessoren/Computer, da es keine globalen Stati gibt, die synchron gehalten werden müssen. Es kann also eine hohe Parallelisierungsfähigkeit erreicht werden, falls sich das Problem in parallel ausführbare Teilprobleme zerlegen lässt
  • Bei geschickter Programmieung hohe Performanz
  • Leichtes Realisieren einfacher mathematischer Probleme möglich, die bei imperativer Programmierung umständlich umzusetzen wären
  • Erlaubt Einsatz von Funktionen höherer Ordnung, was bei Sprachen wie Java nur schwer umgesetzt werden kann (siehe Event-Handler, oder Callback-Klassen)

Soviel zunächst zum funktionalen Programmierparadigma. Scala selbst hat noch einige Spezialitäten. Zum einen ist da die große Nähe zur Sprache Java: Scala-Code wird in das gleich Bytecode Format kompiliert wie Java. Daher lassen sich Scala-Programme und -Module direkt in Java einbinden und verwenden. Zudem wird es dadurch ebenso Plattformunabhängig wie es Java ist.

Es gibt außerdem ein schönes Plugin für die Eclipse-IDE, welches die Verwendung von Scala in die IDE einbindet.

Zuletzt möchte ich noch einige Wort zum Kurs von Martin Odersky verlieren. Man merkt, dass der Dozent sich große Mühe gibt, “seine” Programmiersprache gut rüberzubringen und den Studenten das Konzept der funktionalen Programmierung zu vermitteln.

Die Programmierbeispiele beginnen ganz von vorne bei “Hello World” (was sich in Scala durchaus schon deutlich von Java unterscheidet) und arbeitet sich langsam, aber stetig in die verschiedenen Konzepte von Scala ein.

Es sind wöchentliche Übungsaufgaben fällig, die als Eclipse-Projekt heruntergeladen werden können und bereits mit einem Code-Grundgerüst und verschiedenen JUnit-Testklassen ausgestattet sind. Die Stundenten müssen meist einige zentrale Funktionen des Übungsprogrammes implementieren und damit die neu gelernte Inhaltes des Kurses anwenden. Wurden die Aufgaben gelöst, können die Lösungen über ein Tool auf den Coursera-Server hochgeladen werden, wo sie automatisch korrigiert und mit bei zu 10 Punkten bewertet werden.

Die Übungsaufgaben beinhalten zwar oft nur wenige Zeilen Code, die geschrieben werden müssen, doch das funktionale Programmieren erfordert - gerade bei den fortgeschrittenen Aufgaben - ein genaues Nachdanken und bringt auch schon mal gestandene Java-Programmierer ins Schwitzen. Letztendlich sind aber alle Aufgaben mit etwas Nachdenken zu lösen und bringen oft den “Aha”-Effekt, wenn man die Lösung endlich gefunden hat.

Der Kurs ist zwar schon zuende, aber so wie ich das verstanden habe, werden die Kurse auf Coursera regelmäßig wiederholt.

Wer also Interessan funktionaler Programmierung hat, dem kann ich eine absolute Empfehlung für den Kurs aussprechen!

Kategorie: Scala
Schlagworte: