Python vs. Scala

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Antworten
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Ich habe neulich die Meinung vertreten, dass es vergleichbar einfach wäre, einer Gruppe Studenten (also nicht totalen Programmieranfängern) Scala statt Python beizubringen, wenn man sich auf einen mit Python vergleichbaren Funktionsumfang beschränkt und Scala zugesteht, dass man { } statt nur Einrückung benutzt (was Programme etwas länger macht) und Signaturen von Funktionen mit Typen annotieren muss. Dies könnte man aber in Python 3.x auch machen, um die Lesbarkeit von Funktionen zu erhöhen.

Was meint ihr?

Python:

Code: Alles auswählen

    $ python
    >>> print("Hallo, Welt")
    Hallo Welt
    >>> ^D
Scala:

Code: Alles auswählen

    $ scala
    scala> println("Hallo, Welt")
    Hallo Welt
    
    scala> ^D
Python:

Code: Alles auswählen

    # Lottozahlen
    from random import shuffle
    numbers = list(range(1, 50))
    shuffle(numbers)
    print(sorted(numbers[:6]))
(Oder `sorted(random.sample(range(1,50), 6))` wenn man den Algorithmus nicht selbst implementieren will, sondern eine Bibliotheksfunktion nutzen will, die in Scala leider fehlt - die sich aber nachrüsten liese)

Scala:

Code: Alles auswählen

    // Lottozahlen
    import util.Random.shuffle
    val numbers = shuffle((1 to 49).toList) 
    println(numbers.take(6).sorted)
Python:

Code: Alles auswählen

    def fac(n: int):
        return 1 if n == 0 else n * fac(n - 1)
Scala:

Code: Alles auswählen

    def fac(n:Int):Int = {
        if (n == 0) 1 else n * fac(n - 1)
    }
Stefan
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

sma hat geschrieben:Ich habe neulich die Meinung vertreten, dass es vergleichbar einfach wäre, einer Gruppe Studenten (also nicht totalen Programmieranfängern) Scala statt Python beizubringen, wenn man sich auf einen mit Python vergleichbaren Funktionsumfang beschränkt und Scala zugesteht, dass man { } statt nur Einrückung benutzt (was Programme etwas länger macht) und Signaturen von Funktionen mit Typen annotieren muss. Dies könnte man aber in Python 3.x auch machen, um die Lesbarkeit von Funktionen zu erhöhen.

Was meint ihr?
Nein. Ich habe Komilitonen, die nicht totale Nullen sind (denn auch solche gibts zu genüge, womit das Argument noch weiter bestärkt wird) gesehen die vor Scala weggelaufen sind. Bei Scala ist sowohl die Syntax komplizerter (diese implizite Klammerung funktioniert zwar gut, aber ich hab da auch manchmal Zweifel, ob das so funktioniert wie ich es ohne Klammern schreibe, von so Späßen wie _, den ganzen Klassenarten und dem ganzen möglichen syntaktischen Zucker der möglich ist und Scala zu einem Perl auf der JVM werden lässt, ganz zu schweigen). Zudem die Konzepte auch irgendwie komplexer sind. Scala hat halt dieses Problem dass es objektorienierung und funktionale Programmierung nahtlos vereinen will, was aber halt an einigen Stellen kompliziert wird. Gerade Leute die aus Java kommen werden da wohl sogar mehr zu schlucken haben als wie wenn sie direkt eine funktionale Sprache nehmen um die Konzepte zu verstehen. Ich habe funktionale Programmierung erst nach Scheme verstanden obwohls in Python geht und logische Programmierung erst in Prolog halbwegs begriffen obwohls auch in Scheme geht.

Und natürlich, einfache Beispiele sehen in beiden Sprachen einfach aus, aber das würde ich nicht direkt als "lernen" bezeichnen. "Lernen" würde ich sagen, dass man die Kernfeatures einer Sprache effektiv einsetzen kann und idiomatischen Code schreibt. Und da kommt bei Scala mehr auf einen zu als bei Python.

