Was sollte ein Python-Entwickler wissen, wenn er Ruby lernt? [geschlossen]

16

Ich bin seit ungefähr 18 Monaten ein Python-Programmierer, der aus einem Praktikum und einigen Nebenprojekten besteht, und ich betrachte mich in der Sprache als ziemlich vertraut.

Allerdings scheint Ruby im Programmierbereich viel Aufmerksamkeit zu schenken, aber nicht mehr viel Python.

Gibt es also beim Erlernen von Ruby pythonische Dinge, die in Ruby nur schlechte Praktiken sind? Was muss ich beachten und was muss ich vermeiden?

CJ
quelle
4
Ich habe immer als Ruby-Programmierer überlegt, ob ich Python lernen sollte, weil es alles ist,
worüber
Trotz des Rummels scheint Python immer noch doppelt so häufig verwendet zu werden wie Ruby (zumindest laut TIOBE -> tiobe.com/index.php/content/paperinfo/tpci/index.html ).
Daniel Scocco
10
Anstatt ein "Python-Programmierer" oder ein "Ruby-Programmierer" zu sein, sollten Sie versuchen, ein großartiger Programmierer zu sein. Dann können Sie jede Sprache verwenden, die Sie möchten, und zu gegebener Zeit zu neuen wechseln.
Blackjack

Antworten:

31

Ich habe Python 2003-5 gemacht, als ich ein Plone / Zope-Berater war. Dann fing ich 2006 an, Ruby abzuholen. Ich habe nie zurückgeschaut. Ich denke, verschiedene Leute fühlen sich mit verschiedenen Programmiersprachen und -kulturen wohler, aber für mich fühlt sich Ruby viel besser als Python.

Ich persönlich denke, dass Python im Vergleich zu Ruby das zuverlässige Arbeitspferd ist, das auch ein bisschen souverän und langweilig ist. Ruby macht viel mehr Spaß. Es ist eine hübschere Sprache und kann dazu gebracht werden, eine Menge lustiger und unkonventioneller Dinge zu tun, die die Praktizierenden immer wieder begeistern. Ich habe gehört, dass Python-Leute Ruby angreifen, weil er zu gefährlich ist, weil es zu einfach ist, Klassen wieder zu eröffnen und solche wilden und verantwortungslosen Dinge zu tun. Aber das ist ein Teil dessen, was Ruby für mich zu einer Action-Abenteuer-Comedy-Romanze macht. Im Gegensatz dazu ähnelt Python eher Ikea-Möbeln: Es ist angenehm, komfortabel und zuverlässig - aber es wird Sie niemals überraschen und Ihnen den Atem rauben.

Die beiden besten Dinge an Ruby sind aus meiner Sicht die beiden Dinge, die es scharf von Python unterscheiden. Erstens wird Ruby stark von Perl beeinflusst. Python scheint stolz darauf zu sein, Anti-Perl zu sein. Aber das Zeug, das Ruby von Perl ausgeliehen hat, ist von großem praktischem Wert. Nehmen Sie zum Beispiel reguläre Ausdrücke. In Ruby können Sie natürlich reguläre Ausdrücke schreiben, z if mystring =~ /^\s+hello word!/ .... In Python nicht so sehr, weil Python so anal ist, dass alles einer einheitlich vorhersagbaren Syntax folgt. In Ruby erhalten Sie STDIN sofort mit input = STDIN.read. In Python müssen Sie import sysund dann sys.stdin.read(). Dies sind nur zwei Beispiele, bei denen Pythons Versuch, sich von Perl zu distanzieren und so vorhersehbar regelmäßig zu sein, von Rubys Bereitschaft übertroffen wird, das zu tun, was sich in jedem Fall richtig anfühlt.

Das andere, was Ruby von Python unterscheidet, ist, dass Ruby Lisp viel näher kommt, während Python so ziemlich eine zwingende Programmiersprache ist. Ich denke, das ist ein großes Plus für Ruby.

