Шесть причин выучить Julia в 2024 году


В этом году Экспонента вместе со средой разработки
Engee стали информационными партнерами бесплатной Летней школы Julia. Это уникальное событие для России, ведь еще никто не проводил онлайн-курсы по этому современному и очень перспективному языку программирования. Мы уверены, что в современных политических и экономических реалиях за этим языком видится большое будущее, особенно в научной и инженерной средах, и приглашаем всех желающих принять участие в этом важном событии.

А чтобы подогреть ваш интерес, мы подготовили небольшую статью (опирались на этот материал, спасибо авторам, и добавили много тезисов на основе нашего опыта с Julia) с описанием основных причин, почему вы должны срочно заинтересоваться Julia и подать заявку на Летнюю школу. Приятного чтения!

Язык Julia — новая звезда во вселенной программирования, получившая признание благодаря своей универсальности. Он быстрый, у него удобный синтаксис и он отлично подходит для научных вычислений в различных областях, от анализа данных до расчета прочности зданий.

Недавно Julia дебютировала в TIOBE Index — рейтинге популярности языков программирования, который основывается на результатах поисковых систем, дискуссионных форумах и других ресурсах. В этой статье мы расскажем о шести причинах добавить сертификат по Julia в ваше резюме, приведем небольшое сравнение Julia с Python и MATLAB, а также порассуждаем о будущем этого нового языка.

Рост популярности Julia можно проследить на этом графике:

8e241aeeb00d47e280892f9d82451f2c.png

Источник: https://www.tiobe.com/tiobe-index/julia/

3 причины популярности языка Julia

  • Сочетает в себе скорость выполнения языка C и динамическую типизацию MATLAB/Python. Причина: Julia, является компилируемым языком программирования, в отличие от MATLAB и Python.

  • Позволяет преодолеть разрыв между высокоуровневым и низкоуровневым программированием за счёт простого синтаксиса, схожего с Python и MATLAB.

  • Реализует современные технологии программирования. Например, концепция перегрузки функций расширена до мультиметодов, а код обрабатывается как структура данных, что очень упрощает метапрограммирование. О да, и он позволяет использовать любые unicode-символы в коде, а не только ASCII…

К тому же сообщество разработало библиотеки для любой сферы расчетов, от нейросетей до квантовой физики, а пакетный менеджер этого языка прост в обращении, как conda и pip.

Julia — это скорость 

Одно из главных преимуществ Julia — ее скорость. Разработанная так, чтобы быть такой же быстрой, как языки, C и Fortran, Julia обеспечивает высокопроизводительные вычислительные возможности, которые так важны в современном мире интенсивных данных.

Высокая скорость работы Julia в первую очередь объясняется ее компилятором Just-In-Time (JIT). Это позволяет Julia компилировать эффективный нативный код, что делает его подходящим выбором для выполнения сложных алгоритмов на реальном оборудовании.

В контексте машинного обучения и глубокого обучения скорость Julia становится особенно выгодной. Она позволяет быстро обрабатывать большие массивы данных и эффективно выполнять тяжелые в вычислительном плане задачи, ускоряя тем самым темпы разработки ИИ.

c432f54734a82208552b06aa97d3026b.png

Источник: статья, посвященная сравнению скорости различных языков: https://modelsandrisk.org/appendix/speed_2022/

Julia удобна для пользователя

Синтаксис Julia дружелюбен к пользователям Python и MATLAB, то есть на нем удобно программировать тем, кто уже знаком с этими языками. Читайте — если вы знаете Python/MATLAB, то вы практически знаете Julia, нужно только погрузиться. Также, если сравнивать синтаксис напрямую с MATLAB, то значительные различия можно пересчитать по пальцам, они описаны тут.

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

Синтаксис Julia интуитивно понятен и прост в изучении. Переменные можно присваивать без объявления их типа, язык поддерживает все распространенные алгоритмические структуры (циклы, условия), все распространенные структуры данных (многомерные матрицы, словари), а для сложных типов данных полно бесплатных библиотек.

Julia имеет сильную экосистему пакетов

Julia предоставляет мощную экосистему пакетов, которые расширяют ее функциональность. Пакеты Flux, MLJ и Knet предоставляют мощные инструменты для машинного обучения и глубокого обучения.

> В Экспоненте мы используем Julia для тяжеловесных инженерных задач, и мы хотели бы подсветить несколько таких пакетов, чтобы всем было легче найти ссылки и начать решать задачи по системам управления, обработке сигналов и т.д.

