Материалы курса и обратная связь
Слайды, примеры программ и другие файлы доступны в репозитарии
https://github.com/maxcom/scala-course.
Содержимое будет пополняться по ходу курса.
Для обсуждений и вопросов по курсу используем telegram чат @scalacourse2018. Ссылка для
доступа к чату будет опубликована на первом занятии.
Состав курса
- Введение в программирование на Scala
- Потоки и асинхронное программирование.
- Разработка и использование веб-сервисов
После каждого занятия будут предложены задачки по теме и одно
большое практическое задание на весь курс.
Практическое задание
- Классификатор текстов
- Сервис для оценки произвольного текста
- Оценка сообщений соц. сетей
- Отслеживание новых записей
Хранение состояния приложения на диске; отказоустойчивость
Реактивное обновление интерфейса при изменениях
1. Базовые типы Scala и pattern matching
- Материалы курса, обратная связь
- Обзор курса
- Средства разработки и первые шаги
- Case-классы
- Алгебраические типы.
- Pattern matching
2. Иммутабельность и базовые структуры данных. Работа со списками.
- Орг. вопросы и результаты домашнего задания
- Обзор большого практического задания
- Функциональный подход и иммутабельность.
- Персистентные структуры данных на примере List.
- Работа со списками: "классика" и ListBuffer.
- filter, map и fold.
- Доп.: NonEmptyList, immutable queue, операции над Option
3. Персистентные структуры данных. Ленивые вычисления. Монады.
- Практическое задание: пишем классификатор
- Разбор домашних заданий
- Персистентные структуры: Vector и HashMap
- "call by value" и "call by name"; lazy
- Stream: ленивый список.
- Монады и for.
- Пример: Eval из библиотеки cats.
4. Implicit значения и преобразования. Тайпклассы. Чтение и запись JSON в play-json.
- Imlicit значения
- Передача контекста и конфигурации;
- “pimp my library”.
- Тайпклассы
- Сериализация и type classes на примере Play-JSON
- Практическая часть: разбор JSON из API vk.com.
5. Базовые примитивы многопоточности
- Зачем мы говорили о play-json?
- Советы по написанию классификатора
- Поток, пулы потоков.
- Синхронизация, блокировки и атомики.
- Future и Promise.
- Реализация map, sequence и других функций стандартной библиотеки. for-нотация для Future.
6. HTTP Протокол. Play Framework. Архитектура высоконагруженных приложений.
- Статус по практическому заданию
- HTTP протокол и REST.
- Play Framework: создаем приложение.
- Практическое задание: создаем сервис категоризации.
- Архитектура обработки запросов.
7. Акторы Akka.
- Статус по практическому заданию
- Практическое задание: http client и API vk.com
- Актор — асинхронный объект.
- Диспетчеры.
- Обработка исключительных ситуаций.
- Большой рассказ о гарантиях.
- CircuitBreaker.
- Регулировка скорости обработки.
8. Akka Streams и реактивные потоки
- Статус по практическому заданию
- Практическое задание: обновление ленты в акторе
- Зачем нужны асинхронные потоки?
- До streams: back pressure на акторах
- Akka Streams
- Reactive Streams - стандартное API
- Akka Streams в Play
9. Event Sourcing и CQRS. Akka Persistence.
- Статус по практическому заданию
- Event Sourcing
- Akka Persistence
- Снапшоты
- CQRS
- Akka Persistence Query