05.10.2018
Почему Python уже победил
Я занимаюсь разработкой математических моделей и алгоритмов на их базе. Не могу сказать за всех, но в среде разработчиков алгоритмов почему-то еще не очевидно, что Python уже всех победил.
Год назад stackoverflow привел статистику роста Python https://stackoverflow.blog/2017/09/06/incredible-g...

Месяц назад уже Economist опубликовал заметку с заголовком «Python становится самым популярным языком программирования». В ней, в частности, приводилась статистика поиска: за последние 12 месяцев американцы гуглили Python чаще, чем Ким Кардашьян (очень популярная звезда реалити-шоу), а по сравнению с 2010 годом Python ищут в три раза чаще, в то время как частота запросов на другие основные языки программирования осталась на том же уровне или снизилась.

Причины простые: Python стал основным языком машинного обучения, и растет вместе с резким ростом этой темы.

Вот статья со stackoverflow об этом https://stackoverflow.blog/2017/09/14/python-growi...

Справедливости ради, отмечу, что по метрикам TIOBE и RedMonk Python еще не лидер.

Какие же причины позволили Python победить в нише машинного обучения и позволят в дальнейшем стать языком номер 1, потеснив Java и C.
Скорость разработки против скорости работы
Классический алгоритмист борется за скорость работы алгоритма и скорость работы программы, не беря в расчет скорость разработки.

Алгоритмы, использующиеся массово, должны быть оптимизированы по скорости, а не по скорости разработки. А с точки зрения скорости работы нет ничего лучше, чем C.

Однако мне удавалось успешно (то есть, эффективней ожидаемого) работать на Python в следующих условиях:

  • Самый главный и жесткий критерий сдачи программы — скорость ее работы. Если программу можно хоть чуть-чуть ускорить, результат не засчитывается.
  • Результирующий код должен быть написан на C.
  • Время на работу есть, спешить не требуется.

В чем секрет?

Идеальный ход работы — быстро найти подход, потом быстро запрограммировать алгоритм, который потом будет быстро работать. Это похоже на то, как формируется молния — прощупываем разные пути, а когда оптимальный путь найден, всю энергию пускаем в него. Боковые ответвления при этом становятся не нужны.
Быстро найти подход — это исследовательская часть. На этом этапе код запускается ограниченное число раз, по сути, только на отладку. Для этой части я и использую Python. После этого оптимальный алгоритм переписываю на C. Большая часть кода остается на Python в исследовательской фазе.

Кстати, дублирование кода имеет еще один плюс: программу на C гораздо удобней отлаживать при наличии эквивалентной программы на Python. Из-за этого я даже в, казалось бы, очевидных случаях сначала пишу на Python, а уже потом переношу алгоритм на С.

Такой способ дает и высокую скорость работы, и высокую скорость разработки.

Надо еще заметить, что до реализации кода доходит в гораздо меньшем числе случаев, чем можно было бы подумать. Часто проекты останавливаются по внешним причинам. Так что большую часть времени результатом работы алгоритмиста является не программный код, а промежуточные отчеты. Здесь снова быстрый и удобный язык имеет колоссальные преимущества.
Python на стероидах
В машинном обучении Python эффективно существует благодаря другому способу разрыва компромисса между скоростью разработки и работы.

Python используется только как язык верхнего уровня, а с самими числами работают библиотеки написанные на языке C: numpy, scipy, pandas, tensorflow, и т. п. Здесь у нас вообще нет компромисса между скоростью работы и разработки. Конечно, если ваши потребности не выходят за рамки одного из фреймворков.
Универсальность
Python — универсальный язык. Его можно применять по чуть-чуть везде, из-за этого масса его пользователей больше, и из-за этого он будет подминать под себя конкурентов.

Неплохой фреймворк для машинного обучения Torch теряет популярность из-за того, что написан на Lua. Lua же как язык вполне неплох, но Python все-таки популярней.

Статистический язык R очень хорош и явно не собирается сдаваться, но разработчиков на Python больше и теперь будет больше всегда.
***
Такой двухуровневый подход имеет свои ограничения. Можно эффективно работать только крупноблочно, а выйти за пределы функциональности конкретной библиотеки машинного обучения оказывается очень сложно. Как только вы начнете работать с данными непосредственно на самом Python, скорость алгоритма резко снизится. И если итоговый алгоритм должен быть быстрым, такой подход не сработает.

В силу этого рано или поздно Python уйдет с пьедестала, и его убийца уже подрастает.

(to be continued)
Поделитесь
Еще почитать

Одевайте шлемы, улучшайте статистику.

Есть ТЗ — отлично. Просто спросить — тоже.

Сушильная машина полезней, чем кажется