Es gibt viele Lisp-ähnliche Funktionen von Ruby, die es ermöglichen, in Ruby mit weniger Code mehr zu erreichen als in Python. Beispielsweise gibt jede Anweisung und Kontrollstruktur in Ruby einen Wert zurück: Sie können in Ruby davonkommen, ohne die returnAnweisung zu verwenden. Sogar ifAnweisungen werden zu einem Wert ausgewertet, sodass Sie solche Dinge schreiben können

result = if output == 'hello'
           [some code here]
           "world"
         else
           [some other code here]
           "there"
         end

In Python müssten Sie schreiben

if output == "hello":
  [some code here]
  result = "world"
else:
  [some other code here]
  result = "there"

Mit Python können Sie result =zweimal tippen . Das ist nicht sehr TROCKEN (Wiederholen Sie sich nicht). Es gibt viele Fälle wie diesen, in denen Ruby aufgrund seiner Lisp-ähnlichen Eigenschaften trockener als Python ist. Matz, der Schöpfer von Ruby, stammte aus Lisp.

Einige Leute sagen, dass Ruby Python auch bei der Metaprogrammierung (auch bekannt als dynamische Programmierung) in den Hintern tritt. Die Leute in Python antworten entweder damit, dass Metaprogrammierung zu gefährlich ist, oder dass Sie theoretisch alle Metaprogrammierungsschritte, die Ruby in Python ausführen kann, auf andere Weise ausführen können. Aber alle sind sich einig, dass Metaprogrammierung in Python weitaus seltener vorkommt als in Ruby. Und das ist schade, denn Metaprogrammierung ist eine Reise.

Ich denke, es ist wahrscheinlich wahr, dass am Ende des Tages Ruby und Python beide die Arbeit erledigen können. Ruby und Python sind im Vergleich zu C und Java fast dasselbe. Sie sind ausdrucksstarke, produktive Hochsprachen.

Es kommt also auf Ihre Persönlichkeit an.

Möchten Sie, dass die Dinge vorhersehbar, regelmäßig und sicher sind? Gefällt dir der imperative Programmierstil? Möchten Sie vielleicht eines Tages für Google arbeiten? Denken Sie, dass Perl eine chaotische Höllenbrut ist? Bleib bei Python.

Haben Sie große Freude daran, den absolut präzisesten Weg zu finden, um ein Programmierergebnis zu erzielen? Langweilen Sie sich bei Regelmäßigkeit und Gleichmäßigkeit? Möchten Sie die Freiheit haben, Code in einem ganz eigenen Stil zu schreiben, und viel Platz haben, um sich Ihre eigenen coolen Tricks auszudenken? Fühlst du mehr eine Affinität zu Lisp als zu C? Haben Sie große Bewunderung für Perls epochalen Beitrag zur Softwareprogrammierung, wünschen sich aber nur, dass er etwas weniger kryptisch und hässlich sein könnte? Denken Sie an Code, wie andere an Poesie? Probieren Sie Ruby aus.

Dan
quelle
11
"Und das ist schade, denn Metaprogrammierung ist eine Reise" ... Und genau wie eine Reise wird es für eine Nacht großartig sein, aber irgendwann wachst du morgens auf und hast vergessen, was du getan hast. Ich denke, dass die Metaprogrammierung in Ruby überbetont ist, und ich bevorzuge Ruby gegenüber Python. Die meisten Lösungen von Ruby für Syntaxprobleme
lauten:
23
Was? result = "world" if output=="hello" else "there"ist vollkommen gültiges Python (und drei Zeichen kürzer).
Tim Pietzcker
3
@ Tim OK, danke, dass du mich korrigiert hast. Aber können Sie dasselbe mit einer if / elsif / elsif / else-Anweisung tun - dh if / elif / elif / else in Python? Können Sie dasselbe tun, auch wenn die if- oder else-Klausel mehrere Anweisungen enthält?
Dan
1
Warten Sie, Python hat keinen ternären Operator?
PP.
3
"Matz, der Schöpfer von Python, hat einen Lisp-Hintergrund." Warten Sie ... AFAIK Matz ist Ruby Schöpfer ...
Eimantas
6

Es hängt davon ab, ob.

Für mich ist Python viel einfacher zu verstehen als Ruby, und beide Sprachen haben einen unterschiedlichen Zweck.

Python ist eher eine klassische Sprache mit vielen niederen Phantasiesachen, die es sauber und einfach halten, verglichen mit beispielsweise C. Python hat nicht den Ehrgeiz von Ruby, der für mich viel mehr High-Level-Funktionen bietet.

Es schadet Ihnen nicht, Ruby zu lernen, Sie werden neue Dinge entdecken, aber seien Sie sich bewusst, dass Python den einfachen Programmierparadigmen, die den Erfolg von C ausmachten, mit vielen Produktivitätssteigerungen näher kommt. Ruby ist eher für Leute gedacht, die generell mehr über Programmierkonzepte erfahren möchten: Schema und all diese "überlegenen" Sprachen.

jokoon
quelle
3

Kurze Antwort: Ja und ja.

Das Erlernen einer neuen Sprache ist fast immer nützlich, und dies gilt insbesondere für Ruby, da Rails immer noch sehr beliebt ist. Und ja, wenn Sie Python gut kennen, können Sie Ruby leicht erlernen. Sie haben einige syntaktische Unterschiede und unterschiedliche Namenskonventionen, aber es gibt auch viele Gemeinsamkeiten.

Es ist keine große Investition, und es ist immer von Vorteil, mehr Werkzeuge in Ihrer Werkzeugkiste zu haben.

(Ich benutze Python seit ungefähr 10 Jahren und habe Ruby letztes Jahr aufgenommen. Zur Zeit arbeite ich in Vollzeit im RoR-Projekt.)

shang
quelle
2

Alles hat eine Nische. Zum Beispiel ist Python (Django) ein erstklassiger Bürger in GoogleApp Engine, während es die Sprache oder die Wahl für viele bioinformatische Projekte ist. Python hat eine Menge Marktwert (ich bekomme eine Reihe von unerwünschten Jobaussichten, nur weil ich viel mit Python gemacht habe), aber Ruby auch - in verschiedenen Bereichen. Wie Sie sicherlich schon oft hier gehört haben, wird es Ihnen immer helfen, mehr Sprachen zu lernen. Lernen Sie also Ruby. Wird es kompliziert sein? Es ist viel einfacher als COBOL zu lernen, da die verfügbaren Sprachen und Frameworks einander ähnlich sind. Ein Beispiel sind Rubys Edelsteine und Pythons Pip .

Denken Sie daran, dass Sprachen Werkzeuge sind und jedes Werkzeug einen Zweck hat. Je mehr Werkzeuge Sie kennen, desto schneller, einfacher und korrekter können Sie das Baumhaus bauen.

Arcege
quelle
Ich wollte in die gleiche Richtung antworten, hoffe, Sie haben nichts dagegen, die Bearbeitung ...
Dimitrios Mistriotis
2

Soll ich Rubin lernen? Ja.

Das Erlernen einer neuen Sprache lohnt sich immer (vor allem, wenn es ein anderes Programmierparadigma als das von Ihnen bekannte durchgesetzt hat) und kann Sie manchmal auch dann kompetenter machen, wenn Sie in anderen Sprachen programmieren. Zum Beispiel habe ich die meiste funktionale Programmierung, die ich von Lisp kenne, übernommen und ich wende sie an, wenn ich sie für Python und Ruby benötige.

Wird es schwierig sein? Wenn Sie Python gelernt haben, können Sie sicher auch Ruby lernen.

Es ist auch nützlich, wenn Sie jetzt nach einem Job suchen. Es zeigt, dass Sie neugierig auf Technologie sind und Dinge selbst lernen können.

Auf c2.com gibt es einen guten Vergleich zwischen Ruby und Python .

Trasplazio Garzuglio
quelle