Es gibt kein Ideal: wie ich nach einer Programmiersprache für mich gesucht habe



Von einem Übersetzer: Dieser Beitrag ist eine leicht abgekürzte Übersetzung des Originalartikels von Gal Schlesinger, einem erfahrenen Frontend-Entwickler. Er programmiert sehr gerne und sein Hobby ist es, verschiedene (und manchmal sehr unerwartete) Programmiersprachen sowohl für Arbeitszwecke als auch für seine eigenen Haustierprojekte zu lernen. Gal spricht in diesem Material auch über die Vor- und Nachteile einiger von ihnen.

Trotz der Tatsache, dass ich bei der Arbeit am häufigsten mit Java, JS und Ruby arbeite, lerne ich gerne neue Sprachen und Frameworks. Es scheint mir, dass kontinuierliches Training dazu beiträgt, interessante neue Ideen zu entwickeln, die bei Bedarf zur Lösung eines bestimmten Problems verwendet werden können. Darüber hinaus hilft die funktionale Programmierung dabei, mehr über objektorientierte Programmierung zu verstehen, und die ständige Arbeit mit Rails ermöglicht es Ihnen, viele der Nuancen des Testens zu lernen (natürlich, wenn Sie üben). Das Problem ist, dass Sie sich früher oder später beim Erlernen anderer Sprachen fragen: Gibt es ein Ideal unter ihnen, in dem alle nützlichen Funktionen, die Sie in anderen gefunden haben, gesammelt würden?

Skillbox empfiehlt: Praktikum "Mobile Developer PRO" .
Wir erinnern Sie daran: Für alle Leser von „Habr“ - ein Rabatt von 10.000 Rubel bei der Anmeldung für einen Skillbox-Kurs mit dem Aktionscode „Habr“.

Ich möchte hinzufügen: Meine Einstellungen in Programmiersprachen stimmen möglicherweise nicht mit Ihren überein. In diesem Artikel beschreibe ich meine Erfahrungen, die ich in den letzten Monaten bei der Arbeit an Großprojekten und in meiner Freizeit gesammelt habe.

Ruby


Ich habe Ruby nur gelernt, weil seine Community ständig die Idee wiederholt, dass sich hier alles von Java unterscheidet, mit dem ich früher gearbeitet habe. Ich mag Ruby wirklich. Dies ist eine großartige Sprache mit einer großen Anzahl vorgefertigter Bibliotheken (wir nennen sie Edelsteine, Edelsteine), mit denen Sie schnell eine neue Anwendung entwickeln und verwenden können. Schienen - was man "hinsetzen und gehen" nennen kann.

Ruby ist eine objektorientierte Sprache, sodass der gesamte Code ungefähr den gleichen Stil hat, unabhängig davon, für welche Bibliothek Sie sich entscheiden. Die Community hier ist sehr mächtig: Programmierer ziehen es vor, vorhandene Bibliotheken zu ändern, anstatt jedes Mal eine neue zu erstellen (Beispiel ActiveRecord und Sequel). Mit dieser Funktion können Sie sich das Leben leichter machen.

Ruby ist zwar nicht schnell genug, wenn es um Leistung geht. Komponenten sind normalerweise „schwer“ und das Laden dauert lange. Das Üben mit Rails macht Spaß, aber das Ausführen von Anwendungen bedeutet Zeit und Geld. Heroku und AWS ECS sind Beispiele dafür: Sie müssen für RAM, Speicherplatz, Datenverkehr und Betriebszeit bezahlen. Darüber hinaus sollte berücksichtigt werden, dass die geschätzte Startzeit für eine Anwendung mit durchschnittlicher Größe 5 bis 10 Sekunden beträgt.

Javascript


