https://habr.com/ru/company/piter/blog/500472/- Блог компании Издательский дом «Питер»
- Python
- Программирование
- Julia
- Изучение языков
Доброе утро, Хабр!
Обойма нашей литературы по Python постоянно
пополняется книгами самого
разного уровня. Тем не менее, сегодня мы хотели бы сегодня вынести на обсуждение эту статью, автор которой считает язык Julia жизнеспособной и перспективной альтернативой Python. Читайте, переходите по ссылкам и не забудьте поучаствовать в голосовании.
Если Julia по-прежнему кажется вам таинственным, не волнуйтесь. Фото Julia Caesar на Unsplash
Не поймите меня неправильно. Популярность Python по-прежнему гарантирована незыблемой поддержкой сообщества, в которое входят специалисты по computer science, data science и искусственному интеллекту.
Однако, если бы вам довелось посидеть за обедом в компании этих людей, вы бы убедились, насколько их возмущают недостатки Python. Мало того, что этот язык очень медленный, так он еще и требует обширного тестирования, и все равно дает ошибки во время исполнения, несмотря на предварительное тестирование. Этого достаточно, чтобы Python производил удручающее впечатление.
Именно поэтому все больше и больше программистов переходят на другие языки, среди которых особого упоминания заслуживают Julia,
Go и Rust. Julia прекрасно подходит для математических и технических задач, Go – для модульных задач, а Rust незаменим в системном программировании.
Поскольку в data science и искусственном интеллекте приходится иметь дело с массой математических проблем, Julia для них просто находка. Даже при весьма критическом рассмотрении оказывается, что у Julia есть такие достоинства, которым Python ничего не может противопоставить.
Дзен Python против ненасытности Julia
Изобретая новый язык программирования, его авторы стремятся сохранить в нем достоинства и устранить недостатки более старых языков.
Именно в таком ключе действовал Гвидо ван Россум в конце 1980-х, создавая Python: он стремился улучшить ABC. Последний был
слишком идеален для языка программирования — и из-за такой жесткости оказалось, что его легко учить, но сложно использовать в реальных проектах.
Напротив, Python весьма прагматичен. Это очевидно по кодексу
Дзен Python, отражающему намерения его создателей:
Красивое лучше уродливого.
Явное лучше неявного.
Простое лучше сложного.
Сложное лучше запутанного.
Развернутое лучше вложенного.
Разреженное лучше плотного.
Читаемость имеет значение.
Особые случаи не настолько особые, чтобы нарушать правила.
При этом практичность важнее безупречности.
[...]
Python сохранил многие достоинства ABC: например, удобочитаемость, простоту и понятность для начинающих. Но Python гораздо надежнее ABC, и значительно лучше применим в реальной жизни.
В аналогичном смысле, создатели Julia хотели сохранить все самое лучшее от других языков и избавиться от всего плохого. Но этим амбиции Julia далеко не ограничиваются: стоит цель не заменить какой-то один язык, а превзойти все языки.
Вот что об этом
говорят создатели Julia:
Мы ненасытны: нам все время мало. Мы хотим опенсорсный язык с максимально свободной лицензией. У него должна быть скорость как у C и динамизм как у Ruby. Мы хотим гомоиконичный язык с настоящими макросами как в Lisp, но с очевидной и знакомой математической нотацией, как в Matlab. Мы хотим язык, который был бы столь же универсален при программировании как Python, так же прост в области статистики как R, так же органичен при обработке строк как Perl, так же мощно работал с линейной алгеброй, как Matlab, так же хорошо склеивал программы, как shell. Язык, выучить который проще пареной репы, но который при этом устроит большинство серьезных хакеров. Хотим, чтобы он был интерактивным и компилируемым.
Julia стремится совместить все достоинства ныне существующих языков, но не идти на компромиссы, которые потребовали бы брать от этих языков и их недостатки. Причем, хотя Julia и молодой язык, он уже достиг многих целей, поставленных его создателями.
Что нравится разработчикам Julia
Разнообразие
Julia может использоваться для чего угодно от простых приложений из области машинного обучения до колоссальных суперкомпьютерных симуляций. До некоторой степени на это способен и Python, но Python как-то адаптировался к этим задачам.
Напротив, Julia
создавался как раз для такой работы. С самого начала.
Скорость
Создатели Julia хотели сделать язык, не уступающий в скорости C — но получившееся у них творение работает
даже быстрее. Даже притом, что в последние годы ускорять Python стало проще, по производительности ему по-прежнему очень далеко до Julia.
В 2017, Julia даже вошел в
Petaflop Club — небольшой клуб языков, которые при пиковой производительности могут работать со скоростью свыше одного петафлоп в секунду. Кроме Julia в этот клуб сейчас входят только C, C++ и Fortran.
Сообщество
Python, которому уже более 30 лет, обладает колоссальным и очень надежным сообществом. Едва ли есть такой вопрос по Python, ответ на который не находится за один поисковый запрос в Google.
Напротив, сообщество Julia совсем крошечное. Да, это означает, что придется покопаться гораздо активнее, чтобы найти ответ, но при таких поисках вы можете снова и снова выходить на одних и тех же людей. А так завязываются бесценные профессиональные программерские отношения.
Конверсия кода
Чтобы писать код на Julia, не требуется знать даже ни единой команды на этом языке. Мало того, что вполне можно использовать код Python и C внутри Julia, так можно даже применять код
Julia внутри Python!
Стоит ли говорить, что при таком раскладе не составляет труда пропатчить на Julia слабые места вашего кода на Python. Либо сохранять продуктивность, пока вы только знакомитесь с Julia.
Библиотеки
Библиотеки были и остаются сильной стороной Python. Фото Susan Yin на Unsplash
Это одно из важнейших достоинств Python — в нем уйма хорошо поддерживаемых библиотек. У Julia библиотек не так много, и пользователи жалуются, что имеющиеся библиотеки (пока) не слишком хорошо поддерживаются.
Но, с поправкой на то, что Julia – очень молодой язык с ограниченным набором ресурсов, то количество
уже имеющихся библиотек весьма впечатляет. Не считая того факта, что Julia обогащается все новыми библиотеками, отметим, что язык может стыковаться с библиотеками для С и Fortran, например, для обработки графиков.
Динамические и статические типы
В Python на 100% динамическая типизация. Это означает, что программа во время исполнения решает, к примеру, является ли данная переменная целым числом или числом с плавающей точкой.
Притом, что такая практика исключительно удобна для начинающих, из-за нее в программу проникают всевозможные баги. Как следствие, код Python требуется тестировать во всех возможных сценариях, а это довольно тупая задача, отнимающая много времени.
Поскольку создатели Julia также стремились сделать свой язык легким для изучения, в Julia полностью поддерживается динамическая типизация. Но, в отличие от Python, в Julia можно ввести и статические типы – в таком виде, в каком они присутствуют, например, в C или Fortran.
Это может сэкономить вам массу времени. Теперь, вместо того, чтобы искать оправдания за то, что код недотестирован, можно просто указывать тип везде, где это целесообразно.
Данные: инвестируем в язык, пока он маленький
Количество вопросов с пометкой Julia (слева) и Python (справа) на StackOverflow.
Притом, что все вышеперечисленное звучит очень оптимистично, необходимо учитывать, что Julia до сих пор просто крошка по сравнению с Python.
Есть хороший показатель: количество вопросов на StackOverflow: в настоящее время Python упоминается примерно в двадцать раз чаще, чем Julia!
Это совсем не свидетельствует о непопулярности Julia — скорее, программистам просто требуется время, чтобы привыкнуть к новому языку.
Посудите сами — сами бы вы стали писать весь код на совершенно новом языке? Нет, скорее вы бы отложили новый язык до тех пор, пока его можно будет попробовать в каком-нибудь свежем проекте. Из-за этого возникает запаздывание между выходом языка и попаданием его в широкую практику; это происходит со всеми языками программирования.
Но, если освоить Julia сейчас, а это просто, учитывая, в каком большом объеме в Julia поддерживается языковая конверсия – это будет ваша инвестиция в будущее. По мере того, как все больше и больше людей будет переходить на Julia, вы будете нарабатывать необходимый опыт и сможете отвечать на их вопросы. Кроме того, ваш код получится достаточно долговечным.
Итог: Занимайтесь Julia, и пусть это будет ваш конёк
Сорок лет назад искусственный интеллект был не более чем нишевым феноменом. В него не верили ни инвесторы, ни промышленность, и многие технологии ИИ казались корявыми и неудобными в использовании. Но те, кто изучал ИИ еще тогда, сегодня стали гигантами – сегодня их
зарплаты примерно такие же, как у топовых спортсменов.
Аналогично, язык Julia сейчас остается очень нишевым. Но когда он вырастет, в наибольшем выигрыше окажутся те, кто перешел на него заранее.
Я не обещаю, что через десять лет вы непременно будете грести деньги лопатой, если сейчас выучите Julia. Но ваши шансы на такое развитие событий вырастут.
Задумайтесь: сегодня в резюме у большинства программистов указан язык Python. Пройдет еще несколько лет, и мы увидим на рынке труда еще больше программистов-питонщиков. Но, если рост спроса на Python в энтерпрайзе замедлится, то и перспективы Python-программистов станут ухудшаться. Поначалу медленно, но неизбежно.
С другой стороны, вы сможете по-настоящему выделиться, если укажете в своем CV язык Julia. Поскольку, будем честны, а чем вы отличаетесь от всей той армии питонщиков, с которыми приходится конкурировать? Почти ничем. А вот программисты со знанием Julia останутся сравнительно редкими специалистами даже в перспективе ближайших трех лет.
Обладая навыками Julia, вы не просто демонстрируете, что ваши интересы не ограничиваются требованиями «по работе». Вы также показываете, что охотно учитесь и более широко представляете себе, что означает быть программистом. Иными словами, с вами стоит иметь дело.
Вы — и другие специалисты по Julia — в будущем можете превратиться в звезд, и вам это известно. Или, как сказал
один из создателей Julia в 2012:
Пусть мы и сознаем, что наша ненасытность непростительна, мы все равно хотим всего и сразу. Примерно два с половиной года назад мы взялись за создание языка, который нас способен удовлетворить. Он пока неполон, но до релиза 1.0 еще есть время. Язык, который мы создали, называется Julia. Он уже на 90% соответствует нашим взыскательным запросам, а теперь нам требуются взыскательные запросы от других, чтобы и дальше ваять этот язык. Итак, если вы – тоже ненасытный, неразумный и требовательный программист – высказывайтесь, мы вас выслушаем.