Учебник Julia для начинающих
Julia — молодой язык программирования, созданный, чтобы решить «проблему двух языков»: писать прототипы на удобном Python, а затем переписывать узкие места на C ради скорости. Julia предлагает и удобство, и скорость в одном инструменте, поэтому её всё чаще выбирают для науки, анализа данных, машинного обучения и численных методов.
В этом курсе вы начнёте с установки и REPL, разберёте переменные, числа и строки, освоите массивы и матрицы с их фирменной 1-индексацией и broadcasting, изучите управление потоком и функции. Затем мы дойдём до главной фишки Julia — множественной диспетчеризации и системы типов, поймём, почему язык такой быстрый, и посмотрим на экосистему пакетов: DataFrames, Plots, линейную алгебру, метапрограммирование и параллелизм. По ходу мы будем постоянно сравнивать Julia с Python, R и MATLAB.
Курс «Julia: язык для научных вычислений» состоит из 6 разделов и 20 уроков: Знакомство с Julia, Числа, строки и базовые типы, Массивы, матрицы и broadcasting, Управление потоком и функции, Множественная диспетчеризация и типы и Производительность, экосистема и практика. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Знакомство с Julia
- Что такое Julia и зачем она нужна
Julia — язык со скоростью C и удобством Python, созданный для научных вычислений, данных и численных методов.
- Установка, REPL и запуск кода
Как установить Julia, работать в интерактивном REPL, запускать скрипты и пользоваться режимами help и Pkg.
- Переменные, имена и комментарии
Переменные в Julia: динамическая типизация, Unicode-имена, соглашения об именовании, комментарии и константы.
- Что такое Julia и зачем она нужна
2 Числа, строки и базовые типы
- Числа и арифметика
Целые и дробные числа в Julia, типы Int64 и Float64, переполнение, деление и операторы арифметики.
- Рациональные, комплексные и произвольная точность
Богатая числовая система Julia: рациональные дроби, комплексные числа, BigInt и BigFloat произвольной точности.
- Строки и интерполяция
Строки в Julia: создание, интерполяция через $, конкатенация, методы, символы Char и многострочные литералы.
- Числа и арифметика
3 Массивы, матрицы и broadcasting
- Массивы и 1-индексация
Векторы и массивы в Julia: создание, 1-индексация, срезы, добавление элементов, отличия от Python-списков.
- Матрицы и многомерные массивы
Матрицы в Julia: создание, индексация по строкам и столбцам, транспонирование, column-major хранение и операции.
- Broadcasting и точечные операции
Broadcasting в Julia: точечные операторы .+ .* sin., поэлементные вычисления над массивами без циклов и их преимущества.
- Массивы и 1-индексация
4 Управление потоком и функции
- Условия и циклы
Управление потоком в Julia: if/elseif/else, циклы for и while, ключевое слово end, диапазоны и тернарный оператор.
- Comprehension и генераторы
Array comprehension в Julia: компактное создание массивов, условия фильтрации, вложенные comprehension и ленивые генераторы.
- Функции: синтаксис и аргументы
Функции в Julia: полный и краткий синтаксис, множественный возврат, анонимные функции, аргументы по умолчанию и именованные.
- Условия и циклы
5 Множественная диспетчеризация и типы
- Множественная диспетчеризация — сердце Julia
Multiple dispatch в Julia: выбор метода по типам всех аргументов, отличие от ООП Python и почему это главная фишка языка.
- Система типов: абстрактные и конкретные
Система типов Julia: абстрактные и конкретные типы, иерархия, struct, и почему типы важны для скорости и диспетчеризации.
- Параметрические типы
Параметрические типы в Julia: Vector{T}, обобщённые структуры, type parameters и почему они дают скорость без потери гибкости.
- Множественная диспетчеризация — сердце Julia
6 Производительность, экосистема и практика
- Почему Julia быстрая: JIT и стабильность типов
Производительность Julia: JIT-компиляция через LLVM, type stability, @code_warntype, оборачивание кода в функции и BenchmarkTools.
- Пакеты, Pkg и работа с данными
Менеджер пакетов Pkg в Julia, окружения и Project.toml, экосистема, обзор DataFrames.jl для работы с табличными данными.
- Линейная алгебра, графики, метапрограммирование и параллелизм
Обзор инструментов Julia: встроенная линейная алгебра LinearAlgebra, Plots.jl, макросы и метапрограммирование, параллелизм.
- Julia против Python, R и MATLAB
Сравнение Julia с Python, R и MATLAB: когда Julia выигрывает по скорости и выразительности, а когда лучше остаться на Python.
- Применения: наука, машинное обучение, оптимизация
Где применяют Julia: наука и численное моделирование, машинное обучение Flux.jl, оптимизация JuMP, и куда двигаться дальше.
- Почему Julia быстрая: JIT и стабильность типов