DataFrames.jl — это пакет Julia, который работает с данными аналогично Python’овскому pandas. Он предоставляет набор инструментов для управления данными и статистического анализа, что делает его ценным помощником для специалистов по обработке данных.

Flux.jl и Lux.jl — вполне мощные пакеты для глубокого обучения. Написаны полностью на Julia, что позволяет создавать пользовательские слои и модели непосредственно в Julia.

Пакет JuliaControl — множество библиотек для разработки САУ, внутри которого находятся:

  • ControlSystems.jl — функциональный пакет для систем автоматического управления. процедуры для анализа и синтеза систем управления (в первую очередь линейных);

  • RobustAndOptimalControl.jl содержит более сложные функции для проектирования ЛКГ, глубокого анализа и синтеза, нечеткого моделирования, а также именованные системы и интерфейс для взаимодействия с DescriptorSystems.jl;

  • SymbolicControlSystems.jl содержит базовые возможности для генерирования кода на C для линейных систем;

  • ControlSystemIdentification.jl — это инструментарий для идентификации линейных систем с постоянными параметрами (ЛПП) с использованием данных временной или частотной области. Этот пакет позволяет на основе данных оценивать модели пространства состояний, модели передаточных функций и фильтры Калмана, которые могут применяться для расчета систем управления;

  • DiscretePIDs.jl содержит эталонную реализацию дискретного ПИД-регулятора в Julia, включая весовые уставки, ограничение насыщения интегратора, дифференциальную фильтрацию и мягкую передачу управления.

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

DSP.jl — это пакет, предоставляющий широкий спектр возможностей цифровой обработки сигналов (ЦОС), что делает его подходящим для применения в различных областях, требующих анализа сигналов.

Polynomials.jl — это пакет, предназначенный для работы с полиномами. Он предлагает такие функции, как арифметические операции, интегрирование, дифференцирование, оценка коэффициентов, нахождение корней и аппроксимация данных.

Jump.jl — это специализированный язык моделирования для математической оптимизации, интегрированный в язык программирования Julia. Он позволяет пользователям формулировать и решать различные задачи оптимизации, включая линейное, смешанное целочисленное и нелинейное программирование.

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

Julia в научных вычислениях и моделировании

Самый крупный пакет для моделирования и симуляции в экосистеме Julia называется SciML. Он объединяет мощные инструменты для научных расчетов (Sci) и машинного обучения (ML) — всё что нужно для работы с математическими моделями. Посмотрим, какие библиотеки входят в этот проект.

  • DifferentialEquations.jl — пакет для численного решения дифференциальных уравнений, написанный тоже на Julia. DifferentialEquations позволяет решать обыкновенные дифференциальные уравнения, дифференциальные уравнения в частных производных, стохастические дифференциальные уравнения и другие. 

  • ModelingToolkit.jl (MTK) — это целый язык (надстройка над Julia) для высокопроизводительных символьно-числовых вычислений. Что он позволяет делать? Решать алгоритмические и акаузальные задачи, заданные при помощи символьного описания, в общем — легко расширяемые модели. Инструментарий MTK позволяет их анализировать, преобразовывать — например, снижая порядок, и передавать в DifferentialEquations для решения.

В SciML входит еще масса инструментов моделирования (финансы, астрофизика, агенты…), аналитических инструментов, и, конечно, инструменты для машинного обучения (всё — от дифференцируемых суррогатных моделей до нейросетей). А ведь мы помним, что машинное обучение тоже работает с моделями, только делает их из данных.

Таким образом Julia, имея в своём арсенале все эти библиотеки, дает море возможностей для построения сложных моделей в инженерных и наукоемких областях.

Julia может сыграть ключевую роль в IT-трансформации науки

Высокоуровневый синтаксис Julia и эффективный JIT-компилятор позволяют Julia играть важную роль в активно развивающихся областях науки, например в области квантовых вычислений.

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

Yao.jl позволяет квантовым программистам разрабатывать и тестировать квантовые алгоритмы с помощью таких функций, как поддержка GPU и механизм автоматического дифференцирования. Пакет обещает самую современную производительность, что еще больше подчеркивает потенциал Julia в области квантовых вычислений.

Julia обладает большим потенциалом для инноваций в области ИИ

Возможности Julia хорошо согласуются с требованиями к разработке ИИ. Она обладает вычислительной мощностью, необходимой для обработки больших массивов данных, гибкостью для реализации сложных алгоритмов ИИ и скоростью для получения результатов в реальном времени.