Ich liebe JavaScript. Die meisten meiner Frontend-Projekte sind für das Web bestimmt, da jetzt jeder Zugriff auf den Browser hat. Dies ist eine relativ leicht zu erlernende Sprache, es ist sehr häufig, die Eintrittsschwelle ist niedrig. Die Entwicklertools sind ziemlich gut, die Implementierung von Prototyping mit JavaScript ist nur ein Traum. Die Community hat auch viele Mitglieder, die viel Wert auf die Verbesserung der Komponenten legen.

JS hat viele Mängel. Eine der wichtigsten ist die Aufteilung der Gemeinschaft in verschiedene Bereiche der Sprachentwicklung entsprechend ihren Präferenzen. Die Hauptunterscheidung liegt also in Typsystemen (Flow vs. TS), und die Ansätze zur Verwendung von Bibliotheken und allem anderen unterscheiden sich. Infolgedessen sind bei vielen Entwicklungen die Module einfach "roh".

Schnell


Nachdem ich mit den beiden vorherigen Sprachen gearbeitet hatte, begann ich Swift zu lernen. Ich brauchte die Sprache, um in meinem "Spiel des Entwicklers" voranzukommen. Anfangs war ich auf Stufe Null, weil ich nur wusste, wie man Anwendungen mit Native React erstellt. Im Prinzip war das genug, aber ich wollte mehr lernen.

Swift ist eine statisch typisierte Sprache. Ursprünglich wurde es für die Entwicklung von Anwendungen im Apple-Ökosystem erstellt, dann wurde es jedoch Open Source, sodass sie jetzt damit Anwendungen für Linux erstellen. Der Vorteil der Sprache besteht darin, dass darin geschriebene Anwendungen schnell geladen werden und der Kompilierungsprozess klar ist, sodass die Anzahl der Laufzeitfehler schrittweise minimiert wird.

Die Syntax der Sprache ist interessant und nicht zu schwer zu erlernen. Einige Funktionen helfen, Fehler und Probleme zu vermeiden. Wenn beispielsweise ein Teil des Codes eine Zeichenfolge "erwartet", ist eine fehlerhafte Übertragung einer Ganzzahl dort nicht zulässig. Auf diese Weise können Sie Fehler in der frühesten Phase des Entwicklungsprozesses erkennen und korrigieren.

Warum ist Swift nicht mein Held? Tatsache ist, dass es nicht so einfach ist, in Swift in anderen Editoren als Xcode zu schreiben. Normalerweise benutze ich Vim, andere Editoren sind langsamer. Irgendwie habe ich VSCode und Atom ausprobiert, aber sie haben mir nicht wirklich gefallen. Vielleicht werde ich mich am Ende auf die Swift-CLI konzentrieren, mit der Sie Plugins für den Editor erstellen können, aber nicht jetzt. Swift verfügt auch nicht über eine statische Kompilierung. Um die CLI verwenden zu können, müssen Sie Ihre Umgebung mit Swift konfigurieren. Dies ist normal für Mac-Anwendungen, aber die Server sind Linux.

ReasonML


Ich bin sehr zufrieden mit dieser neuen Syntax und dem neuen Toolkit für Ocaml, die von Facebook entwickelt wurden. Das Tulkit ist ziemlich ausgereift, es gibt viele Funktionen. Gute sind OPAM, der Paketmanager, sowie Merlin und OCaml / Reason. All dies funktioniert gut mit Vim. Und selbst wenn Sie die Autocomplete-Engine und andere Funktionen nicht erwähnen. Die Entwicklertools hier sind sehr gut.

Reason kann in JS mit BuckleScript kompiliert werden, das ausführbares JS aus Reason / OCaml-Code generiert. Das ist erstaunlich, denn in diesem Fall erhalten wir vollständig typisierte Systeme mit hervorragender JS-Interaktion und können auch die erforderlichen Bibliotheken verwenden.

Das einzige, was mir nicht gefällt, ist, dass ich viele Typdefinitionen nur für die Verwendung von Abhängigkeiten erstellen muss. Dies ist jedoch nichts, da wir nicht das gesamte Modul zusammenstellen müssen, sondern nur die Eingabe / Ausgabe der spezifischen Funktion / Klasse / Methode, die wir verwenden. All dies funktioniert sehr schnell und ohne Probleme.


