Содержание курса
1. Модуль 1. Введение: зачем дата-инженеру Scala и среда разработки
8 уроков
56
28
3м
0
Закрытый
1.1
О курсе: как проходить обучение и канал «Логово Дата-Инженера»
↗
8
0
-
0
Закрытый
1.2
Почему именно Scala для дата-инженерии
↗
18
6
3м 26с
0
Закрытый
1.3
Как устроена JVM и при чём здесь Scala. Байт-код и JDK
↗
7
5
-
0
Закрытый
1.4
Установка JDK, sbt и Coursier. Проверка окружения
↗
6
4
-
0
Закрытый
1.5
Настройка IDE: IntelliJ IDEA и плагин Scala (и альтернатива…
↗
5
4
-
0
Закрытый
1.6
REPL: интерактивная консоль Scala для экспериментов
↗
4
3
-
0
Закрытый
1.7
Первая программа: создаём и запускаем sbt-проект
↗
4
3
-
0
Закрытый
1.8
Как читать ошибки компилятора. Цикл правка — компиляция — запуск
↗
4
3
-
0
2. Модуль 2. Базовые типы и значения
8 уроков
12
8
0м
0
Закрытый
2.1
Значения val и переменные var. Почему неизменяемость по…
↗
3
1
-
0
Закрытый
2.2
Базовые типы: Int, Long, Double, Boolean, Char и их литералы
↗
2
1
-
0
Закрытый
2.3
Арифметические операции, приоритеты и переполнение чисел
↗
1
1
-
0
Закрытый
2.4
Строки String и интерполяция s, f, raw
↗
2
1
-
0
Закрытый
2.5
Всё есть выражение: if-выражение и блоки фигурных скобок
↗
1
1
-
0
Закрытый
2.6
Типы Unit, Nothing и иерархия Any, AnyVal, AnyRef
↗
1
1
-
0
Закрытый
2.7
Вывод типов: когда тип указывать явно, а когда нет
↗
1
1
-
0
Закрытый
2.8
Преобразование типов и связанные с ним ловушки
↗
1
1
-
0
3. Модуль 3. Управляющие конструкции
6 уроков
7
6
0м
0
Закрытый
3.1
Условные выражения if/else, операторы сравнения и логические…
↗
2
1
-
0
Закрытый
3.2
Цикл while и когда он действительно оправдан
↗
1
1
-
0
Закрытый
3.3
Цикл for и диапазоны Range
↗
1
1
-
0
Закрытый
3.4
Цикл for с фильтрами и несколькими генераторами
↗
1
1
-
0
Закрытый
3.5
Конструкция for-yield: строим коллекции
↗
1
1
-
0
Закрытый
3.6
Конструкция match: первое знакомство
↗
1
1
-
0
4. Модуль 4. Функции и методы
10 уроков
8
4
0м
0
Закрытый
4.1
Методы def: параметры, тело и возвращаемое значение
↗
2
1
-
0
Закрытый
4.2
Функции как значения. Функциональные типы и стрелка =>
↗
1
1
-
0
Закрытый
4.3
Анонимные функции и сокращённый синтаксис с подчёркиванием
↗
1
0
-
0
Закрытый
4.4
Функции высшего порядка: передаём поведение как аргумент
↗
1
1
-
0
Закрытый
4.5
Значения по умолчанию и именованные аргументы
↗
1
1
-
0
Закрытый
4.6
Параметры переменной длины (varargs)
↗
1
0
-
0
Закрытый
4.7
Каррирование и частичное применение функций
↗
1
0
-
0
Закрытый
4.8
Параметры по имени (by-name) и отложенные вычисления
↗
0
0
-
0
Закрытый
4.9
Рекурсия и хвостовая рекурсия с аннотацией @tailrec
↗
0
0
-
0
Закрытый
4.10
Вложенные функции и замыкания
↗
0
0
-
0
5. Модуль 5. Коллекции: фундамент
7 уроков
0
0
0м
0
Закрытый
5.1
Обзор иерархии коллекций. Неизменяемые и изменяемые коллекции
↗
0
0
-
0
Закрытый
5.2
Список List: устройство из ячеек и базовые операции
↗
0
0
-
0
Закрытый
5.3
Vector, Array и ArraySeq: что и когда выбирать
↗
0
0
-
0
Закрытый
5.4
Множества Set и словари Map
↗
0
0
-
0
Закрытый
5.5
Кортежи Tuple и их роль в обработке данных
↗
0
0
-
0
Закрытый
5.6
Диапазоны Range и ленивые последовательности LazyList
↗
0
0
-
0
Закрытый
5.7
Тип Option как коллекция из нуля или одного элемента
↗
0
0
-
0
6. Модуль 6. Функциональные операции над коллекциями
10 уроков
0
0
0м
0
Закрытый
6.1
Метод map и перебор foreach
↗
0
0
-
0
Закрытый
6.2
Отбор элементов: filter, filterNot и collect
↗
0
0
-
0
Закрытый
6.3
Метод flatMap: разворачиваем вложенность
↗
0
0
-
0
Закрытый
6.4
Свёртки fold, foldLeft, foldRight и reduce
↗
0
0
-
0
Закрытый
6.5
Группировка groupBy и groupMapReduce
↗
0
0
-
0
Закрытый
6.6
Сортировка коллекций: sortBy, sortWith, sorted, maxBy/minBy
↗
0
0
-
0
Закрытый
6.7
Соединение и нарезка: zip, zipWithIndex, sliding, grouped
↗
0
0
-
0
Закрытый
6.8
Отрезаем и делим: take, drop, span, partition, distinct
↗
0
0
-
0
Закрытый
6.9
Преобразования между коллекциями: toMap, toSet, toList
↗
0
0
-
0
Закрытый
6.10
Ленивые вычисления через view и производительность цепочек
↗
0
0
-
0
7. Модуль 7. Объектно-ориентированное программирование
11 уроков
1
0
0м
0
Закрытый
7.1
Классы: поля, конструктор и методы
↗
1
0
-
0
Закрытый
7.2
Вспомогательные конструкторы и значения полей по умолчанию
↗
0
0
-
0
Закрытый
7.3
Объекты-синглтоны object и точка входа в программу
↗
0
0
-
0
Закрытый
7.4
Объекты-компаньоны и метод apply как фабрика
↗
0
0
-
0
Закрытый
7.5
Case-классы: что компилятор генерирует автоматически
↗
0
0
-
0
Закрытый
7.6
Равенство, hashCode и метод copy у case-классов
↗
0
0
-
0
Закрытый
7.7
Трейты trait: интерфейсы с реализацией
↗
0
0
-
0
Закрытый
7.8
Композиция трейтов и линеаризация (ромбовидное наследование)
↗
0
0
-
0
Закрытый
7.9
Наследование классов: override, super, абстрактные члены
↗
0
0
-
0
Закрытый
7.10
Модификаторы доступа: private, protected, private[package]
↗
0
0
-
0
Закрытый
7.11
Запечатанные иерархии sealed
↗
0
0
-
0
8. Модуль 8. Паттерн-матчинг и алгебраические типы
7 уроков
0
0
0м
0
Закрытый
8.1
Match глубоко: литералы, переменные и wildcard
↗
0
0
-
0
Закрытый
8.2
Сопоставление с case-классами и деконструкция
↗
0
0
-
0
Закрытый
8.3
Сопоставление списков и последовательностей
↗
0
0
-
0
Закрытый
8.4
Стражи guards, связывание через @ и альтернативы |
↗
0
0
-
0
Закрытый
8.5
Экстракторы: метод unapply и собственные шаблоны
↗
0
0
-
0
Закрытый
8.6
Алгебраические типы данных: sealed trait плюс case-классы
↗
0
0
-
0
Закрытый
8.7
Моделируем предметную область данных через ADT
↗
0
0
-
0
9. Модуль 9. Отсутствие значений и обработка ошибок
7 уроков
0
0
0м
0
Закрытый
9.1
Проблема null и тип Option: Some и None
↗
0
0
-
0
Закрытый
9.2
Работаем с Option: map, getOrElse, fold, for-comprehension
↗
0
0
-
0
Закрытый
9.3
Исключения в Scala: try, catch, finally
↗
0
0
-
0
Закрытый
9.4
Тип Try: Success и Failure как обычное значение
↗
0
0
-
0
Закрытый
9.5
Тип Either: Left и Right для ошибок с контекстом
↗
0
0
-
0
Закрытый
9.6
Композиция ошибок через for-comprehension над Either и Try
↗
0
0
-
0
Закрытый
9.7
Паттерны обработки ошибок в конвейерах обработки данных
↗
0
0
-
0
10. Модуль 10. Дженерики и система типов
5 уроков
0
0
0м
0
Закрытый
10.1
Параметризованные классы и методы (дженерики)
↗
0
0
-
0
Закрытый
10.2
Ограничения типов: верхние и нижние границы
↗
0
0
-
0
Закрытый
10.3
Вариантность: ковариантность и контравариантность
↗
0
0
-
0
Закрытый
10.4
Почему коллекции ковариантны, а функции контравариантны по входу
↗
0
0
-
0
Закрытый
10.5
Члены-типы и абстрактные типы
↗
0
0
-
0
11. Модуль 11. Implicits и классы типов — ключ к Spark
6 уроков
0
0
0м
0
Закрытый
11.1
Идея неявных параметров implicit и using. Передача контекста
↗
0
0
-
0
Закрытый
11.2
Неявные значения и алгоритм их поиска компилятором
↗
0
0
-
0
Закрытый
11.3
Классы типов (type classes): идея и реализация
↗
0
0
-
0
Закрытый
11.4
Расширения через implicit class и extension. Pimp my library
↗
0
0
-
0
Закрытый
11.5
Контекстные границы [T: TypeClass]
↗
0
0
-
0
Закрытый
11.6
Неявные преобразования и где они прячутся в Spark
↗
0
0
-
0
12. Модуль 12. Функциональное программирование глубже
6 уроков
0
0
0м
0
Закрытый
12.1
Чистые функции, побочные эффекты и ссылочная прозрачность
↗
0
0
-
0
Закрытый
12.2
Неизменяемость на практике: обновление данных через copy
↗
0
0
-
0
Закрытый
12.3
Композиция функций: andThen и compose
↗
0
0
-
0
Закрытый
12.4
For-comprehension как универсальный механизм
↗
0
0
-
0
Закрытый
12.5
Что такое монада простыми словами: контракт map и flatMap
↗
0
0
-
0
Закрытый
12.6
Лень в Scala: lazy val, by-name и LazyList — резюме
↗
0
0
-
0
13. Модуль 13. Конкурентность и асинхронность
6 уроков
0
0
0м
0
Закрытый
13.1
Потоки JVM в двух словах. Зачем дата-инженеру асинхронность
↗
0
0
-
0
Закрытый
13.2
Future: запуск асинхронных вычислений и ExecutionContext
↗
0
0
-
0
Закрытый
13.3
Композиция Future: map, flatMap, for и обработка ошибок
↗
0
0
-
0
Закрытый
13.4
Несколько Future параллельно: Future.sequence и traverse
↗
0
0
-
0
Закрытый
13.5
Параллельные коллекции .par и их подводные камни
↗
0
0
-
0
Закрытый
13.6
Неизменяемость как способ избежать состояний гонки
↗
0
0
-
0
14. Модуль 14. Ввод-вывод и работа с форматами данных
6 уроков
0
0
0м
0
Закрытый
14.1
Чтение и запись файлов: scala.io.Source и java.nio
↗
0
0
-
0
Закрытый
14.2
Управление ресурсами: Using и try-with-resources
↗
0
0
-
0
Закрытый
14.3
Дата и время: пакет java.time
↗
0
0
-
0
Закрытый
14.4
Разбор CSV: вручную и с помощью библиотеки
↗
0
0
-
0
Закрытый
14.5
JSON в Scala: парсинг и кодирование (circe/json4s)
↗
0
0
-
0
Закрытый
14.6
Регулярные выражения в Scala
↗
0
0
-
0
15. Модуль 15. Сборка, зависимости и тестирование
7 уроков
0
0
0м
0
Закрытый
15.1
sbt глубоко: build.sbt, настройки и задачи
↗
0
0
-
0
Закрытый
15.2
Зависимости и репозитории. Оператор %% и версии Scala
↗
0
0
-
0
Закрытый
15.3
Многопроектные сборки и структура реального проекта
↗
0
0
-
0
Закрытый
15.4
sbt-assembly: толстый jar для spark-submit
↗
0
0
-
0
Закрытый
15.5
Тестирование с ScalaTest: стили спецификаций и матчеры
↗
0
0
-
0
Закрытый
15.6
Property-based тестирование с ScalaCheck
↗
0
0
-
0
Закрытый
15.7
Логирование: slf4j, logback и конфигурация
↗
0
0
-
0
16. Модуль 16. Scala 3: взгляд в будущее
4 урока
2
0
0м
0
Закрытый
16.1
Scala 2 против Scala 3: совместимость и причины перехода
↗
2
0
-
0
Закрытый
16.2
Новый синтаксис: значимые отступы, given и using вместо implicit
↗
0
0
-
0
Закрытый
16.3
enum, методы-расширения и определения верхнего уровня
↗
0
0
-
0
Закрытый
16.4
Прочие новшества: union-типы, opaque-типы, кратко
↗
0
0
-
0
17. Модуль 17. Итоговый проект: мини-ETL на чистой Scala
4 урока
1
0
0м
0
Закрытый
17.1
Постановка задачи: ETL-пайплайн без Spark
↗
1
0
-
0
Закрытый
17.2
Проектируем доменную модель и этапы пайплайна
↗
0
0
-
0
Закрытый
17.3
Реализация: чтение, трансформация, запись и тесты
↗
0
0
-
0
Закрытый
17.4
Итоги курса и мост к Apache Spark
↗
0
0
-
0