Scala im Experten-Check

6 Antworten auf die Frage: Weshalb Scala und nicht Java?

Redaktion JAXenter

Im Themen-Dossier Scala gehen wir der Frage nach, wo die populäre JVM-Sprache sich derzeit verortet und wohin die Reise geht. Im Experten-Check vermitteln uns sechs erfahrene Scala-Entwickler ihre Sichtweise auf Scala. In Teil 1 geht es um die Frage, was die Faszination Scala ausmacht, und was Scala denn eigentlich Java voraus hat.

Durchstarten-mit-Scala_Auflage2_2400x_rgb-220x315Kommentieren und gewinnen!
Diskutieren Sie mit! Unter allen konstruktiven Kommentaren zum Experten-Check Scala verlosen wir drei Exemplare des Buches „Durchstarten mit Scala von Heiko Seeberger.

Ihre Meinung zählt!

Weshalb bist du ein Scala-Entwickler? Was fasziniert dich persönlich an der Sprache?

Heiko Seeberger: Mich fasziniert an Scala insbesondere, dass man – wie in wenigen anderen Sprachen – Code schreiben kann, der gleichzeitig knapp und verständlich ist. Am besten sieht man das anhand von Case Classes, die unveränderliche Value Objects mit “eingebauten” Implementierungen von equals und hashCode darstellen und Pattern Matching – quasi „switch on steroids”. In Akka werden diese Features verwendet, um festzulegen, wie ein Aktor auf Nachrichten reagiert:


```
case class User(id: Long, name: String, email: Email)

case object GetUsers
case class AddUser(name: String, email: Email)
case class RemoveUser(id: Long)

class UserRepository extends Actor {
  ...
  override def receive = {
    case GetUsers      => // do stuff
    case AddUser(n, e) => // do stuff
    case RemoveUser(i) => // do stuff
  }
  ...
}
```

Würde man dieses Beispiel in Java implementieren, dann müsste man statt der einzeiligen Case Classes vielzeilige Klassen mit Feldern, Gettern und vor allem mit Implementierungen für equals und hashCode schreiben. Und statt Pattern Matching müsste man mit instanceof und Type Casts arbeiten. Auch wenn einem moderne IDEs einige Arbeit abnehmen, bleibt der resultierende Code doch wesentlich umfangreicher und unklarer, der Fokus liegt bei Java nicht so scharf auf dem eigentlichen “Was”.

Die Scala-Experten

heiko seeberger

Heiko Seeberger: Fellow bei codecentric. Autor des Buches „Durchstarten mit Scala.“ @hseeberger

Julian Tournay: CTO at @mfg_labs und Autor von jto/validation

Julian Tournay: CTO at @mfg_labs und Autor von jto/validation

daniela sfregola

Daniela Sfregola: Bloggerin und Tech Leader bei PayTouch. @DanielaSfregola

ivan

Ivan Kusalic: Software Engineer bei HERE. Organisator des Berliner Software Craftsmanship meetup, SoCraTes. @ikusalic

Daniel Westheide

Daniel Westheide: Consultant bei innoQ. Autor von „The Neophyte’s Guide to Scala.“ @kaffeecoder

markus Hauck

Markus Hauck: IT Consultant und Scala Trainer bei codecentric.

Daniel Westheide: Ursprünglich interessierte mich Scala, weil ich damals schon in Java angefangen hatte, in einem etwas funktionaleren Stil zu programmieren, irgendwann aber keine Lust mehr auf den dafür notwendigen Boilerplate hatte. Was mich an Scala besonders fasziniert ist das mächtige Typsystem, welches es so in kaum einer Sprache, die sich im Mainstream bewegt, gibt.

Zwei Interessante Beispiele: Mithilfe von Higher-kinded Types und Typeclasses ist es mir zum Beispiel möglich, über Spark-RDDs (eine über mehrere Rechner in einem Cluster verteilte Collection) und Scala-Collections zu abstrahieren – meine Anwendungslogik weiß dann nichts davon, ob ich sie in einem Spark-Cluster auf einem RDD ausführe oder lokal auf einer Maschine auf einer kleinen Scala-Collection. Sogenannte Phantom Types ermöglichen es mir, bereits zur Compile-Zeit sicherzustellen, dass ich nicht versehentlich schreibende Zugriffe gegen meine Read-Slave-Datenbank absetze.

Ivan Kusalic: Scala ist eine großartige Programmiersprache, die sich besonders für das Backend-Processing in Enterprise-Umgebungen eignet. Am meisten mag ich die Vielzahl an unterstützten Programmierstilen: Ich präferiere dabei einen Mix aus funktionaler und objektorientierter Programmierung, bei dem der funktionale Ansatz Unveränderbarkeit und Prozessflow sicherstellt, während der objektorientierte Ansatz gute Datenkapselung liefert.

