Oto cytat z przemówienia PyCon 2011 :
Przynajmniej w naszym sklepie (Argonne National Laboratory) mamy trzy zaakceptowane języki do obliczeń naukowych. W tej kolejności są to C / C ++, Fortran we wszystkich jego dialektach i Python. Zauważysz absolutny i całkowity brak Ruby, Perl, Java.
Było to w bardziej ogólnym kontekście obliczeń o wysokiej wydajności. To prawda, że cytat pochodzi tylko z jednego sklepu, ale inne pytanie o języki dla HPC wymienia Python jako jeden do nauki (a nie Ruby).
Teraz rozumiem, że C / C ++ i Fortran są używane w tym obszarze problemów (i Perl / Java nie jest używany). Ale jestem zaskoczony, że byłaby zasadnicza różnica w użyciu Pythona i Ruby w HPC, biorąc pod uwagę, że są one dość podobne. (Uwaga - jestem fanem Pythona, ale nie mam nic przeciwko Ruby).
Czy jest jakiś konkretny powód, dla którego jeden język wystartował? Czy chodzi o dostępne biblioteki? Niektóre funkcje językowe? Społeczność? A może po prostu historyczna zaraźliwość i mogło pójść w drugą stronę?
źródło
Odpowiedzi:
Rozwinę mój komentarz.
Myślę, że istnieje kilka czynników, które wpłynęły na użycie Pythona w informatyce naukowej, ale nie sądzę, aby były jakieś ostateczne historyczne punkty, w których można by powiedzieć: „Tak, to jest powód, dla którego Python jest używany nad Ruby / cokolwiek innego. „
Wczesna historia
Python i Ruby są mniej więcej w tym samym wieku - według Wikipedii Python został oficjalnie wydany po raz pierwszy w 1991 roku, a Ruby w 1995 roku.
Jednak Python zyskał na znaczeniu wcześniej niż Ruby, ponieważ Google już używał Pythona i szukał programistów Pythona na przełomie tysiącleci. Ponieważ nie jest tak, że mamy wyselekcjonowaną historię użycia języków programowania i ich wpływ na ludzi, którzy ich używają, teoretyzuję, że to wczesne przyjęcie Pythona przez Google było dużym czynnikiem motywującym dla osób, które chcą rozszerzyć działalność poza używanie Matlaba, C ++, Fortran, Stata, Mathematica itp.
Mianowicie chodzi mi o to, że Google używał Pythona w systemie, w którym miały tysiące maszyn (myśl równoległość i skalowanie) i stale przetwarzały wiele milionów punktów danych (ponownie, skalowanie).
Zbieg zdarzeń
Obliczenia naukowe kiedyś były wykonywane na specjalistycznych maszynach, takich jak SGI i Crays (pamiętasz je?), I oczywiście FORTRAN był (i nadal jest) szeroko stosowany ze względu na jego względną prostotę i dlatego, że można go łatwiej zoptymalizować.
W ciągu ostatniej dekady sprzęt towarowy (czyli rzeczy, na które możesz sobie pozwolić, nie będąc milionerami) przejął naukową i ogromną sferę komputerową. Spójrz na 500 najlepszych obecnie rankingów - wiele najlepszych superkomputerów na świecie zbudowanych jest ze zwykłego sprzętu Intel / AMD.
Python pojawił się w odpowiednim czasie, ponieważ Google ponownie promowało Pythona, a Google korzystał ze sprzętu towarowego i mieli tysiące maszyn.
Dodatkowo, jeśli zagłębisz się w stare artykuły naukowe, pojawiły się one około 2000 roku.
Wcześniejsze wsparcie
Oto artykuł napisany dla Astronomical Data Analysis Software and Systems , napisany w 2000 roku, sugerujący Pythona jako język dla obliczeń naukowych.
Artykuł zawiera cytat o Pythonie:
Widać więc, że Python miał już trakcję z końca lat 90., ponieważ był funkcjonalnie podobny do istniejących wówczas systemów i ponieważ łatwo było zintegrować Pythona z takimi rzeczami jak C i istniejące programy. Opierając się na treści artykułu, Python był już w użyciu naukowym od czasu 1995-1996.
Różnica we wzroście popularności
Popularność Ruby eksplodowała wraz z rozwojem Ruby On Rails, który po raz pierwszy ukazał się w 2004 roku. Byłem na studiach, kiedy po raz pierwszy naprawdę usłyszałem gwar o Ruby, a było to około 2005-2006. django dla Pythona zostało wydane w tym samym czasie (lipiec 2005 według Wiki), ale społeczność Ruby wydawała się bardzo mocno skoncentrowana na promowaniu jego użycia w aplikacjach internetowych.
Z drugiej strony Python miał już biblioteki pasujące do obliczeń naukowych:
NumPy - NumPy oficjalnie zaczął działać w 2005 roku, ale dwie biblioteki, na których został zbudowany, zostały wydane wcześniej: Numeric (1995) i Numarray (2001?)
BioPython - biologiczna biblioteka komputerowa dla Pythona, pochodzi przynajmniej z 2001 roku
SAGE - Pakiet matematyczny z pierwszym publicznym wydaniem na początku 2005 roku
I wiele innych, choć nie znam wielu ich osi czasu (oprócz przeglądania stron pobierania), ale Python ma również SciPy (zbudowany na NumPy, wydany w 2006 roku), miał powiązania z R (język statystyk) w na początku XXI wieku dostał MatPlotLib, a także naprawdę potężne środowisko powłoki w ipython.
ipython został wydany po raz pierwszy na początku 2000 roku i ma wiele funkcji dodanych do niego, które sprawiają, że jest bardzo przyjemny w obliczeniach naukowych, takich jak zintegrowane wykresy matplotlib i możliwość zarządzania klastrami obliczeniowymi .
Z powyższego artykułu:
Dobra lista naukowych i numerycznych pakietów dla Pythona .
Wiele z tego wynika prawdopodobnie z wczesnej historii i względnej niejasności Ruby aż do 2000 roku, podczas gdy Python zyskał popularność dzięki ewangelizacji Google.
Więc jeśli oceniałeś języki skryptowe w latach 1995–2000, na co tak naprawdę patrzyłeś? Był Perl, który prawdopodobnie był na tyle inny pod względem składniowym, że ludzie nie chcieli go używać, a potem był Python, który miał jaśniejszą składnię i lepszą czytelność.
I tak, prawdopodobnie jest wiele samowzmocnienia - Python ma już wszystkie te wspaniałe, przydatne biblioteki do obliczeń naukowych, podczas gdy Ruby ma mniejszościowy głos opowiadający się za jego wykorzystaniem w nauce, a niektóre biblioteki wyrastają, jak SciRuby , ale Narzędzia Pythona dojrzewały w ciągu ostatniej dekady.
Społeczność Ruby wydaje się być o wiele bardziej zainteresowana dalszym rozwijaniem Rubiego jako języka internetowego, ponieważ tak naprawdę stał się dobrze znany, podczas gdy Python zaczął na innej ścieżce, a później stał się szeroko stosowany jako język internetowy.
źródło
Używałem Python intensywnie w aplikacjach inżynierskich i Ruby w aplikacjach internetowych.
Problem, który widzę w Ruby jako języku naukowym, polega na tym, że istnieje zbyt wiele opcji składni dla danej operacji.
Python został zaprojektowany z następującą przesłanką „Powinien być jeden - a najlepiej tylko jeden - oczywisty sposób na zrobienie tego”. To sprawia, że O wiele łatwiej jest odczytać czyjś kod i określać jego przeznaczenie. Jest to kluczem do wzajemnych ocen inżynierii itp.
Lubię Ruby i jest świetny do niektórych zadań, ale mój kod Ruby może być składniowo zupełnie inny niż kod innego programisty, który robi dokładnie to samo. Powoduje to zbyt dużą dwuznaczność w środowisku naukowym lub inżynieryjnym.
źródło
Domyślam się, że duża część tego polegałaby na matlabie przez wielu badaczy. Python ma alternatywy, takie jak szałwia . Podczas gdy rubin nie, a przynajmniej nie ma oczywistych.
Po drugie, zgodnie z Ruby FAQ , python jest zarówno proceduralny, jak i obiektowy, podczas gdy ruby maskaruje się jako język proceduralny. Jeśli piszesz mały skrypt do celów matematycznych, takich jak to, co robisz w Matlabie, paradygmat OO to ból głowy. Co więcej, wymusza odejście koncepcyjne od paradygmatów funkcjonalnych / proceduralnych, których używają badacze. Matematyka to nie OO. Matematyka jest funkcjonalna, a następnie proceduralne (pomyśl dowody logiczne).
Na koniec zauważ, że Ruby FAQ mówi, że ruby jest bardziej złożony niż Python. Programowanie zajmuje drugie miejsce wśród badaczy, a nie takich jak my.
źródło
1 + 1
wysyła komunikat+
do obiektu1
? To w żaden sposób nie zmienia struktury twojego programu.Kiedy BDFL (Guido van Rossum) po raz pierwszy napisał Python, celem było, aby był on tak zrozumiały jak zwykły angielski (propozycja finansowania DARPA), co wyeliminowałoby typowe błędy kodowania.
Jednym z najbardziej widocznych problemów jest użycie wcięcia do rozgraniczenia bloków. W językach, w których występują wyraźne ograniczniki instrukcji złożonych (np. Nawiasy klamrowe C, Pascal BEGIN / END), białe znaki zostaną zwinięte do pojedynczego znaku spacji przed przekazaniem kodu do leksera. Pozwoliłoby to na znaczne zróżnicowanie sposobu tworzenia kodu.
Dla profesjonalnych programistów nie stanowi to problemu, ponieważ wyszkolili się, jak sobie z tym radzić przez 30 lub więcej godzin tygodniowo ćwiczeń.
Dla innych profesjonalistów, dla których programowanie jest narzędziem, problem ten staje się poważnym problemem. Ta grupa obejmuje matematyków, fizyków, chemików, inżynierów itp.
Ponieważ Python redukuje błędy dla nieprofesjonalnych programistów, pozwala im zastanowić się nad problemem, który próbują rozwiązać, i nie musi zbytnio zajmować się mechaniką języka.
Jest to jeden z przykładów, dlaczego jest popularny poza zawodem programisty. Istnieją inne przykłady, które można wykorzystać do zilustrowania tego samego punktu, takie jak dołączone baterie, Zen of Python (
import this
), użycie humoru Monty Python i tak dalej.źródło
To świetna dyskusja tutaj, myślę, że posty tutaj naprawdę odpowiedziały, dlaczego python jest bardziej popularny w środowisku naukowym. Istnieją jednak kontrargumenty dla nauk ruby:
Ruby można kodować bardziej intuicyjnie niż Python (DSL itp.): biorąc pod uwagę odpowiednie użyte pakiety:
sprawdź bioruby: http://bioruby.org/ rezerwa sekwencji może być po prostu: s.reverse itp., jeśli używasz baz danych: interfejs API wiązania bazy danych Ruby jest prawdopodobnie lepszy niż python.
ruby pozwala na wyższy poziom abstrakcji w tym samym czasie, gdy jest zwięzły.
lepszy system zarządzania pakietami: klejnoty rubinowe są łatwiejsze w porównaniu do: setuptools, pip itp
Jednak adopcja Ruby była / będzie / będzie utrudniona przez jego złożoność. Myślę, że Lisp jest świetnym / potężnym językiem, ale dlaczego nie wystartował jako język ogólny? podobna sytuacja ma miejsce w przypadku rubinu - dziedziczy on dużą moc po seplenienie, małej rozmowie i perlu !:, ale tylko niektóre osoby faktycznie skorzystają z niego, aby uzyskać korzyści. W końcu może pozostać silny w niektórych obszarach niszowych / specjalnych (takich jak szyna w sieci, marionetka w konfiguracji), trudno jest „nie” programistom w pełni się nim cieszyć, ale może być dobrym przyjacielem programisty (widział jakiś komputer naukowcy lubią język: http://www.cleveralgorithms.com/nature-inspired/index.html )
Niektóre najnowsze aktualizacje: wygląda na to, że Python już przejął krajobraz. Ostatnio książki takie jak: http://www.amazon.com/Python-Data-Analysis-Wes-McKinney/dp/1449319793 i wiele innych książek (analiza danych, uczenie maszynowe itp.), Wszystkie są napisane w języku python jako używanym języku . Jeśli rubin chce nadrobić zaległości, potrzebuje poważnych wysiłków. Biorąc pod uwagę matplotlib w pythonie, prawdopodobnie jest to kilka osobolat, aby doprowadzić go do stanu, w którym jest teraz. O ile nie zostaną podjęte poważne wysiłki w rubinie, prawdopodobnie nie nadąży on za etapem analizy danych Pythona / obliczeń naukowych w ciągu najbliższych 2-3 lat.
źródło
Po dłuższym użyciu Pythona do analizy danych (pochodzącej z doświadczeń związanych z Ruby, Lua i R) pakiet numpy (i wiele powiązanych bibliotek naukowych) umożliwia „szybkie” wykonywanie obliczeń (szybkość podobna do C, ponieważ numpy jest napisany / zintegrowany z kodami C) z łatwością programowania w Pythonie.
Numpy istnieje od jakiegoś czasu, jego dostępność pomogła w zbudowaniu wielu innych powiązanych pakietów naukowych, takich jak scipy, pandy ... itd. Istnieją świetne narzędzia, które sprawiają, że Python jest świetnym ekosystemem dla naukowego przetwarzania danych, podczas gdy w Rubim, podobna szybsza matryca właśnie opracowywana jest biblioteka obliczeń (NMtrix: https://github.com/SciRuby/nmatrix ). Ta ogromna różnica czasowa sprawia, że python jest oczywistym wyborem do obliczeń naukowych.
źródło
Zastanawiam się nad tym samym. Myślę, że tak, jak powiedział Spencer Rathbun, z powodu proceduralnego aspektu Pythona. Jako, że sam jestem „nie-programistą”, uważam, że sposób pisania kodu w Ruby jest piękny, a środowisko Rails jest doskonałe pod względem łatwości użycia. Jednak podczas kodowania do celów naukowych (matematyka, biologia itp.) Zwykle myślisz w języku „matematycznym”, to znaczy nie przejmujesz się stwierdzeniami takimi jak
ale zależy ci bardziej
Myślę więc, że Ruby jest potężny, ponieważ wiele jego funkcji nie byłoby używanych w programie naukowym. Łatwiej jest myśleć w procedurach.
źródło
Python ma lepszą obsługę tablic N-wymiarowych dzięki pakietowi Numpy. Nie widziałem nic podobnego dla Ruby.
Python wydaje się być szybszy w obliczeniach numerycznych / naukowych, które zrobiłem. Nie mam żadnego dowodu poza tym, że kiedy napisałem podobne algorytmy w Pythonie i Ruby, algorytmy w Pythonie działały szybciej (YMMV).
źródło
Jednym z powodów jest to, że Python ma dobre wsparcie dla używania / integracji / wywoływania kodu C / C ++, podczas gdy według mojej wiedzy Ruby nie oferuje tego samego stopnia (łatwości) integracji. Oznacza to, że możesz napisać wysokowydajne komponenty kodu w C / C ++, a następnie użyć Pythona (tj. Języka wysokiego poziomu / łatwiejszego do zrozumienia), aby skleić całość. Wyobrażam sobie, że jest to również jeden z powodów jego wczesnego instytucjonalnego przyjęcia przez Google.
źródło
Myślę, że jednym z głównych powodów, dla których Python stał się tak popularny w dziedzinie nauki o danych, był czas / wysiłek (tj. Pieniądze), które moglibyśmy zaoszczędzić, aby rozszerzyć nasze skrypty o prawdziwe rozwiązanie (np. System oprogramowania). Za pomocą Pythona możemy łatwiej zbudować rozwiązanie systemowe na podstawie kodu, który napisaliśmy dla nauki danych.
Mam doświadczenie w wyszukiwaniu języka tłumacza z tą funkcją około 15 lat temu. W tamtym czasie wybrano Python, nie dlatego, że jest to idealny język do analizy danych, ale dlatego, że był to rzadki język OOP z szybkim / przenośnym interpreterem, który można również rozszerzać na interfejsy z innymi językami, takimi jak C / C ++ / Jawa. W przeciwieństwie do dzisiejszych czasów były to świetne, ale rzadkie funkcje do bezpośredniego budowania rozwiązań z kodu bazowego już zaimplementowanego do analizy danych.
Czas może być kolejnym decydującym czynnikiem w tworzeniu języka danych. 15 lat temu odkryliśmy, że w Pythonie istnieją już podstawowe pakiety, takie jak numeryczne i scipy, do obliczeń numerycznych, ale nawet nie wiedzieliśmy o istnieniu Ruby jako języka programowania. Pod koniec 2018 r. Mogłem znaleźć kilka projektów wykorzystujących Ruby do analizy danych. Może 10 lat później można zapytać, dlaczego Ruby jest tak popularna wśród AI.
źródło