Disclaimer: Ich finde Scala sogar halbwegs gut, plane damit in Zukunft Apps für Android zu schreiben.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

sma hat geschrieben:Ich habe neulich die Meinung vertreten, dass es vergleichbar einfach wäre, einer Gruppe Studenten (also nicht totalen Programmieranfängern) Scala statt Python beizubringen, wenn man sich auf einen mit Python vergleichbaren Funktionsumfang beschränkt und Scala zugesteht, dass man { } statt nur Einrückung benutzt
Hmm, könntest du recht mit haben, das muss man dann aber auch konsequent einhalten. Allerdings finde ich auch, dass die Dokumentation von Scala nicht ansatzweise so durchschaubar ist, wie die von Python.

Die API-Dokumentationen erschlagen einen (und die Suchfunktion ist so ziemlich sinnlos da sie nicht Klassen/Objekt-Übergreifend nach Methodennamen suchen kann, das gerade bei Scala wichtig wäre) und aus dem Rest darf man sich die Funktionsweise der Sprache zusammensuchen. Der zweite Teil würde sich zwar erledigen, da du? dass dann übernehmen würdest. Aber spätestens wenn der Student mal selbst eine Funktion nachschlagen will muss er Skala wirklich kennen um die Signaturen zu verstehen.

Und ich finde dein Beispiel ja schon haarig genug:

Code: Alles auswählen

val numbers = shuffle((1 to 49).toList) 
Wo kommt to her? Aus Int jedenfalls nicht. – Aus RichInt kommt es. Warum?

Ich bin ja ein Fan von einfachen Sprachen, Scala gehört da definitiv nicht dazu.
BlackJack

Mir ist Scala auch zu kompliziert und zu unhandlich. Der ganze "perlesque" syntaktische Zucker und dann so aussagen wie "wir können nicht auf einfache Weise erklären wann Du Typdeklarationen weglassen kannst, aber da bekommt man mit der Zeit ein Gefühl für" lassen mich schreiend weglaufen. Insbesondere weil ich bei meinen Tests mit verschachtelten rekursiven Funktionen deutlich mehr Typen deklarieren musste als ich das erwartet hätte. Bin vielleicht von Haskell zu sehr verwöhnt. :-)
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

sma hat geschrieben:Was meint ihr?
Ich kannte Scala bisher nicht und nach den Codebeispielen habe ich auch gar keine Lust mehr es kennenzulernen. Bei Python schreibst du quasi Pseudocode hin und es läuft. Dieses Scala ... ich kann es nicht genau festmachen, aber es gefällt mir nicht.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Scala will die eierlegende Wollmilchsau sein, ein Blick wert ist es definitiv. Ob man danach zu dem Schluss kommt dass einem die Komplexität egal ist und man zufrieden ist oder man doch lieber für jeden Zweck zu einer Sprache greift ist dann eine Geschmacksfrage.

Mein Eindruck ist dass vorallem "Anhänger" funktionaler Sprachen Scala eher ablehnend gegenüber stehen, während Java Leute da eher gemischt sind.
metty
User
Beiträge: 99
Registriert: Samstag 13. Dezember 2008, 19:30

@sma
Darf ich fragen an welche Hochschule du gehst, bzw. was genau du studierst?
An der HS wo ich studiere sind meine Kommilitonen bis auf ein paar wenige Ausnahmen teilweise schon mit den einfachsten Dingen der Objektorientierung überfordert.
Zu ihrer Ehrenrettung: Viele glauben das die HS aus ihnen auch ohne persönliches Interesse richtige Informatiker machen kann.
Frei nach dem Motto "Wenn etwas nicht an einer HS gelehrt wird, kann's auch gar nicht wichtig sein..." :mrgreen:
(Ihr wisst ja: Informatiker werden immer gebraucht, Prüfungen zu bestehen reicht, das ganze Zeug braucht man ja später eh nie wieder und Hauptsache einen Titel, denn das Geld kommt dann ganz von allein usw.)