Scala ist eine sehr ausdrucksstarke Sprache, und es ist eine helle Freude, mit ihr zu arbeiten. Sie erlaubt das Erstellen flexibler und sicherer Designs, die so in vielen anderen Sprachen einfach nicht möglich sind. Von einfachen DSLs bis hin zu Typenklassen oder sogar Makros, wenn man diese braucht. Meistens fühlt die Arbeit mit Scala sich an, als könnte ich meine Gedanken direkt im Code umsetzen, ohne mich mit irgendwelchen umständlichen und langatmigen Übersetzungen plagen zu müssen.

Und dann gibt es da natürlich noch die Typen! Ich kann mir die Arbeit mit einer Sprache, die keine ausdrucksstarke Typen besitzt, wirklich nicht mehr vorstellen. Zu guter Letzt sei noch die Schönheit der aufeinander aufbauenden Features erwähnt. Eigentlich sagt die Tatsache, dass man Typenklassen als Designmuster und nicht als eingebautes Feature vor sich hat, doch eigentlich alles.

Markus Hauck: Scala fasziniert mich, weil es Funktionale Programmierung auf der JVM mit einem ausdrucksstarken Typsystem verbindet. Interoperabilität mit Java ist ein weiterer Bonus, gerade wenn es darum geht, inkrementell von einer gewachsenen Codebasis in Java zu Scala zu migrieren.

Daniela Sfregola: In einem früheren Leben war ich Java-Entwicklerin. Ich habe es wirklich genossen, mit der Sprache zu arbeiten. Doch nach einigen Jahren der Entwicklung wollte ich eine flexiblere und ausdrucksstärkere Sprache ausprobieren, weshalb ich mich dazu entschied, auch ein wenig mit Scala zu spielen. Zu dieser Zeit war das nämlich noch eine der glänzenden neuen Sprachen, mit der die coolen Kids spielten.

Ich bin von dem Ausflug nie zurückgekehrt. Meiner Meinung nach ist Scala eine faszinierende und mächtige Sprache, die es dem Programmierer erlaubt zu entscheiden, wie der Code aussehen soll. Bei anderen Sprachen übernimmt diese Entscheidung eher die Sprachsyntax.

Julien Tournay: Etwa 2009 habe ich begonnen, mit Scala herumzuspielen. Der Hauptgrund dafür waren die Lambdas, die ich bei Java sehr vermisste. Zu dieser Zeit habe ich mit Guillaume Bort, der das Play Framework entwickelt hat, in der gleichen Firma gearbeitet. Guillaume und der Rest des Unternehmens hatten ein paar Monate später dann ebenfalls Interesse an Scala. Ich habe die Gelegenheit genutzt, um die Sprache professionell einzusetzen und bin dabei geblieben.

Während ich immer besser mit Scala zurecht kam, haben sich die Dinge, die ich an der Sprache mag, ziemlich verändert. Zunächst haben sich Lambdas einfach richtig angefühlt. Ich habe sehr viel in JavaScript entwickelt, und es mag paradox klingen, aber Scala hat sich näher zu JavaScript angefühlt als Java. Dann habe ich etwas mehr darüber herausgefunden, habe Typenklassen entdeckt, dann pures funktionales Programmieren, Kategorientheorie, Type-Level-Programming, Logik, Programmiersprachentheorie  – und ich bin immer noch am Dazulernen!

Was ich besonders an Scala liebe ist die Reise. Die Sprache hilft dir nicht nur dabei, bessere Programme zu schreiben. Scala und seine Community können dafür sorgen, dass du als Entwickler “wächst”. Es beginnt mit sehr grundlegenden Problemen (“Java ist zu geschwätzig”, “Ich will Lambdas”, “Ich möchte Spark nutzen”), und je weiter man in die Sprache einsteigt, umso mehr ist man einer ganzen Welt neuer Konzepte ausgesetzt. Da sind nicht nur neue Bibliotheken oder Tools, sondern komplett neue Ideen. Zunächst fühlt es sich völlig überwältigend an, aber nach einer Weile genießt man das Lernen.

