Вот цитата из выступления на PyCon 2011 :
По крайней мере, в нашем магазине (Аргоннская национальная лаборатория) у нас есть три общепринятых языка для научных вычислений. В этом порядке они являются C / C ++, Fortran во всех его диалектах и Python. Вы заметите абсолютное и полное отсутствие Ruby, Perl, Java.
Это было в более общем контексте высокопроизводительных вычислений. Конечно, цитата только из одного магазина, но в другом вопросе о языках для HPC также указан Python для изучения (а не для Ruby).
Теперь я могу понять, что C / C ++ и Fortran используются в этом проблемном пространстве (и Perl / Java не используется). Но я удивлен, что будет существенное различие в использовании Python и Ruby для HPC, учитывая, что они довольно похожи. (Примечание - я фанат Python, но ничего не имею против Ruby).
Есть ли какая-то конкретная причина, почему один язык взлетел? Это о доступных библиотеках? Некоторые особенности языка? Сообщество? Или, может быть, просто историческое происшествие , и оно могло пойти другим путем?
источник
Ответы:
Я буду расширять свой комментарий.
Я думаю, что есть несколько факторов, которые повлияли на использование Python в научных вычислениях, хотя я не думаю, что есть какие-то определенные исторические моменты, в которых вы могли бы сказать: «Да, именно поэтому Python используется над Ruby / чем-то еще. "
История ранних веков
Python и Ruby примерно одного возраста - согласно Wikipedia, Python был впервые официально выпущен в 1991 году, а Ruby - в 1995 году.
Тем не менее, Python приобрел известность раньше, чем Руби, так как Google уже использовал Python и искал разработчиков Python на рубеже тысячелетий. Так как у нас нет кураторской истории использования языков программирования и их влияния на людей, которые их используют, я буду теоретизировать, что это раннее принятие Python компанией Google стало большим стимулом для людей, стремящихся выйти за рамки простого использования Matlab, C ++, Фортран, Стата, Математика и др.
А именно, я имею в виду, что Google использовал Python в системе, где у них были тысячи машин (например, распараллеливание и масштабирование) и постоянно обрабатывал многие миллионы точек данных (опять же, масштабирование).
Событие слияния
Научные вычисления раньше выполнялись на специализированных машинах, таких как SGI и Crays (помните их?), И, конечно, FORTRAN широко использовался (и все еще используется) из-за его относительной простоты и потому, что его можно было легче оптимизировать.
В последние десять лет или около того, в сфере научных и массовых вычислений захватили товарные аппаратные средства (то есть то, что вы или я можем себе позволить, не будучи миллионерами). Посмотрите на текущие топ-500 рейтинга - многие из «суперкомпьютеров» с самым высоким рейтингом в мире построены на обычном оборудовании Intel / AMD.
Python пришел вовремя, так как Google снова продвигал Python, а Google использовал обычное оборудование, и у них было тысячи машин.
Плюс, если вы покопаетесь в каких-то старых статьях по научным вычислениям, они начали появляться примерно в эпоху 2000 года.
Ранее поддержка
Вот статья, написанная для программного обеспечения и систем для анализа астрономических данных , написанная в 2000 году, предлагающая Python как язык для научных вычислений.
В статье есть эта цитата о Python:
Итак, вы можете видеть, что у Python уже была тяга, восходящая к концу 90-х годов, потому что он был функционально похож на существующие системы в то время, и потому что было легко интегрировать Python с такими вещами, как C и существующие программы. Основываясь на содержании статьи, Python уже находился в научном использовании, начиная с 1995-1996 годов.
Разница в росте популярности
Популярность Ruby взорвалась вместе с ростом Ruby On Rails, который впервые появился в 2004 году. Я был в колледже, когда впервые услышал шум о Ruby, и это было примерно в 2005-2006 годах. django для Python был выпущен примерно в то же время (июль 2005 года, согласно Wiki), но внимание сообщества Ruby, казалось, было сосредоточено на продвижении его использования в веб-приложениях.
Python, с другой стороны, уже имел библиотеки, которые подходят для научных вычислений:
NumPy - NumPy официально запущен в 2005 году, но две библиотеки, на которых он был построен, были выпущены ранее: Numeric (1995) и Numarray (2001?)
BioPython - библиотека биологических вычислений для python, датируется как минимум 2001 годом
SAGE - Математический пакет с первым публичным выпуском в начале 2005 года
И многие другие, хотя я не знаю многих из их временных шкал (кроме простого просмотра их сайтов загрузки), но Python также имеет SciPy (построенный на NumPy, выпущенном в 2006 году), имел привязки с R (язык статистики) в в начале 2000-х получил MatPlotLib, а также получил действительно мощную оболочку в ipython.
ipython был впервые выпущен в начале 2000-х годов, и в него было добавлено много функций, которые делают его очень удобным для научных вычислений, например, интегрированный графический режим matplotlib и возможность управления вычислительными кластерами .
Сверху статья:
Хороший список научных и числовых пакетов для Python .
Так что, скорее всего, это связано с ранней историей и относительной неясностью Ruby до 2000-х годов, тогда как Python приобрел популярность благодаря евангелизации Google.
Итак, если вы оценивали языки сценариев в период с 1995 по 2000 год, на что вы действительно смотрели? Был Perl, который, вероятно, достаточно отличался синтаксически, чтобы люди не хотели его использовать, а затем был Python, который имел более четкий синтаксис и лучшую читабельность.
И да, вероятно, есть много самоусиления - у Python уже есть все эти замечательные полезные библиотеки для научных вычислений, в то время как у Ruby есть голос меньшинства, выступающий за его использование в науке, и есть некоторые библиотеки, такие как SciRuby , но Инструменты Python созрели за последнее десятилетие.
Сообщество Ruby в целом, похоже, гораздо больше заинтересовано в продвижении Ruby в качестве веб-языка, поскольку именно это действительно сделало его известным, в то время как Python начинал с другого пути, а позже стал широко использоваться в качестве веб-языка.
источник
Я широко использовал Python для инженерных приложений и Ruby для веб-приложений.
Проблема, которую я вижу в Ruby как научном языке, состоит в том, что для данной операции слишком много вариантов синтаксиса.
Python разработан с учетом следующей предпосылки: «Должен быть один - и желательно только один - очевидный способ сделать это». Это намного облегчает чтение чьего-либо кода и определение его намерений. Это ключ к экспертным оценкам для машиностроения и т. Д.
Мне нравится Ruby, и он отлично подходит для определенных задач, но мой код Ruby может синтаксически полностью отличаться от кода другого программиста, который делает то же самое. Это вызывает слишком много двусмысленности в научной или инженерной среде.
источник
По большому счету, большая часть исследователей будет полагаться на matlab . У Python есть альтернативы, такие как sage . В то время как рубин нет, или, по крайней мере, нет очевидных.
Во-вторых, согласно Ruby FAQ , python является как процедурным, так и объектно-ориентированным, тогда как ruby маскируется под процедурный язык. Если вы пишете небольшой скрипт для математических целей, например, что вы делаете в matlab, парадигма ОО - это головная боль. Не только это, но и заставляет концептуально отойти от функциональных / процедурных парадигм, которые используют исследователи. Математика это не ОО. Математика функциональна, за ней следуют процедурные (подумайте логические доказательства).
Наконец, обратите внимание, что в FAQ по Ruby говорится, что ruby сложнее, чем python. Программирование занимает второе место среди исследователей, а не первое, как мы.
источник
1 + 1
отправляет ли выражение сообщение+
объекту1
? Это не меняет структуру вашей программы в малейшей степени.Когда BDFL (Guido van Rossum) впервые написал Python, цель состояла в том, чтобы он был так же понятен, как и простой английский (предложение финансирования DARPA), что позволило бы устранить распространенные ошибки кодирования.
Одна проблема, которая очень заметна - это использование отступа для разделения блоков. В языках, которые имеют явные сложные разделители операторов (например, C-скобки, Pascal BEGIN / END), пробелы будут свернуты в один пробел перед передачей кода в лексер. Это позволило бы значительно варьировать способ написания кода.
Для профессиональных программистов это не проблема, потому что они приучили себя справляться с этим с 30 или более часов в неделю практики.
Для других специалистов, где программирование является инструментом, эта проблема становится серьезной проблемой. В эту группу входят математики, физики, химики, инженеры и т. Д.
Так как Python уменьшает количество ошибок для непрофессиональных программистов, он позволяет им думать о проблеме, которую они пытаются решить, и не должен так много заниматься механикой языка.
Это единственный пример того, почему он популярен вне профессии программиста. Есть и другие примеры, которые можно использовать для иллюстрации того же момента, такие как включенные батарейки, The Zen of Python (
import this
), использование юмора Монти Пайтона и так далее.источник
Это отличная дискуссия, я думаю, что посты действительно ответили, почему python более популярен в научном сообществе. Тем не менее, есть несколько контраргументов для рубиновых наук:
ruby может быть более интуитивно закодирован, чем python (DSL и т. д.): при условии правильного использования пакетов:
проверьте bioruby: http://bioruby.org/ резерв последовательности может быть простым: s.reverse и т. д., если вы используете базы данных: API связывания базы данных ruby, возможно, лучше, чем python.
Рубин позволяет более высокий уровень абстракций в то же время кратко.
Лучшая система управления пакетами: рубиновые гемы намного проще по сравнению с: setuptools, pip и т. д.
Однако, усыновление рубина было / будет / будет затруднено его сложностью. Я думаю, что Лисп - отличный / мощный язык, но почему он не стал общим языком? похожая ситуация здесь с ruby - он наследует много власти от lisp, светских разговоров и perl !: но на самом деле только часть людей будет использовать его для получения преимуществ. В конце концов, он может оставаться сильным в определенных нишевых / специальных областях (таких как рельс в сети, марионетка в конфигурации), «не» программистам трудно в полной мере наслаждаться этим, но это может быть хорошим другом программиста (видел некоторый компьютер ученым нравится язык: http://www.cleveralgorithms.com/nature-inspired/index.html )
Некоторое последнее обновление: кажется, что python уже захватывает весь ландшафт. Недавно такие книги, как: http://www.amazon.com/Python-Data-Analysis-Wes-McKinney/dp/1449319793 и многие другие книги (анализ данных, машинное обучение и т. Д.), Все написаны на python в качестве используемого языка. , Если рубин хочет наверстать упущенное, ему нужны серьезные усилия. Рассматривая matplotlib в python, вероятно, потребуется несколько человеко-лет, чтобы привести его в состояние, в котором он находится сейчас. Если в ruby не будут предприняты серьезные усилия, он, вероятно, не сможет догнать этап анализа данных Python / научных вычислений в ближайшие 2-3 года.
источник
После использования python для анализа данных в течение некоторого времени (исходя из опыта работы с ruby, lua и R) пакет numpy (и многие связанные с ним научные библиотеки) делает возможным «запуск» быстрых вычислений (скорость, аналогичная C, как numpy) написано / интегрировано с кодами C) с легкостью программирования на Python.
Numpy существует уже некоторое время, его наличие помогло создать множество других связанных научных пакетов, таких как scipy, pandas ... и т. Д. Там отличные инструменты делают python отличной экосистемой для научных вычислений, тогда как в Ruby подобная более быстрая матрица Библиотека вычислений находится в стадии разработки (NMtrix: https://github.com/SciRuby/nmatrix ). Эта огромная разница во времени делает Python очевидным выбором для научных вычислений.
источник
Мне было интересно это то же самое. Я думаю, что это, как сказал Спенсер Рэтбун, из-за процедурного аспекта Python. Будучи «не программистом», я нахожу прекрасным то, как вы можете писать код на Ruby, а инфраструктура Rails отлично подходит для простоты использования. Однако, когда вы пишете код для научных целей (математика, биология и т. Д.), Вы обычно думаете на «математическом» языке, то есть вас не волнуют такие высказывания, как
но ты больше заботишься о
Поэтому я считаю, что Ruby обладает мощью, так как многие его функции не будут использованы в научной программе. Проще просто думать в процедурах.
источник
Python лучше поддерживает N-мерные массивы с пакетом Numpy. Я не видел ничего подобного для Руби.
Python, кажется, быстрее в численных вычислениях / научных вычислениях, которые я сделал. У меня нет никаких доказательств, кроме того, что когда я написал подобные алгоритмы на Python и Ruby, алгоритмы Python работали быстрее (YMMV).
источник
Одна из причин заключается в том, что Python имеет хорошую поддержку для использования / интеграции / вызова кода C / C ++, тогда как, насколько мне известно, Ruby не предлагает такой же степени (простоты) интеграции. Это означает, что вы можете написать высокопроизводительные компоненты кода на C / C ++, а затем использовать Python (т. Е. Язык высокого уровня / проще на глазах), чтобы склеить все это вместе. Я полагаю, что это также является одной из причин его раннего институционального принятия Google.
источник
Я думаю, что одна из главных причин, почему Python стал настолько популярным для науки о данных, была из-за количества времени / усилий (то есть денег), которые мы могли бы сэкономить, чтобы расширить наши сценарии для реального решения (например, системы программного обеспечения). С помощью Python мы могли бы легче создавать системное решение на основе кода, который мы написали для науки о данных.
У меня есть опыт поиска переводчика с этой функцией около 15 лет назад. В то время Python был выбран именно потому, что это не идеальный язык для науки о данных, а потому, что это был редкий язык ООП с быстрым / переносимым интерпретатором, который также расширялся для взаимодействия с другими языками, такими как C / C ++ / Ява. В отличие от сегодняшнего дня, это были отличные, но редкие возможности для непосредственного построения решений из базового кода, уже реализованного для науки о данных.
Время может быть еще одним критическим фактором для создания языка науки данных. 15 лет назад мы обнаружили, что в Python уже есть базовые пакеты, такие как numeric и scipy для численных вычислений, но мы даже не знали о существовании Ruby как языка программирования. К концу 2018 года я мог найти несколько проектов, использующих Ruby для обработки данных. Возможно, через 10 лет можно было бы спросить, почему Ruby так популярен для ИИ.
источник