Leider sind die Professoren an meiner Hochschule Neuem nicht gerade positiv eingestellt (würde Veränderung und Lernarbeit für sie bedeuten), weshalb solche Themen wie Scala oder gar Python an der HS nicht in einem Punkt erwähnt und auf Nachfrage teilweise sogar belächelt werden.

Schade...
sma hat geschrieben:Ich habe neulich die Meinung vertreten, dass es vergleichbar einfach wäre, einer Gruppe Studenten (also nicht totalen Programmieranfängern) Scala statt Python beizubringen...
Ich persönlich finde Scala sehr interessant und muss sma irgendwie zustimmen.
Wenn man sich auf einen mit Python vergleichbaren Funktionsumfang beschränkt, könnte es (an manchen Hochschulen, aber nicht an meiner) sogar funktionieren es den Studierenden zu vermitteln...
Ich würde mich jedenfalls freuen, an der HS mal was anderes als C und Java zu hören...

Aber dafür gibt es zum Glück ja Bücher.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

metty hat geschrieben:@sma
An der HS wo ich studiere sind meine Kommilitonen bis auf ein paar wenige Ausnahmen teilweise schon mit den einfachsten Dingen der Objektorientierung überfordert.
Oh, das kenne ich. Ich studiere gerade neben dem Job und habe als langjähriger Softwareentwickler natürlich einen merklichen Wissensvorsprung vor meinen Kommilitonen. In der vorletzten Vorlesung zu objektorientierter Programmierung (Java) war das Singleton-Pattern dran und da war das Unverständnis schon groß. Letztes Mal kam dann das Observer-Pattern und da sind dann mindestens 75% der Studierenden einen geistigen Heldentod gestorben. Wie soll man das auch alles verstehen, wenn man schon nicht in der Lage ist, KLassen- und Instanzattribute auseinanderzuhalten.
lunar

Scala ist eine komplexe Sprache mit vielen Regeln und ebenso vielen Sonderfällen (z.B. Typinferenz ja, aber nicht in Methodenparametern). Im Unterricht lenkt das nur vom Wesentlichen ab, man möchte ja an der Uni schließlich nicht Sprache X lehren, sondern ein übergeordnetes, allgemeines Konzept anhand von Sprache X beibringen. Für den Unterricht ist Scala daher meiner Meinung nach ebenso wenig geeignet wie Java oder C++. Wenn man eine funktionale Sprache zu Unterrichtszwecken sucht, dann lieber OCaml.

Ich persönlich finde Scala auch im Allgemeinen sehr unschön. Scala ist wohl vor allem deswegen so bekannt, weil die ernstzunehmenden Alternativen auf der JVM (insbesondere Java) auch keine sonderlich gelungenen Sprachen sind. Die JVM mag .NET technisch überlegen sein, aber imho hat .NET mit C# und F# die gelungeneren Sprachen.
metty
User
Beiträge: 99
Registriert: Samstag 13. Dezember 2008, 19:30

lunar hat geschrieben:Im Unterricht lenkt das nur vom Wesentlichen ab, man möchte ja an der Uni schließlich nicht Sprache X lehren, sondern ein übergeordnetes, allgemeines Konzept anhand von Sprache X beibringen. Für den Unterricht ist Scala daher meiner Meinung nach ebenso wenig geeignet wie Java oder C++.
Das stimmt...
Die Sprache sollte eigentlich nur das Mittel zum Zweck sein und den gewünschten Sachverhalt so übersichtlich wie möglich darstellen. Die Realität ist meist jedoch so, das eine Vielzahl der Professoren glühende Verfechter "ihrer" auserkorenen Programmiersprache sind und es sich eher zum Ziel gesetzt zu haben wieder ein paar Studenten für ihre Sprache zu bekehren, als Konzepte allgemeingültig zu vermitteln. Daher ist der Wortlaut eher "Das geht nur mit Sprache X und wenn das nicht geht, taugt die andere Sprache nichts..."