scala-iconDossier Scala
Diese Woche dreht sich auf JAXenter alles um die JVM-Sprache Scala. Entwickelt ab 2001 von Martin Odersky im Labor für Programmiermethoden an der École polytechnique fédérale de Lausanne, wurde Scala schnell als eines der heißestes Eisen im Java-Ökosystem gehandelt, mit dem Potenzial, die Innovationsflaute in der Java-Programmiersprache zu beenden. Der Hype ist mittlerweile abgeflaut, und spätestens seit der Integration von Lambda-Ausdrücken in Java 8, mit denen funktionale Programmierelemente auch in Java selbst Einzug hielten, stellt sich die Frage nach der Position Scalas im Raum der JVM-Sprachen neu.
Wir versuchen, hier auf JAXenter im Themen-Dossier “Scala” eine Antwort zu geben. Nach unserer Einführung in die grundlegenden Konzepte von Scala ordnet Martin Odersky die Evolution Scalas für uns im Interview ein. Außerdem beleuchten wir den reaktiven Technologie-Stack um Scala in all seinen Facetten und lassen Scala-Entwickler aller Couleur zu Wort kommen, um uns von ihren persönlichen Scala-Tops und Flops zu berichten.

Weshalb Scala und nicht Java?

Daniel Westheide: Neben dem deutlich mächtigeren Typsystem gibt es eine Reihe weiterer Gründe, warum ich Scala in der Regel den Vorzug geben würde. Zwei, die ich an dieser Stelle herausgreifen möchte und gewissermaßen miteinander verknüpft sind, sind zum einen die Möglichkeit, algebraische Datentypen zu definieren und zum anderen Pattern Matching, um mit gut lesbarem Code mit diesen Datentypen zu arbeiten.

Im folgenden Codebeispiel sehen wir beides im Einsatz: Wir definieren einen algebraischen Datentypen namens Session und unterscheiden dabei zwischen einer Session eines eingeloggten Users und einer anonymen Session. Wir nutzen dann Pattern Matching, um entweder personalisierte oder allgemeine Empfehlungen zurückzugeben:

sealed trait Session
case class LoggedInAs(userId: String) extends Session
case object Anonymous extends Session

def showRecommendations(session: Session): List[Recommendation] = session match {
case LoggedInAs(userId) => personalizedRecommendationsFor(userId)
case Anonymous => trendingArticles

}

Daniela Sfregola: Obwohl Java dabei ist, die Vorteile eines funktionaleren Stils anzunehmen, hat Scala einige Features, die Java (noch) nicht hat und eine sehr viel kompaktere Syntax. Das sorgt dafür, dass das Programmieren mit Scala sehr viel spaßiger und produktiver ist als mit Java – obwohl ich zugeben muss, dass es schwieriger ist, Scala zu lernen.

Ivan Kusalic: Typensicherheit, Ausdrucksstärke, Prägnanz, das funktionale Paradigma, die Möglichkeiten zur Abstraktion, usw. sprechen für Scala. Unterm Strich sind Java und Scala einfach zwei sehr unterschiedliche Sprachen. Scala ist so viel mehr als Java, und es würde Stunden dauern, um alle diese Punkte genau auszuarbeiten.

Natürlich hat auch Scala Nachteile: Die höhere Komplexität und die steile Lernkurve. Und der Arbeitsmarkt. Man könnte noch über die Geschwindigkeit diskutieren, aber ich finde, dass das bisschen Code, das wirklich optimiert werden müsste, nicht im Verhältnis zur Lesbarkeit steht. Außerdem kann man das im Zweifel auch direkt in Java schreiben, wenn eine Optimierung wirklich nötig ist. Aber der Arbeitsmarkt ist wirklich der große Minuspunkt im Vergleich zu Java. Bei allem anderen gewinnt Scala – und zwar meistens haushoch.

Markus Hauck: Wegen Scalas Typensystem. Java hat da einige gravierende Schwächen und in der Praxis tendiert die Typisierung eher dazu zu stören als zu helfen. In Scala sieht das anders aus, man kann eine Vielzahl an Fehlern durch den Scala Compiler verhindern.

Julien Tournay: Die größte Herausforderung im professionellen Entwickeln ist für mich das “Skalieren” eines Projektes. Ich meine damit die Arbeit an einem Projekt, das immer größer und größer wird sowie mit einem Team, das immer mehr Entwickler beinhaltet. Meiner Meinung nach helfen Typensysteme sehr dabei, dieses Problem zu mildern.

Wenn du ein Java-Entwickler bist, stell dir folgende Frage: Warum bevorzuge ich Java gegenüber Python oder JavaScript? Wenn deine Antwort ist “Weil ich statische Sprachen mag”, solltest du dir vielleicht ansehen, was andere Sprachen in diesem Bereich zu bieten haben. Es gibt Sprachen da draußen, die ein wesentlich besseres Typensystem als Java haben. Du könntest dann zum Beispiel Scala ausprobieren oder Haskell, eine Meta-Sprache oder sogar Idris. Scala hat den Vorteil, dass es auf der JVM läuft und es somit einfach ist, von einer existierenden Java-Codebasis nach Scala zu migrieren.

Im Teil 2 des Experten-Checks nehmen wir uns die Unterschiede zwischen Scala und der funktionalen Programmierung mit Java-8-Lambda-Expressions vor. Stay tuned!

 

