image

Язык программирования Python прошел большой путь с момента своего появления в 1990-х. Едва ли Гвидо Ван Россум знал, что Python станет одним из самых популярных языков в мире, в то время, когда он его разрабатывал. На сегодняшний день Python является одним из наиболее широко используемых языков программирования на планете и имеет множество различных применений. Будь то приложения корпоративного уровня, машинное обучение, модели искусственного интеллекта или работа в области Data Science, Python активно используется практически во всех процветающих отраслях и областях.

Текущий сценарий для Python


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

EDISON Software - web-development
Статья переведена при поддержке компании EDISON Software, которая дает дельные советы юниорам, а также проектирует программное обеспечение и пишет ТЗ на русском и английском.


Однако Python, являющийся открытым языком с большим и поддерживающим его сообществом, продолжает оставаться актуальным и находится на пике даже сегодня. Богатые библиотеки и встроенные функции делают его популярным среди организаций, предприятий, разработчиков и специалистов в области Data Science. Несмотря на то, что Java все еще используется для корпоративной разработки, ее актуальность в других областях близка к нулю. Если вы посмотрите вокруг, вы не найдете специалиста по машинному обучению, который разрабатывает и обучает модели на Java. Но несмотря на это, Java остается вторым по популярности языком среди разработчиков по всему миру.

Победа над Java


Python успешно смог обогнать Java в большинстве сфер. В том, что касается корпоративной разработки, новый язык программирования Go от Google представляет реальную угрозу для Java. Однако, по мере прогресса потребность в высокопроизводительных вычислениях растет как никогда. Таковы современные требования для Data Science и моделей искусственного интеллекта. Хотя можно подумать, что использование быстрых графических процессоров может помочь повысить скорость и эффективность, реальность далека от этого. Такой подход не удовлетворяет потребностям в обработке информации. Передовые приложения должны зависеть от других вещей для оптимальной работы и помощи ученым и разработчикам в достижении желаемых целей. В конечном итоге это побуждает организации и исследовательские институты искать надежные языки программирования. разработанные для нишевой задачи и обеспечивающие быструю работу.

Знакомство с миром Julia


Как уже было сказано, мир входит в эпоху, когда любимый всеми Python сталкивается с угрозами от нового игрока в мире языков программирования – Julia. Вирал Шах, генеральный директор Julia Computing, отмечает, что в начале 2000-х разработчики предпочитали использовать язык C для системного программирования, Java для корпоративной разработки, SaaS для аналитики и MATLAB для научных расчетов. Однако современные разработчики используют Rust для системного программирования, Go для корпоративных приложения, Python/R для аналитики и Julia для научных расчетов.

Однако сценарий не был таким несколькими годами ранее. Когда Julia не было на горизонте, люди собирались переходить с MATLAB на Python. Поскольку машинное обучение стало использоваться практически во всех известных нам приложениях, а библиотеки Python обеспечили гораздо более простую реализацию моделей машинного обучения, люди переключились на Python. Ранее MATLAB был лучшим вариантом для решения этих задач и помогал как в аналитике, так и в научных расчетах. Но было очевидно, что люди ищут простых для реализации решений, которые будут понятными, быстрыми, эффективными и масштабируемыми. И Python смог занять и нишу Java, и нишу MATLAB.

Каково место Julia?


Одно из ключевых отличий между Julia и Python заключается в том, как эти языки подходят к одной и той же задаче. В то время как Julia специально создана для решения задач, связанных с высокопроизводительными вычислениями, Python пришел к этому в процессе своего развития. Несмотря на то, что Python до сих пор был в состоянии отвечать вызовам индустрии, давайте согласимся, что он не был предназначен для этой работы. Разработчикам и исследователям посчастливилось позволить Python развиваться и наблюдать как он превращается в язык для быстрых вычислений. С другой стороны, Julia специально разработана с нацеленностью на высокую скорость работы.Этому языку всего несколько месяцев и он уже начал вызывать ажиотаж среди исследователей и специалистов по Data Science.

