Es gibt ein Zitat aus einem PyCon 2011-Vortrag , das lautet :
Zumindest in unserem Geschäft (Argonne National Laboratory) haben wir drei anerkannte Sprachen für das wissenschaftliche Rechnen. In dieser Reihenfolge sind dies C / C ++, Fortran in allen Dialekten und Python. Sie werden den absoluten und totalen Mangel an Ruby, Perl, Java bemerken.
Es befand sich im allgemeineren Kontext des Hochleistungsrechnens. Zugegeben, das Angebot stammt nur aus einem Shop, aber eine andere Frage zu Sprachen für HPC führt Python auch als eine auf, die es zu lernen gilt (und nicht Ruby).
Jetzt kann ich verstehen, dass C / C ++ und Fortran in diesem Problembereich verwendet werden (und Perl / Java nicht verwendet wird). Aber ich bin überrascht, dass es einen großen Unterschied in der Verwendung von Python und Ruby für HPC geben würde, da sie ziemlich ähnlich sind. (Hinweis - Ich bin ein Fan von Python, habe aber nichts gegen Ruby).
Gibt es einen bestimmten Grund, warum die eine Sprache abgehoben hat? Geht es um die verfügbaren Bibliotheken? Einige spezifische Sprachmerkmale? Die Gemeinde? Oder vielleicht nur ein historischer Zufall , und es hätte auch anders kommen können?
quelle
Antworten:
Ich werde meinen Kommentar erweitern.
Ich denke, es gibt ein paar Faktoren, die die Verwendung von Python im wissenschaftlichen Rechnen beeinflusst haben, obwohl ich glaube, dass es keine definitiven historischen Punkte gibt, an denen man sagen könnte: "Ja, das ist der Grund, warum Python über Ruby / irgendetwas anderem verwendet wird "
Frühe Geschichte
Python und Ruby sind ungefähr gleich alt - laut Wikipedia wurde Python 1991 und Ruby 1995 offiziell zum ersten Mal veröffentlicht.
Python wurde jedoch früher bekannt als Ruby, da Google bereits um die Jahrtausendwende Python verwendete und nach Python-Entwicklern suchte. Da es nicht so ist, als hätten wir eine kuratierte Geschichte der Verwendung von Programmiersprachen und ihrer Einflüsse auf die Benutzer, die sie verwenden, und ich werde die These aufstellen, dass diese frühe Einführung von Python durch Google eine große Motivation für Menschen war, die über die reine Verwendung von Matlab, C ++ hinausgehen möchten. Fortran, Stata, Mathematica usw.
Ich meine nämlich, dass Google Python in einem System verwendet hat, in dem es Tausende von Computern gab (denken Sie an Parallelisierung und Skalierung) und ständig viele Millionen Datenpunkte verarbeitet hat (wiederum Skalierung).
Ereigniskonflikt
Früher wurde wissenschaftliches Rechnen auf Spezialmaschinen wie SGIs und Crays durchgeführt (erinnerst du dich?), Und natürlich wurde (und wird) FORTRAN aufgrund seiner relativen Einfachheit und weil es einfacher zu optimieren war.
In den letzten zehn Jahren hat Commodity-Hardware (also Dinge, die Sie oder ich sich leisten können, ohne Millionäre zu sein) den wissenschaftlichen und massiven Computerbereich übernommen. Schauen Sie sich die aktuellen Top-500-Platzierungen an - viele der bestplatzierten Supercomputer der Welt sind mit normaler Intel / AMD-Hardware ausgestattet.
Python kam zu einem guten Zeitpunkt, da Google wieder Python bewarb und Google Standardhardware verwendete und sie Tausende von Maschinen besaßen.
Wenn Sie sich mit einigen alten Artikeln aus dem Bereich des wissenschaftlichen Rechnens befassen, tauchten sie in der Zeit um das Jahr 2000 auf.
Frühere Unterstützung
In diesem Artikel für Astronomical Data Analysis Software and Systems aus dem Jahr 2000 wird Python als Sprache für das wissenschaftliche Rechnen vorgeschlagen.
Der Artikel hat dieses Zitat über Python:
Sie können also sehen, dass Python bereits seit Ende der 90er Jahre bekannt ist, da es zu der Zeit funktionell mit den vorhandenen Systemen vergleichbar war und sich Python leicht in Dinge wie C und die vorhandenen Programme integrieren ließ. Basierend auf dem Inhalt des Artikels war Python bereits seit 1995-1996 im wissenschaftlichen Einsatz.
Unterschied im Beliebtheitswachstum
Rubys Popularität explodierte mit dem Aufstieg von Ruby On Rails, das erstmals im Jahr 2004 auf den Markt kam. Ich war auf dem College, als ich das erste Mal die Begeisterung für Ruby hörte, und das war zwischen 2005 und 2006. Django für Python wurde ungefähr im selben Zeitraum veröffentlicht (Juli 2005 laut Wiki), aber der Fokus der Ruby-Community schien sehr stark darauf gerichtet zu sein, seine Verwendung in Webanwendungen zu fördern.
Python hingegen verfügte bereits über Bibliotheken, die für das wissenschaftliche Rechnen geeignet waren:
NumPy - NumPy wurde 2005 offiziell gestartet, aber die beiden Bibliotheken, auf denen es aufbaute, wurden früher veröffentlicht: Numeric (1995) und Numarray (2001?).
BioPython - Biological Computing Library für Python, stammt mindestens aus dem Jahr 2001
SAGE - Math-Paket mit der ersten Veröffentlichung Anfang 2005
Und viele mehr, obwohl ich nicht viele ihrer Zeitpläne kenne (abgesehen vom Durchsuchen ihrer Download-Sites), aber Python hat auch SciPy (auf NumPy aufgebaut, 2006 veröffentlicht), das Bindungen mit R (der Statistiksprache) in Anfang der 2000er Jahre bekam MatPlotLib und bekam auch eine sehr leistungsfähige Shell-Umgebung in ipython.
ipython wurde zum ersten Mal in den frühen 2000er Jahren veröffentlicht und verfügt über viele Funktionen, die es für das wissenschaftliche Rechnen sehr nützlich machen, wie beispielsweise die integrierte Matplotlib-Grafik und die Fähigkeit, Rechencluster zu verwalten .
Aus obigem Artikel:
Gute Liste von wissenschaftlichen und numerischen Paketen für Python .
Ein Großteil davon ist wahrscheinlich auf die frühe Geschichte und die relative Dunkelheit von Ruby bis in die 2000er Jahre zurückzuführen, während Python dank Googles Evangelisation an Bedeutung gewonnen hatte.
Also, wenn Sie Skriptsprachen in der Zeit von 1995 bis 2000 evaluierten, was haben Sie wirklich gesehen? Es gab Perl, das wahrscheinlich syntaktisch so unterschiedlich war, dass die Leute es nicht verwenden wollten, und dann gab es Python, das eine klarere Syntax und bessere Lesbarkeit aufwies.
Und ja, es gibt wahrscheinlich eine Menge Selbstverstärkung - Python verfügt bereits über all diese großartigen, nützlichen Bibliotheken für das wissenschaftliche Rechnen, während Ruby über eine Minderheitsstimme verfügt, die für den Einsatz in der Wissenschaft plädiert , und es gibt einige Bibliotheken, die aufkeimen, wie SciRuby , aber Pythons Werkzeuge sind im letzten Jahrzehnt gereift.
Rubys Community im Allgemeinen scheint viel stärker an der Förderung von Ruby als Web-Sprache interessiert zu sein, da dies den Bekanntheitsgrad von Ruby erhöht hat, während Python einen anderen Weg eingeschlagen hat und später als Web-Sprache weit verbreitet wurde.
quelle
Ich habe Python ausgiebig für technische Anwendungen und Ruby für Webanwendungen verwendet.
Das Problem, das ich bei Ruby als wissenschaftliche Sprache sehe, ist, dass es zu viele Syntaxoptionen für eine bestimmte Operation gibt.
Python wurde mit der folgenden Prämisse entworfen: "Es sollte einen - und vorzugsweise nur einen - offensichtlichen Weg geben, dies zu tun." Dies macht es VIEL einfacher, jemanden Code zu lesen und seine Absicht zu bestimmen. Dies ist der Schlüssel für Peer Reviews für das Engineering usw.
Ich mag Ruby und es ist großartig für bestimmte Aufgaben, aber mein Ruby-Code könnte syntaktisch völlig anders sein als der Code eines anderen Programmierers, der genau dasselbe tut. Dies führt in einem wissenschaftlichen oder ingenieurwissenschaftlichen Umfeld zu vieldeutigen Ergebnissen.
quelle
Vermutlich ist ein großer Teil davon das Vertrauen vieler Forscher in matlab . Python bietet Alternativen wie Salbei . Während Ruby dies nicht tut, oder zumindest gibt es keine offensichtlichen.
Zweitens ist Python laut Ruby-FAQ sowohl prozedural als auch objektorientiert, wohingegen Ruby als prozedurale Sprache maskiert . Wenn Sie ein kleines Skript für mathematische Zwecke schreiben, wie Sie es in matlab tun würden, ist das OO-Paradigma Kopfschmerzen. Nicht nur das, sondern es zwingt einen konzeptuellen Sprung weg von den funktionalen / prozeduralen Paradigmen, die Forscher verwenden. Mathe ist nicht OO. Mathematik ist funktional, gefolgt von prozeduralen (Think Logic Proofs).
Beachten Sie schließlich, dass die Ruby-FAQ besagt, dass Ruby komplexer ist als Python. Die Programmierung steht bei den Forschern an zweiter Stelle, nicht an erster Stelle wie wir.
quelle
1 + 1
die Nachricht+
an das Objekt sendet1
? Das ändert nichts an der Struktur Ihres Programms.Als der BDFL (Guido van Rossum) Python zum ersten Mal schrieb, war das Ziel, dass es so verständlich ist wie einfaches Englisch (DARPA-Finanzierungsvorschlag), wodurch häufige Codierungsfehler beseitigt werden.
Ein Problem, das deutlich sichtbar ist, ist die Verwendung von Einzügen zur Begrenzung von Blöcken. In Sprachen mit explizit komplexen Anweisungsbegrenzern (z. B. C-Klammern, Pascal BEGIN / END) wird das Leerzeichen auf ein einzelnes Leerzeichen reduziert, bevor der Code in den Lexer eingegeben wird. Dies würde große Variationen in der Gestaltung des Codes ermöglichen.
Für professionelle Programmierer ist dies kein Problem, da sie sich darauf vorbereitet haben, mit 30 oder mehr Stunden pro Woche zu arbeiten.
Für andere Fachleute, bei denen das Programmieren ein Werkzeug ist, wird dieses Problem zu einem Hauptproblem. Diese Gruppe umfasst Mathematiker, Physiker, Chemiker, Ingenieure usw.
Da Python Fehler für nicht professionelle Programmierer reduziert, können sie über das Problem nachdenken, das sie zu lösen versuchen, und müssen sich nicht so sehr mit den Mechanismen der Sprache auseinandersetzen.
Dies ist nur ein Beispiel dafür, warum es außerhalb des Programmierberufs beliebt ist. Es gibt andere Beispiele, die zur Veranschaulichung desselben Punkts verwendet werden können, z. B. eingeschlossene Batterien, The Zen of Python (
import this
), die Verwendung von Monty Python Humor und so weiter.quelle
Dies ist eine großartige Diskussion hier. Ich denke, die Beiträge hier haben wirklich geantwortet, warum Python in der wissenschaftlichen Community beliebter ist. Es gibt jedoch einige Gegenargumente für die Rubinwissenschaften:
Ruby kann intuitiver als Python (DSL usw.) codiert werden: vorausgesetzt, die richtigen Pakete werden verwendet:
check bioruby: http://bioruby.org/ eine sequenzreserve kann einfach sein: am umkehren etc. wenn du datenbanken verwendest: ruby database binding API ist wohl besser als python.
rubin erlaubt eine höhere abstraktionsebene bei gleichzeitig knapper struktur.
Besseres Paketverwaltungssystem: Rubinsteine sind einfacher als Setuptools, Pip usw
Die Übernahme von Ruby wurde / wird jedoch durch seine Komplexität behindert. Ich denke, Lisp ist eine großartige / mächtige Sprache, aber warum hat sie sich nicht als allgemeine Sprache durchgesetzt? Ähnlich verhält es sich hier mit Ruby - es erbt eine Menge Power von Lisp, Smalltalk und Perl !: Aber nur eine Auswahl von Leuten wird es tatsächlich nutzen, um die Vorteile zu nutzen. Am Ende mag es in bestimmten Nischen- / Spezialbereichen (wie der Schiene im Web, der Marionette in der Konfiguration) stark bleiben, es ist für 'Nicht'-Programmierer schwierig, es in vollem Umfang zu genießen, aber es könnte der gute Freund des Programmierers sein (sah einen Computer) Wissenschaftler lieben die Sprache: http://www.cleveralgorithms.com/nature-inspired/index.html )
Jüngstes Update: Python scheint die Landschaft bereits zu übernehmen. Kürzlich wurden Bücher wie: http://www.amazon.com/Python-Data-Analysis-Wes-McKinney/dp/1449319793 und viele andere Bücher (Datenanalyse, maschinelles Lernen usw.) mit Python als Sprache geschrieben . Wenn Ruby aufholen will, braucht es einige ernsthafte Anstrengungen. In Anbetracht der Matplotlib in Python dauert es wahrscheinlich mehrere Mannjahre, bis der Zustand erreicht ist, in dem er sich jetzt befindet. Ohne ernsthafte Anstrengungen, die in Ruby unternommen werden, kann es wahrscheinlich nicht mit dem Stand der Python-Datenanalyse / wissenschaftlichen Berechnung in den nächsten 2-3 Jahren mithalten.
quelle
Nachdem Sie Python für eine Weile für die Datenanalyse verwendet haben (aufgrund von Erfahrungen mit Ruby, Lua und R), können Sie mit dem Numpy-Paket (und vielen verwandten wissenschaftlichen Bibliotheken) eine schnelle Berechnung durchführen (Geschwindigkeit ähnlich C, wie Numpy) wird mit C-Codes geschrieben / integriert) mit der Leichtigkeit der Programmierung in Python.
Numpy gibt es schon seit einiger Zeit. Aufgrund seiner Verfügbarkeit konnten viele andere verwandte wissenschaftliche Pakete erstellt werden, z. B. Scipy, Pandas usw. Mit diesen großartigen Tools ist Python ein großartiges Ökosystem für das wissenschaftliche Rechnen, wohingegen Ruby eine ähnlich schnellere Matrix ist Die Berechnungsbibliothek wird gerade entwickelt (NMtrix: https://github.com/SciRuby/nmatrix ). Dieser enorme Zeitunterschied macht Python zur offensichtlichen Wahl für das wissenschaftliche Rechnen.
quelle
Ich habe mich das gleiche gefragt. Ich denke, es liegt, wie Spencer Rathbun sagte, am prozeduralen Aspekt von Python. Als "Nicht-Programmierer" finde ich es sehr schön, wie Sie in Ruby programmieren können, und das Rails-Framework ist einfach zu bedienen. Wenn Sie jedoch für wissenschaftliche Zwecke (Mathematik, Biologie usw.) codieren, denken Sie normalerweise in einer "mathematischen" Sprache, das heißt, Sie interessieren sich nicht für Aussagen wie
aber du interessierst dich mehr für
Ich denke also, Ruby ist mächtig, dass viele seiner Funktionen in einem wissenschaftlichen Programm ungenutzt wären. Es ist einfacher, nur in Abläufen zu denken.
quelle
Python bietet mit dem Numpy-Paket eine bessere Unterstützung für N-dimensionale Arrays. Für Ruby habe ich noch nichts Ähnliches gesehen.
Python scheint im numerischen / wissenschaftlichen Rechnen, das ich durchgeführt habe, schneller zu sein. Ich habe keinen anderen Beweis, als wenn ich ähnliche Algorithmen in Python und Ruby geschrieben habe, die Python-Algorithmen liefen schneller (YMMV).
quelle
Ein Grund dafür ist, dass Python die Verwendung / Integration / Aufrufen von C / C ++ - Code gut unterstützt, wohingegen Ruby meines Wissens nicht den gleichen Grad an (einfacher) Integration bietet. Dies bedeutet, dass Sie die leistungsstarken Codekomponenten in C / C ++ schreiben und dann Python (dh eine Sprache auf hoher Ebene, die die Augen leichter macht) verwenden können, um das Ganze zusammenzufügen. Ich stelle mir vor, dass dies auch einer der Gründe für die baldige institutionelle Übernahme durch Google ist.
quelle
Ich denke, einer der Hauptgründe, warum Python in der Datenwissenschaft so populär wurde, war der Zeit- / Arbeitsaufwand (dh das Geld), den wir einsparen konnten, um unsere Skripte für echte Lösungen (z. B. Softwaresysteme) zu erweitern. Mit Python könnten wir einfacher eine Systemlösung auf der Basis des Codes erstellen, den wir für Data Science geschrieben haben.
Ich habe vor ungefähr 15 Jahren Erfahrungen mit der Suche nach einer Dolmetschersprache mit dieser Funktion. Zu dieser Zeit wurde Python als diejenige Sprache ausgewählt, nicht weil es die perfekte Sprache für die Datenwissenschaft ist, sondern weil es eine seltene OOP-Sprache mit schnellem / portablem Interpreter ist, die auch für die Schnittstelle mit anderen Sprachen wie C / C ++ / erweiterbar ist. Java. Anders als heutzutage waren dies großartige, aber seltene Funktionen zum direkten Erstellen von Lösungen aus dem für Data Science bereits implementierten Basiscode.
Die Zeit könnte ein weiterer kritischer Faktor für die Erstellung einer datenwissenschaftlichen Sprache sein. Vor 15 Jahren fanden wir heraus, dass es in Python bereits Basispakete wie Numeric und Scipy für numerische Berechnungen gab, aber wir wussten nicht einmal, dass Ruby eine Programmiersprache ist. Ab Ende 2018 konnte ich mehrere Projekte mit Ruby für Data Science finden. Vielleicht fragt man sich 10 Jahre später, warum Ruby für AI so beliebt ist.
quelle