Durchstarten-mit-Scala_Auflage2_2400x_rgb-220x315Und Sie? Kommentieren und gewinnen!

Was macht für Sie die Faszination Scala aus? Wo sehen Sie die Vorteile – oder auch die Nachteile – von Scala gegenüber Java?

Kommentieren Sie hier!

Unter allen konstruktiven Kommentaren zum Experten-Check Scala verlosen wir drei Exemplare des Buches „Durchstarten mit Scala“ von Heiko Seeberger. (Vergessen Sie hierfür nicht, Ihre E-Mail-Adresse anzugeben).

Ihre Meinung zählt!

Verwandte Themen:

Geschrieben von
Kommentare

Hinterlasse einen Kommentar

7 Kommentare auf "6 Antworten auf die Frage: Weshalb Scala und nicht Java?"

avatar
400
  Subscribe  
Benachrichtige mich zu:
Dominik
Gast

Ich glaube, dass viele Programmierer von den Hochschulen ins Berufsleben kommen, ohne zuvor jemals mit einer funktionalen Programmiersprache in Berührung zukommen – was mit Sicherheit die Einarbeitung in Scala erschweren kann und vielleicht sogar einer der Hauptgründe ist, wieso der wirklich Durchbruch von Scala auf der Strecke geblieb ist. Ein Hype gab es ja, aber ein wirklicher Durchbruch…
Seit letztem Jahr und der Veröffentlichung von Java 8 und den dort integrierten Lamda-Ausdrücken wird sich dies evtl. nun ändern 😉

TestP
Gast
Ivan Kusalic: Bei allem anderen gewinnt Scala – und zwar meistens haushoch. Das ist maßlos übertrieben. Es gibt durchaus Bereiche wo Scala haushoch verliert. Das wären z.B. die Geschwindigkeit und Zuverlässigkeit des Compilers dann kennen die Scala-Macher das Wort Abwärtskompatibilität offenbar nicht und brechen diese permanent. Das verursacht Kosten und frisst Arbeitszeit was echt nicht sein müsste. Dann neigt Scala dazu eine „write-only“-Sprache zu sein weil die Macher meinten sie müssten Scala Lisp-like programmierbar machen und sind dabei weit über’s Ziel hinaus geschossen etc. Und schliesslich wäre auch noch die extremst toxische Community, aber dafür kann Scala jetzt nichts. Insgesamt… Read more »
David
Gast

Ich habe noch nichts mit Scala gemacht. Wäre aber interessiert mal was zu probieren. Für solche Leute sind doch Bücher oder!? 🙂 danke Jaxenter für eure Beiträge. Ihr seid underrated in meinen Augen. Weiter so.

Michael
Gast

Ich denke schon dass man mit Scala sehr eleganten Code schreiben kann, sehe aber auch Probleme zur Laufzeit. Funktionieren die ganzen existierenden Analysewerkzeuge wie JConsole, VisualVM, JProfiler etc. noch und erlauben noch Rückschlüsse auf den Scalacode oder muss man dann verstehen wie Scala auf Javaobjekte bzw. den Bytecode abgebildet wird?

Heiko Seeberger
Gast

Werkzeuge, die mit Bytecode arbeiten, sind in der Tat manchmal problematisch. Scala 2.12 setzt auf einige neue Java 8 Features und sollte wesentlich näher an einer 1:1-Übereinstimmung zw. Scala-Source und Bytecode sein.

Nach meiner Erfahrung ist die Diskrepanz jedoch auch heute kein ernsthaftes Problem für Entwickler, die zum einen Scala beherrschen und zum anderen Werkzeuge wie die genannten.

Daniel Westheide
Gast

Kann mich Heiko nur anschließen. Auch was Stacktraces angeht, braucht es zwar eine gewisse Vertrautheit mit Scala, dann ist es aber kein Problem mehr diese nachzuvollziehen.

Carlo LF
Gast
„Bei allem anderen gewinnt Scala – und zwar meistens haushoch“: LOL. Ach ja, die Experten. Die „Typsicherheit“ (eines überaus komplexen Typsystems!). Und natürlich “ Funktionale Programmierung“ – per se ein wohl gutes Ding. Spaß bei Seite. Gewiss hat Scala einige sehr schöne, nützliche Dinge gebracht, die wir teilweise von Groovy schon kennen. Aber Scala hat auch sehr hässliche Seiten: mitunter ist es das Sammelsurium von Sonderzeichen, dass der Lesbarkeit sehr entgegensteht. Und die Herkunft aus dem sehr akademischen Bereich ist unübersehbar – und das ist ein echtes Hindernis für Joe-Durchschnitts-Programmierer (wie ich einer bin). Nach allem, was ich bisher gesehen… Read more »