Стабильная версия Julia 1.2 была выпущена всего два месяца назад и уже была усовершенствована для эффективной работы с ресурсоемкими проектами в области Data Science. Прямо сейчас более 800 разработчиков вносят свой вклад в Julia на Github и помогают ему стать популярным языком.

Заключение


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



PS


Как прокомментировал torgeek: «Архитекторы NVIDIA добавили Julia в стек своих решений

Комментарии (38)


  1. MechanicZelenyy
    16.12.2019 23:35
    +2

    То что ссылка на стабильный релиз не доступна, отлично иллюстрирует перспективы языка: убийцей Python и Matlab он так и не стал, что впрочем связанно с объективными недостатками.


    1. Yermack
      18.12.2019 10:20

      Хотел было объяснить недоступность ссылки халатностью переводчика или автора статьи, но оказалось, что всё работает — зато мы вот так запросто судим о перспективах технологий


      1. MechanicZelenyy
        18.12.2019 10:46

        Потому что автор перевода обновил её и теперь она работает, однако ведет на релиз 1.3, супротив указанного 1.2. Но это так зануда mode on.


        1. MagisterLudi
          18.12.2019 11:11
          +1

          У меня работала с самого начала ссылка.


          1. MechanicZelenyy
            18.12.2019 11:21

            Ну с учетом того что мой комментарий был первый, то я один из первых читателей статьи и могу засвидетельствовать что ссылка изменилась, сначала она вела на неработающую страницу релиза 1.2, сейчас на работающую для 1.3


  1. sentyaev
    16.12.2019 23:57
    +3

    Мы не можем с Python2 на Python3 перейти, а вы говорите про Julia.


    1. Stas911
      17.12.2019 04:15

      Еще пара недель есть же!


  1. zuko3d
    17.12.2019 00:01
    +1

    В то время как Julia специально создана для решения задач, связанных с высокопроизводительными вычислениями

    Для этого уже существует C++ и пока что никто не смог подвинуть его с королевского места. Какие преимущества есть у Julia над плюсами?


    1. x67
      17.12.2019 00:39

      Наверное простота и скорость разработки. Не испошьзовал julia никогда, просто предположение.
      Питон действительно иногда выбешивает своей производительностью. Когда хочется быстро сразу и на pure python 3.8, а нельзя или можно с хаками и numpyами. Не, numpy хорош, но те, кто работал с векторами, например, в матлаб, наверняка помнят, насколько разработка в matlab была удобнее)


      1. zuko3d
        17.12.2019 01:06

        Интересный комментарий, но я интересовался преимуществами над С++, т.к. Julia (исходя из статьи) претендует на роль языка для высокопроизводительных вычислений.


        1. MagisterLudi
          17.12.2019 01:21

          1. MagisterLudi
            18.12.2019 11:57
            +1

            1. zuko3d
              18.12.2019 22:46

              В статье по ссылке динамическая типизация преподносится как плюс, хотя даже питон уже хочет отказаться от этого. Дальше читать не вижу смысла.

              p.s. Нет смысла измерять что-либо если вы не измеряете при этом погрешность. График некорректный.


        1. iroln
          17.12.2019 01:33
          +2

          Я бы по другому вопрос поставил, какие преимущества есть у C++ перед современными (и не очень) языками программирования, особенно теми, которые заточены для решения конкретных задач? С каждым новым стандартом он становится всё монстроузнее и сложнее.


          В Julia вы напишете гораздо меньше более понятного и высокоуровневого кода для решения той же задачи. При этом вы сможете гораздо быстрее отладить этот код, потому что язык динамический с опциональной типизацией, что позволяет запускать и отлаживать программы интерактивно. При этом код компилируется в нативный с использованием LLVM, поэтому производительность сопоставима с C++. Плюс из коробки удобное распараллеливание, векторизация для матричных вычислений и другие удобства языка, заточенного для scientific computing. И да, вам не нужно учить его 5 лет, чтобы не отстреливать себе ноги. :)


          1. KanuTaH
            17.12.2019 02:22

            Судя по тому же benchmarks game, результаты реализаций предлагаемых там алгоритмов на Julia весьма далеки от реализаций на C, во многих случаях в разы (в 2-3 раза, на задаче binary-trees в 6 раз). Это не называется "сопоставима".


            1. Yermack
              18.12.2019 10:40

              Там если коды посмотреть, можно заметить, что имплементации отличаются. Плюс на производительность у сей и плюсов влияет то с какими флагами вы собирали прогу, релиз или дебаг ли это, использовались ли библиотеки, а в случае с джулией использовались ли ванильные циклы или векторизованные операции, а это уже простите, сравнение с фортранновскими солверами, а также могут оказать влияние подключенные пакеты и использование средствами макросов всяких примочек типа fastmath и inbounds.


              Все эти бенчмаркинги такое себе мерило — нужно смотреть по конкретным задачам. Если мне для расчета спектров вдруг понадобились полиномы Эрмита, то на питоне можно запросто найти нужную библиотеку, а вот остальную прогу уже собирать самому, где в узких местах будут кошмарные потери производительности. На плюсах расчет проходит считанные минуты, но вот реализовать там эти несчастные полиномы, а затем включить в общую логику та еще головная боль.
              На джулии же, не найдя нужную библиотеку, мы запросто реализуем все что нужно, поэкспериментируем, оптимизируем и скорость будет может и ни как на сях, но вполне приемлемой. Так что Джулия — язык исследователя.
              P. S. Я б так и за вольфрамовскую математику топил бы если б она была бесплатной


            1. Yermack
              18.12.2019 10:44

              https://habr.com/ru/post/445134/#comment_19943428 хотя в некоторых случаях получается быстрее плюсов


          1. 0xd34df00d
            18.12.2019 18:48
            +1

            При этом код компилируется в нативный с использованием LLVM, поэтому производительность сопоставима с C++.

            «Поэтому» там вряд ли подходит. Хаскель вон тоже может компилироваться при помощи LLVM.


            1. iroln
              18.12.2019 19:53
              +1

              Да, верно. Лучше сказать "может быть сопоставим" без "поэтому". :)


      1. iroln
        17.12.2019 01:17
        +2

        А в чём именно удобство работы с матрицами и векторами в Matlab и неудобство в NumPy? NumPy спроектирован более правильно, во-первых, универсальные итераторы, которые позволяют делать срезы, транспонирование, reshape и различные views над одними и теми же данными в памяти, тогда как в Matlab всё по значению и чуть что, создаётся копия. В NumPy по возможности копия данных не создаётся. Плюс по возможности автоматическая векторизация там где в Matlab нужно делать repmat чтобы сопоставить размерности массивов (в последних версиях Matlab с этим вроде стало лучше, но не всегда).


        Ну и вообще, Python как язык общего назначения значительно удобнее и богаче чем Matlab. Для Python написано огромное количество пакетов, статические анализаторы, линтеры, вокруг языка сформировалась огромная экосистема. Это сразу чувствуется при решении любой задачи программирования. Matlab очень бедный, невыразительный язык, полный костылей, с убогой stdlib, который при том ещё более медленный чем Python (попробуйте использовать классы в Matlab и почувствуете разницу). В Matlab вы не можете сделать, например, так:


        function b = a()
        b = zeros(1, 10)
        
        c = b()(1:5)

        Вы получите ошибку: ()-indexing must appear last in an index expression.. То есть нарушается цепочка вызовов, тогда как в Python вы всегда можете сделать любую цепочку вызовов в любом месте.


        В Matlab вы не можете определить функцию в консоли, потому что там функции — это не объекты первого класса:


        Error: Function definition not supported in this context. Create functions in code file.

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


  1. CheY
    17.12.2019 01:17
    +1

    В анализе данных великолепие Питона не в самом Питоне, а в огромном количестве библиотек. Библиотек вылизанных, больших, некоторые из которых даже можно называть полноценными инструментами. И пока критическая масса таких библиотек не будет доступна в похожем виде на любом другом языке X — никто в анализе данных не пересядет на этот язык X. Как только это случится, то думаю не ошибусь, если скажу, что многие будут рады покинуть территорию Питона.
    Что интересно, думаю, большинство этих крупных библиотек для анализа данных и машинного обучения развиваются не благодаря Питону, а вопреки — вынося по сути весь свой core-функционал в код на C/C++, либо даже на Fortran'е.


  1. Vilaine
    17.12.2019 01:50

    В том, что касается корпоративной разработки, новый язык программирования Go от Google представляет реальную угрозу для Java.
    Мне кажется, авторы не слишком знакомы с корпоративной разработкой. Go еще вчера в модульность толком не умел, это же смешно говорить про альфа-версию ЯП рядом со словом «корпоративный». Видимо, перспективы Julia такие же.


    1. merhalak
      17.12.2019 02:44

      Java приложения толком на Jigsaw тоже ещё не мигрировали. Я про нетривиальные, а не микросервисы. Кто-то неторопливый ещё вообще на Java 6 ещё живёт.


  1. Gerrero
    17.12.2019 04:17

    А для эмбеддед задачь, кроме СИ, что-нибудь маячит на горизонте хотя бы в перспективе? Ассемблер не всчёт.


    1. oam2oam
      17.12.2019 05:35

      Исключительно для них я пробовал Ада (даже написал небольшую статью). В принципе — очень хорошо, даже приятно писать. К тому же, есть даже инструменты верификации и доказательства.

      Плохо одно — иногда чувствуешь себя страшно одиноким :)


    1. Lodin
      18.12.2019 06:51
      +2

      Rust. У него целая команда занимается оптимизацией языка под микроконтроллеры. И целую книгу написали.


  1. adictive_max
    17.12.2019 05:12

    Сможет ли Julia побороть Python так же, как Python поборол Java
    Я может что-то пропустил, но разве Python поборол Java? Они, вроде, как занимали почти не пересекающиеся ниши, так и занимают. Да и другие языки он если и потеснил, то не сильно. Возросла популярность не Python как языка, а тех предметных областей, в которых он широко применяется.

    Несмотря на то, что Java все еще используется для корпоративной разработки, ее актуальность в других областях близка к нулю.
    Я тоже так могу:
    Несмотря на то, что Python широко используется для Data Science, его актуальность в других областях близка к нулю.


    1. mmMike
      18.12.2019 08:52
      +3

      Есть лож и есть статистика.
      Когда популярность и распространенность языка оценивают по количеству глупых (точнее примитивных вопросов от ленивых людей) на ресурсах типа stackoverflow


    1. sshikov
      18.12.2019 19:49
      +1

      >почти не пересекающиеся ниши
      >широко используется для Data Science
      Вы знаете, там же широко используется также и Java (и особенно scala). Обычно в виде ETL, но ведь в реальных задачах без этого ETL не бывает никакого Data Science.

      А с учетом того, что есть мобильная разработка, где для андроида по большей части либо Java, либо котлин, вот эта вот фраза:

      >ее актуальность в других областях близка к нулю.

      на мой взгляд просто ложь. А андроид, между тем, это очень очень много разработки. И как раз актуальность питона в этой области близка к нулю реально (хотя это и возможно).


  1. Lodin
    18.12.2019 06:54
    +2

    Julia несколько месяцев? Што? Я про этот язык услышал ещё в 2014, до того, как познакомился с D и Rust. Может, это версии 1.0 столько, но сам-то язык развивается минимум лет 6 уже.


  1. Iv8
    18.12.2019 09:30

    Про Julia ничего не знаю, но есть ощущение, что вторая производная популярности питона поменяла знак.
    Еще недавно почти в любом проекте последний коммит вчера, или на прошлой неделе. Сейчас чаще год назад. Или пару. Или шесть лет назад. Для совместимости с Python 3 приходится править. И.т.д.


  1. Crandel
    18.12.2019 09:41

    Питон никогда не боролся с джавой. У разработчиков языка некогда не было такой цели. Была цель сделать простой и логически понятный язык, в котором все органично связано. И они своей цели добились


  1. SemyonSinchenko
    18.12.2019 09:42
    +3

    Из того, что я вижу — Julia сейчас вытесняет «научный» Python из физики и химии. Связано это действительно с нативной JIT-компиляцией и многопоточностью, которая позволяет людям без сторонних костылей (типа numba, которые не очень стабильны и не очень удобны) писать действительно быстрый код. Многие библиотеки для квантовой оптики, химии, квантовой механики и т.д. сейчас переписаны на Julia и активно поддерживаются. Julia это язык, созданный физиками для физиков. Даже индексация с единицы пришла из близкого физикам Fortran. Почему не C++? Потому что на Julia проще и быстрее прототипировать. В машинном обучении и Deep Learning сейчас Julia практически не используется. Преимущества JIT теряются, так как все «строительные блоки» уже написаны, а уровень готовых библиотек Julia проигрывает значимо. Сравните тот же Flux с Tensorflow или PyTorch и все сразу станет ясно. Нет никаких аргументов в пользу перехода с Python на Julia в промышленном машинном обучении или в исследовательских задачах Deep Learning. Скорее всего Julia так и останется языком научной среды.


  1. sheknitrtch
    18.12.2019 11:36

    Julia — интересный язык с понятным синтаксисом и удобной многопоточностью (привет пайтоновскому GIL). Позле ознакомления с туториалом возник вопрос: что они натворили со строками?

    julia> s = "\u2200 x \u2203 y"
    "? x ? y"
    
    julia> s[1]
    '?': Unicode U+2200 (category Sm: Symbol, math)
    
    julia> s[2]
    ERROR: StringIndexError("? x ? y", 2)
    [...]
    
    julia> s[3]
    ERROR: StringIndexError("? x ? y", 3)
    Stacktrace:
    [...]
    
    julia> s[4]
    ' ': ASCII/Unicode U+0020 (category Zs: Separator, space)
    


    Почему операция s[i] возвращает ошибку для индексов 2 и 3? Почему программисту нужно помнить внутреннюю кодироку строки и количество байт в каждом символе? В Python 3 эту проблему давно решили раз и на всегда.


    1. Pand5461
      18.12.2019 12:49
      +2

      С Юникодом всё становится сложно. Лучше бить пользователя по рукам и заставлять писать код в высокоуровневых терминах (нужно найти символ, найти подстроку/регулярку, развернуть строку и т.п.), чем прятать это за внешней "простотой" прямой индексации и платить за это производительностью, как сделали в Python.
      Объясняет Карпински
      Объясняет документация Раста



  1. Umpiro
    18.12.2019 15:47

    Мне, как практикующему Python, Julia показалась интересной, но полной различных сомнительных решений, в т.ч. синтаксических. Гвоздем в крышку стал имхо странный подход к пространству переменных. Может быть попробую позже, еще раз, когда переварю. Но сейчас, мне кажется, Julia, если и претендует на что-то, то в немного другой области, нежели Python.


  1. YuryB
    18.12.2019 22:48
    +1

    аналитика примитивного уровня. питон занял нишу там где нужен был интерактивный шел и разросся дальше через библиотеки. точно так же и ценность джавы не в джаве а jvm и фреймворках и всё это даже не за 7-10 лет с нуля делается