Aber wobei...
Wenn ein paar Programmierkenntnisse mit Sprache X hängen bleiben, muss das nicht unbedingt das schlechteste sein.
Für die Entwicklung der gewünschten Anwendung kommt man (leider) um das Programmieren nicht herum, selbst mit den besten Skills im Software Engineering nicht. Außer mit Outsourcing der der Programmierung nach Bangalore. :D
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Leonidas, du zeigst den selben Impuls, wie mein Bekannter, gleich die ganze Sprache lernen zu wollen. Warum? Scala ist kompliziert – unbestritten – und davor wegzulaufen, kann ich sehr gut nachvollziehen. Geht mir genauso :) Doch ich sage mir, wenn man einfach eine Liste von möglichen Objekten, Klassen und Methoden bzw. Funktionen hat, ähnlich der Art wie ja auch die Python Dokumentation einfach nur aufzählt, was es so gibt, ist Scala nicht schwerer als Python. Man darf nur nicht den Fehler machen, in deren JavaDoc-Äquivalent zu gucken.

Ich befürchte aber, ich habe meinen ersten Satz falsch formuliert. Es ging mir nicht darum, Scala komplett zu lehren, sondern dass es nicht schwerer wäre, ein Subset von Scala, welches dem Umfang von Python entspricht, zu nehmen und damit Informatik-Grundlagen zu machen als wenn es Python wäre. Man stelle sich so Aufgaben wie in SICP vor.

Ich stimme Darii zu, dass die aktuelle Dokumentation von Scala dafür ungeeignet ist, auch wenn Scala by Example ja schon für ein Vorlesungsscript gedacht war – meine ich. Das erwähnte "to" muss man IMHO einfach als Syntax wie "if" oder "val" lernen. Genauso würde man sich in Python merken, dass man mit "for i in range(1, 49+1)" eine klassische for-next-Schleife bilden kann. Da ist auch egal, wo das range() nun genau her kommt.

BlackJack, die einfache Regel dafür, wann Typdeklarationen nötig sind, ist IMHO diese: Parameter von Methoden bzw. Funktionen haben immer Typen. Auch das Angeben des Typs für den Rückgabewert kann man einfach immer erzwingen. Oder man ergänzt als Ausnahme: Nicht-rekursive Funktionen, die ein return benötigen (am besten nur solche, die in eine Zeile passen), brauchen keinen Typ für den Rückgabewert.

metty, meine Studienzeit ist schon länger vorbei. Ich war an der Uni in Kiel.

Wie lunar sagt, wird Scala von einigen als Alternative bzw. Nachfolger von Java gehandelt. Das macht die Sprache interessant, denn Java ist denke ich im professionellen Umfeld etabliert und daher wichtig und wenn sich der Fokus auf Scala verschiebt, dann könnte die Sprache auch interessant bzw. interessanter für die Lehre werden. Gerade auch, weil man (sage ich mal so als Amateur, was den Lehrbetrieb angeht) ein Curriculum aufbauen könnte, welches immer wieder verschiedene Seiten von Scala beleuchtet. Mächtig genug, um alles mögliche abzudecken von Algorithmen und Datenstrukturen, Compilerbau, Automaten bis hin zur Nebenläufigkeit sowie Dinge wie Software-Entwicklung im Großen, wäre Scala in jedem Fall.

Ich könnte mir vorstellen, Studenten wollen keine (vermeintlich) toten Sprachen lernen und wären vielleicht sogar über Scala froh. Und wer schreiend davon läuft (ganz nach dem Motto von Fisherman's Friend) ist einfach nicht stark genug ;)

Stefan
BlackJack

@sma: Den Impuls die ganze Sprache zu lernen haben wir wohl, weil es eben diese Untermenge von Scala nicht gibt -- man bekommt immer die ganze Sprache. Die Studenten würden im Netz Informationen zur ganzen Sprache finden. Sie könnten auch die ganze Sprache verwenden -- was dann die Tutoren wahrscheinlich wieder nicht alle können, denn an die werden dann ja die Fragen zur ganzen Sprache gestellt werden.

Meine Anmerkung zu den Typdeklarationen hatte ich damals aus einem offiziellen Scala-Tutorial. Wenn mir die Sprachdesigner so einen Satz um die Ohren hauen, will ich mit der Sprache nix zu tun haben. Dann ist mir die Sprache einfach zu kompliziert. Und dann noch dieser Hang mit Syntax nicht zu geizen. Ich mag halt Sprachen wie Io, C, Forth, Python, oder Scheme, wo die Syntax, ich sag jetzt mal "überschaubar" ist. :-)