Такие пакеты, как Flux.jl, SciML и Knet, расширяют простор для инноваций в вашей области с помощью Julia. Эти пакеты предоставляют мощные инструменты для машинного обучения и глубокого обучения, помогая вам прокладывать путь к внедрению передовых решений в области ИИ.

Julia — это развитое сообщество, в том числе в России

Julia имеет сильное сообщество, которое предлагает поддержку и ресурсы как для новичков, так и для опытных пользователей. От онлайн-форумов до документации и учебных пособий от компаний и вузов, вы везде встретите отзывчивых специалистов, которые заняты популяризацией этого языка, что является ценным ресурсом для изучения и освоения Julia.

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

Julia или Python: Как выбрать?

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

Python — язык общего назначения, простой в изучении, с обширной экосистемой, большим сообществом. Но если ваш проект связан с тяжелыми численными и научными вычислениями, требует высокой производительности, и вас устраивает небольшое, но специализированное сообщество, лучше выбрать Julia.

Во многих случаях оптимальным решением может стать использование обоих языков в тандеме. Критичные для производительности компоненты можно написать на Julia, а Python использовать для других аспектов проекта, благо такой синтаксис поддерживается напрямую из Julia благодаря библиотекам PyCall и MATLAB.jl, которые позволяют делать вставки кода на вышеупомянутых языках и полноценно взаимодействовать с ними напрямую из Julia.

Как Python, так и Julia — мощные языки, каждый из которых преуспевает в разных областях. Но стоит сказать, что наукоемкие задачи обычно опираются на давно написанные библиотеки на других языках (любых, от C до Julia), которые используются через обертку, и этот аспект одинаково хорошо работает как в Julia, так и в Python. Ваш выбор должен быть обусловлен конкретными потребностями и целями проекта. Помните, что цель состоит не в том, чтобы найти лучший язык в целом, а в том, чтобы выбрать наиболее подходящий для вашего конкретного проекта или случая использования.

Будущее Julia

Учитывая уникальные особенности и возможности Julia, спрос на программистов на Julia в ближайшие годы, скорее всего, будет расти. Поэтому изучение Julia сейчас может открыть прибыльные и захватывающие возможности в будущем. Говоря о рынке труда для программистов, в силу разных обстоятельств мы можем увидеть переход на Julia специалистов по MATLAB, что приведет к взрывному росту сообщества и спроса на рынке.

Будучи языком с открытым исходным кодом, Julia постоянно развивается, регулярно приростая новыми функциями и улучшениями. А следить за нововведениями интересно и студентам, и преподавателям. Для одних важно, что в Julia постоянно реализуются самые новые требования мира программирования, для других — что новые курсы всегда будут востребованы.

Независимо от того, опытный ли вы программист или начинающий, Julia — это язык, который стоит изучить. Сочетание скорости, простоты использования, выразительных возможностей и осознаваемого сообществом высокого потенциала даже в таких развивающихся областях, как квантовые вычисления, делает его привлекательным выбором для тех, кто хочет усовершенствовать свои навыки программирования или произвести IT-трансформацию в новых прикладных областях.

Бонусная причина: Julia лучше всех языков обрабатывается с помощью ChatGPT

Согласно одному из исследований оказалось, что «ChatGPT лучше всего генерирует код на Julia. Для довольно большого перечня задач, сгенерированный код на Julia успешно выполнялся в 81,5% случаев. Хуже всего — на C++, где успешно выполняется только 7,3%. В частности, эта модель вообще лучше работала на высокоуровневых динамически типизированных языках (Javascript, Julia, Perl, Python, R, Ruby, Smalltalk), чем на низкоуровневых статически типизированных языках (C, C++, Go)».

Верно, из всех языков «ChatGPT лучше всего пишет код на Julia». К чему бы это? :)

Прочитать об этом исследовании подробнее вы можете по ссылке:  

https://www.juliabloggers.com/chatgpt-performs-better-on-julia-than-python-and-r-for-large-language-model-llm-code-generation-why/ 

Часто задаваемые вопросы

Как появилась Julia?

Julia была разработана в Массачусетском технологическом институте и впервые появилась в 2012 году, но начала набирать обороты только после стабильного выпуска Julia 1.0 в 2018 году.

А вообще Julia часто используется?

Julia используется в научных вычислениях и численном моделировании, высокопроизводительных вычислениях (HPC), анализе и визуализации данных (Plots.jl), машинном обучении и глубоком обучении (Flux.jl), а также в параллельных и распределенных вычислениях.

В честь чего или кого названа Julia?

По словам разработчиков, она не была названа в честь кого бы то ни было.

© Habrahabr.ru