Soll ich studieren Scala?
Ich bin ein erfahrener C++ - Programmierer mit durchschnittlichen Python-Fähigkeiten. Die Gründe, die ich studierte Python in den ersten Platz waren:
- um eine andere Perspektive auf die Programmierung (statisch vs dynamisch, interpretiert vs. kompiliert, etc.)
- erhöhen die Bandbreite der Projekte, an denen ich arbeiten kann (Python ermöglicht es mir zu tun, web-Entwicklung, Entwicklung für Symbian-Handys oder knock-up-quick-system-administration-scripts)
- zu ergänzen, um meine C++ - Fähigkeiten.
Ich denke, dass Python ist toll und ich glaube, dass ich erreicht haben, die oben genannten Ziele zu erreichen. Ich werde weiterhin verwenden Sie es für kleine Projekte, Skripte und web-Entwicklung.
Ich bezweifle, dass ich es verwenden können, für mittelgroße bis große Projekte, obwohl. Während die dynamische Typisierung ist bequemer, es erlaubt eine gewisse Klasse von Fehlern, die finde ich verstörend. Unit-Tests und linting kann dieses problem gelöst werden, aber statische Typisierung vollständig eliminiert es.
Nachdem man einige Programmiersprachen, denke ich, dass Scala sieht aus wie ein guter Kandidat:
Ich mag die Typ-Inferenz und es läuft auf der JVM, so sollte es überall dort verfügbar, wo die JVM verfügbar ist. Ich kann auch lernen, mehr über die funktionale Programmierung, wenn Sie es verwenden.
Aber... ich habe auch einige Zweifel, und das ist, wo ich hoffe, dass die Stack-Overflow-community können helfen:
- Portabilität: Windows und Linux, zumindest hoffe ich das. Was ist mit Handys, ist es möglich, um es zu bekommen, dort zu laufen?
- C++ - Kompatibilität: kann ich mischen C++ - code mit Scala? (JNI?)
- Programmier-Paradigma: ich fühle mich nicht wohl mit dem Wechsel zu funktionale Programmierung (FP) in dieser Zeit. Kann ich mit dem Objekt-orientierten und prozeduralen mit einigen FP auf den ersten und dann ändern sich die Proportionen, wie ich lernen?
- Tool-chain maturity: was ist Ihre Erfahrung mit IDEs und Debuggern? Ich bin mit Eclipse gerade jetzt, und es scheint OK.
- Lernen, Geschwindigkeit: in Anbetracht meiner Erfahrungen, wie schnell, denkst du, dass ich erreichen kann, eine praktikable Ebene mit Scala?
- Bereitstellung: wie genau stellen Sie ein Scala-Programm? Ist es ein jar, ist es eine ausführbare Datei?
Endlich, was denkst du, was sind einige der Scalas-und Nachteile?
- Buch: Programming in Scala, Martin Odersky et al., Artima, 2007
- Danke Euch allen für Eure Antworten und Empfehlungen. Ich habe beschlossen, einen genaueren Blick auf Scala.
- Das beste Buch für mich war "Scala" für die Ungeduldigen" von Cay Horstmann. Die ersten 9 Kapitel sind frei verfügbar.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja. Es gibt einige Bewegung über die Scala auf Android. Für J2ME, sah ich etwas in dieser Hinsicht, aber nicht viel. Es ist ein code in Bezug auf J2ME auf die source-code-repository. Ich bin mir nicht sicher, wie brauchbar es ist, aber es sieht mir, dass es nicht viel Nachfrage für, die.
Werde ich auch erwähnen, dass es ist/war ein pool auf der Scala-Lang über die gewünschten Zielplattformen und J2ME war einer von Ihnen, sehr niedrig auf dem Totempfahl.
So gut wie Sie können mix C++ mit Java, für was auch immer das Wert ist. Wenn Sie noch keine Erfahrung damit, kann man nur Lesen Sie die Java-Ressourcen, wie alles, was in Ihnen gelten mit Scala ohne änderungen (abgesehen Scala-syntax).
Jeden Fall, ja. Scala geht aus dem Weg um sicherzustellen, dass Sie nicht brauchen, um das Programm in einem funktionalen Stil. Dies ist die Hauptkritik der Scala von funktionalen Leute, als eine Angelegenheit von der Tat: einige nicht als eine funktionale Sprache, es sei denn, es zwingt den Programmierer zu schreiben, funktionalen Stil.
Sowieso, können Sie gehen direkt auf, Dinge zu tun Ihrem Weg. Meine Wette ist, dass Sie abholen werde funktionalen Gewohnheiten, ohne einmal realisieren, dass Sie funktionsfähig sind.
Vielleicht können Sie einen Blick auf die Matrizen Serie in meinem eigenen blog über das schreiben einer Matrix-Klasse. Obwohl es sieht aus wie standard-OO-code, es ist in der Tat sehr funktionell.
IDEE (IntelliJ), NetBeans und Eclipse haben alle eine gute Unterstützung für Scala. Es scheint, die IDEE ist die beste, und NetBeans/Eclipse halten frog-jumping jedes andere, obwohl NetBeans ist sicherlich stabiler als Eclipse zu spät. Auf der anderen Seite, die Unterstützung von Eclipse nimmt einem sehr viel versprechenden Weg, dass sollten sich die Ergebnisse in den nächsten 6 Monaten oder so -- es ist nur, dass es eine stoßende route. 🙂
Einige interessante Anzeichen Scala-tooling für diese Umgebungen ist die Tatsache, dass die Eclipse-plugin-Entwicklung verwendet AOP zu verschmelzen mehr nahtlos mit der gesamten IDE, die die NetBeans-plugin wird komplett neu geschrieben in Scala, und dass es einen Scala-Power-Pack auf die IDEE unterstützt, unter anderem die übersetzung von Java-code in Scala-code.
EMACS-Leute haben umfangreiche tools für Scala als auch, und viele kleinere Redaktionen haben Unterstützung für Sie zu. Ich bin sehr angenehm mit jEdit Unterstützung für kleine Programme und Skripte, zum Beispiel.
Es ist auch gut, Maven-Unterstützung-in der Tat, der standard-Weg zur Installation Aufzug ist die Installation von maven erstellen und dann einen Heben Archetyp. Das zieht eine entsprechende Scala-version. Es gibt eine
scala:cc
Ziel, die die Neukompilierung ausgelöst als gut.Apropos Neuinstallation, weder Maven, und besonders noch Ant tun, einen guten job zu erkennen, was neu kompiliert werden muss. Von diesem problem gewölbt SBT (Simple Build Tool), geschrieben in Scala, die löst dieses problem durch die Verwendung von Scala-compiler-plugin. SBT nutzt die gleiche Projekt-layout wie Maven, sowie Maven/Ivy-repositories, aber das Projekt Konfigurationen erfolgen in Scala-code anstelle von XML -- mit Unterstützung für Maven/Ivy-Konfigurations-Dateien als auch.
Sehr schnell. Als rein OO-Sprache, Scala bereits mit einigen netten features, die vergleichbar mit einigen Sachen, die in C++ aber nicht in Java, aber Sie arbeiten auf unterschiedliche Weise. In dieser Hinsicht, sobald Sie erkennen, was diese Funktionen sind und Sie beziehen sich auf die C++ - Sachen, werden Sie viel vor Java-Programmierer, wie Sie bereits wissen, was mit Ihnen zu tun.
Das gleiche wie Java. Sie können die Bereitstellung JARs, WARs oder andere Java-Ziele, weil der scala-compiler generieren die class-Dateien. In der Tat, verwenden Sie Java-jar zu erzeugen, eine Scala JAR-Datei aus den class-Dateien, und die Maven-Ziele für Aufzug-Unterstützung zum Bau von war-Dateien.
Gibt es eine alternative für Skript-Dateien, though. Sie können call "scala" laufen Scala-Quellcode direkt, ähnlich wie eine Perl-Shell-Skript. Das kann man auch auf Windows. Aber auch mit dem Einsatz von ein compilation-daemon, um die Geschwindigkeit der Ausführung, start-up-Zeiten sind langsam genug, dass der wirksame Einsatz von Scala in einer schweren Skripting-Umgebung muss so etwas wie Nailgun.
Als für Scala ' s Nachteile, werfen Sie einen Blick auf meine Antwort (und andere) in diese Stack Overflow Frage.
Scala ist eine sich entwickelnde Sprache lohnt sich zu investieren, vor allem, wenn Sie kommen aus der Java Welt. Scala ist weithin bedeckt bei Artima. Sehen Sie diese Artikel von Bill Venners und Lesen Sie auch über Twitter und Steuerlichenein.
Bezug auf Ihre Fragen:
Scala hat die volle Unterstützung für die imperative Programmierung, schreiben von Programmen, die keine FP-Elemente ist ein Kinderspiel (aber FP ist nützlich, und lohnt sich das lernen sowieso).
Schnell. Es gibt eine Reihe von interessanten Funktionen in Scala, die möglicherweise nicht vertraut sind, Menschen, die aus einem C++ -, Java-Umgebung, wie zum Beispiel einige der features des Eingabe-system. Einige argumentieren, dass die Tatsache, dass es eine Menge zu lernen, in der Scala, bevor Sie alle wissen, es ist ein problem mit der Sprache; ich bin nicht einverstanden. Die Anwesenheit dieser Funktion ist ein Vorteil der Sprache. Je mehr Funktionen, desto besser. Nachdem alle, die Sie nicht haben, um Sie alle auf einmal, so wie du gerade don ' T haben, alles zu kaufen, das im laden verkauft.
Ich komme auch aus einer C++ - hintergrund, eine Sache, die ich bemerkt ist, dass, seit Sie schreiben viel weniger code im Vergleich zu C++ für eine vergleichbare Aufgabe, Ihr lernen beschleunigt werden wird, wie Sie mehr erreichen in der gleichen Zeit. Dies war das gleiche Phänomen, dass ich erlebt habe mit Ruby.
Eigentlich - wenn ich du wäre, würde ich studieren Programmier-Paradigmen anstelle von Sprachen. Natürlich, Sie haben zu studieren, ein Beispiel der Sprache zu studieren, das Paradigma. Die Kenntnis der Nachteile & Vorteile der verschiedenen Paradigmen ermöglicht Ihnen die Anzeige Ihrer Probleme von einer anderen Seite und macht Ihnen ein besserer Programmierer (auch in den Sprachen, die Sie bereits kennen).
Abholung eine Sprache, in der ein Paradigma bereits bekannt ist eine relativ einfache Aufgabe, wenn nötig. Da Scala ist FP (zumindest erwähnt es) und C++/Python OOP, es ist eine gute Sprache für Sie, würde ich sagen.
Sollten Sie sich für diesen Kurs anmelden, die der Schöpfer von Scala selbst.
https://www.coursera.org/course/progfun
James Strachan (produktive Java-open-source-Entwickler, für diejenigen, die nicht in der Schleife) hat eine interessante Diskussion von Scala hier, und warum er fühlt, dass es eine Weiterentwicklung von Java (die Sprache, nicht die Plattform).
Scala sieht aus wie es ist, gewinnt eine Menge Traktion. Ich glaube nicht, dass es ein Blitz in der Pfanne, und ist derzeit auf meiner Liste der Sprachen zu lernen (zum Teil für den funktionalen Aspekt)
Hier ist eine anekdotische Evidenz in Bezug auf die Erlernbarkeit von Scala.
In unserer Firma, wir haben mehrere Praktikanten aus U. Waterloo. Sie wurde gesagt, zu schreiben, in der Scala; nie sah es vor.
Sie abgeholt Scala und Lift bemerkenswert schnell; jetzt sind Sie die Herstellung Scala-code; es ist vielleicht nicht perfekt, aber nobody ' s perfect.
Also die Tatsache, dass ein manager nicht weiß, Scala vielleicht nicht das beste argument, wenn Sie auf die Annahme entscheiden.