Ich denke Scala ist zu kompliziert um sich wirklich durchzusetzen. Das ist vielleicht ein nettes Vehikel an dem sich Unis austoben können, aber ich sehe nicht, dass damit Systeme die von durchschnittlichen Programmierern umgesetzt und gewartet werden müssen, überleben können.
lunar

@sma: Scala ist zweifelsohne mächtig genug, um diverse Lehrinhalte des Studiums abzubilden. Die Frage ist aber, ob die Sprache an sich auch als Lehrsprache geeignet ist (was ich bezweifele). Außerdem ist es meines Erachtens nicht sinnvoll, ein Studium um eine Sprache herum zu bauen bzw. nur eine einzige Sprache während des Studiums zu verwenden.

Es ist schließlich nicht das Ziel des Studiums, eine Sprache zu lehren. Jemand mit Abschluss in Informatik sollte sowieso in der Lage sein, sich Sprachen wenn nötig auch selbst beizubringen. Insofern ist es sinnvoller, Studenten während des Studiums mit vielen verschiedenen, teils auch exotischen Sprachen zu konfrontieren, um ein möglichst breites „computerwissenschaftliches“ Grundwissen beizubringen.

Wenn den Studenten Sprache XY nicht gefällt, weil sie tot ist oder aus der Perspektive des Studenten anwendungsfern ist (bei OCaml bekommt man derlei häufiger zu hören), dann spricht das gegen die Studenten, nicht gegen die Sprache. Schließlich ist das ein Informatik-Studium, kein anwendungsorientierter Programmierkurs, und jede Sprache, die in irgendeiner Weise besonders ist, ist Bestandteil der Wissenschaft Informatik.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

sma hat geschrieben:Leonidas, du zeigst den selben Impuls, wie mein Bekannter, gleich die ganze Sprache lernen zu wollen. Warum?
Weil ich dumm dastehe im IRC wenn ich ne Frage zu Scala stelle und alle mir sagen ich habe alles furchtbar kompliziert gelöst, da es mit Scala-Feature XY viel eleganter ginge. Letztendlich wird mir dann alles mögliche wieder beigebracht im IRC, über Implicit Conversations zu Pattern Matching - weil das die idiomatische Variante ist.
sma hat geschrieben:Ich befürchte aber, ich habe meinen ersten Satz falsch formuliert. Es ging mir nicht darum, Scala komplett zu lehren, sondern dass es nicht schwerer wäre, ein Subset von Scala, welches dem Umfang von Python entspricht, zu nehmen und damit Informatik-Grundlagen zu machen als wenn es Python wäre. Man stelle sich so Aufgaben wie in SICP vor.
Naja, ab dem Punkt wo du dich auf unidiomatische Lösungen einlässt, weil die idiomatische Lösung nicht mehr in deinem Subset liegt, finde ich das nicht mehr so berauschend.
sma hat geschrieben:Ich könnte mir vorstellen, Studenten wollen keine (vermeintlich) toten Sprachen lernen und wären vielleicht sogar über Scala froh.
Ich denke ein großteil der Studenten heutzutage würden lieber Java als Scala lernen, wegen dem Job-Argument. Auch wenn ich persönlich es als Erlösung im vergleich zu Java empfinde - den meisten ist es halt egal ob man ein gutes oder ein schlechtes Typsystem hat, ob man map und filter zur Verfügung hat, ob man Pattern Matching nutzen kann, ob man einfach Closures haben kann etc.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten