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 sys
und 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 return
Anweisung zu verwenden. Sogar if
Anweisungen 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.