Die Schwierigkeit beim Erstellen einer nativen Reason-Anwendung stellte sich in der Verwendung einiger Bibliotheken heraus. Dies ist hauptsächlich OCaml, aber da OCaml und Reason austauschbar sind, habe ich die Chrome-Erweiterung verwendet, um mit Reason-Code zu arbeiten. Es stellte sich heraus, dass es einen OCaml-Code gibt, der nicht in Reason konvertiert werden kann, möglicherweise aufgrund eines Mangels an PPX in der Chrome-Erweiterung. PPX, so wie ich es verstehe, ist eine Syntaxerweiterung ein Makro, das Code konvertiert. Dies ist ein bisschen wie ein Babel-Plugin.

Reason / Ocaml unterstützt übrigens kein Multi-Core, dafür gibt es Lwt. Aber für diese Bibliothek gibt es noch keine verständlichen Handbücher!

Die Einstiegsschwelle für OCaml / Reason ist sehr hoch, was ein wenig frustrierend ist. Die Community ist nicht zu entwickelt und nur wenige Leute erklären seltsame Dinge gut. Vielleicht ändert sich dies im Laufe der Zeit.

Golang


Einfach eine fantastische Sprache. Es ist leicht zu erlernen, der Code wird kompiliert und läuft problemlos. Es gibt Unterstützung für Multi-Core-Systeme und viele andere nützliche Funktionen. Die Community ist mit einer großen Anzahl von Spezialisten ziemlich entwickelt.

Die Tatsache, dass in Go viele leistungsstarke Module und Anwendungen wie Docker, Kubernetes und CockroachDB geschrieben sind, bedeutet, dass Sie eine Infrastruktur-Binärdatei für beispielsweise Raspberry pi in Ihrer Anwendung erstellen können.

Das Fehlen von Generika (die in einer der nächsten Versionen hinzugefügt werden können) ist seltsam, da bei der Verwendung von Grafiken, Bäumen und Algorithmen "strukturelle" Schwierigkeiten auftreten. Ich würde es vorziehen, wenn der Compiler alles für mich erledigt.

Außerdem ist das Problem für mich nicht ganz klar, modulares VGO-System. Im Laufe der Zeit werden wir mehr darüber erfahren, da sich die Community allmählich entwickelt, aber bisher gibt es nur wenige Informationen. Die Sprache selbst ist ziemlich komplex. Dies ist kein Grund, es nicht zu benutzen, aber im Moment vermeide ich die Vollzeitarbeit mit Golang. Er ist sozusagen langweilig. Vielleicht werde ich im Laufe der Zeit meine Ansichten überdenken.

Kristall


Wir haben mit Ruby angefangen, also schlage ich vor, Crystal zu beenden.

Dies ist eine der neuen Sprachen, die immer noch nicht auf Version 1.0 kommt, die fast wie Ruby aussieht, aber statisch typisiert und schnell ist! Es bietet Entwicklern eine Vielzahl von Funktionen, darunter optionale Typen, CSP und vieles mehr. Es gibt einige neue Crystal-Webframeworks wie Lucky und Amber. Es gibt Kemal, das wie Sinatra ist, aber für Crystal gibt es ORMs.

Da die Sprache jedoch noch jung ist, ist sie noch nicht für den aktiven Gebrauch bereit. Zum Beispiel möchte ich, dass Crystal alle Kerne verwendet, wie z. B. Go. Ein Editor mit Autocomplete und Typhinweisen beim Hover wäre ebenfalls nicht überflüssig. Ich bin ein wenig besorgt über die Idee, dass Crystal möglicherweise nicht auf Version 1.0 kommt. Ich hoffe aufrichtig, dass es ihm gelingt.

Was ist Ihre Lieblingsprogrammiersprache und warum?

Skillbox empfiehlt:

Source: https://habr.com/ru/post/de424591/


All Articles