Вводная лекция
Что такое Scala?
Дмитрий Быков
Про курс
- Расскажем про Scala
- Научим программировать
- Познакомим с современными концепциями и практиками
Структура курса
9-12 занятий
- 9 лекций (+ дз)
- 3 практики
- проектная работа (начиная с середины курса)
Структура курса
- Вводная лекция
- Базовые конструкции
- Типы
- ООП в Scala
- Параметрический полиморфизм
- Библиотека коллекций
- Введение в ФП
- Тайп классы
- Введение в монады
Домашние задания
- после каждой лекции набор упражнений и задачек
- для большинства из них надо писать тесты
- срок сдачи - неделя после анонса ДЗ в чате
- формат сдачи - удаленно (github)
Практика
- консультации по домашкам
- любые вопросы по разработке на Scala
Зачет (3 з.е.)
Условия:
- посещаемость (посетить все лекции)
- домашние задания (в полном объеме и вовремя)
Поблажки (до 3х отсутствующих лекций или дз) тем кто:
Взаимодействие на курсе
VK и telegram
- ссылка на телеграм появится на портале
- https://vk.com/naumen_students
Взаимодействие на курсе
Портал
- https://study.naumen.ru/
- Анонсы занятий
- Ссылки на подключение
- Домашние задания
- Записи с лекций и презентации
- Дополнительные рекомендации
Взаимодействие на курсе
Github
- https://naumen-student.github.io/naumen.scala.course.2022.autumn
- Сдача домашних заданий
- Ревью
Что дает курс
- Если вы будущий Scala разработчик
- приобретёте практические навыки
- лучшие трудоустроятся в Naumen сразу
- остальные смогут потом
Что дает курс
- Если вы НЕ Scala разработчик
- освоите современные подходы и фичи языков
- опыт от практикующих разработчиков
- пункт "Scala" в резюме
- рекомендации при трудоустройстве
по орг вопросам - всё обсудили
наконец то переходим к Scala...
История Scala
Создатель языка - Мартин Одерски (Martin Odersky)
- ученый-практик из Швейцарии
- всю жизнь занимается языками, компиляторами, проблемами вычислимости и корректности программ
- Scala далеко не единственный и не первый
- Разработал большую часть javac и Java Generics
История Scala
Временные вехи
- старт разработки - 2001
- первый публичный релиз - январь 2004
- Scala 2.0 - март 2006
- Twitter - апреле 2009
- версия 2.8.0 - июль 2010 (коллекции, именованные и параметры по умолчанию)
- версия 2.10.0 - январь 2013 (много фич которые сейчас стали основными)
- расцвет экосистемы и рост популярности языка
- Scala 3 - май 2021
С одной стороны...
Scala - это обычный современный язык программирования высокого уровня работающий на ВМ/платформе
Большинство того что возможно и что успешно делается на этих языках - можно делать и на Scala
С другой стороны...
Есть свои особенности.
Проанализируем их ответив на вопросы:
Чем принципиально разработка на Scala отличается?
Почему кто-то может захотеть выбрать именно его для тех или иных задач?
Чем она может быть выгодна?
Особенности языка
JVM и Java interoperability
OOP + FP
Продвинутые языковые фичи
Экосистема
Особенности языка
JVM и Java interoperability
Почему это может быть важно ?
Особенности языка
JVM и Java interoperability
JVM - высококачественная (производительность) и популярная платформа (компетенции + инструментарий)
Но запускаться на JVM мало (JRuby, Jython, Clojure, Ceylon, etc)
Interop - путь к библиотекам и экосистеме
Особенности языка
JVM и Java interoperability
В Scala благодаря интеропу таких проблем нет - бери любую Java библиотеку и используй в своем приложении
Особенности языка
OOP+FP
Почему это может быть важно ?
Особенности языка
OOP+FP
можно на чистом ООП (как в Java, C#, Python, Typescript и т.д.)
доминирующая парадигма - множеству людей удобно писать в этом стиле
более продвинутый ООП
Особенности языка
OOP+FP
можно на удобном и чистом (почти) ФП
более продвинутая парадигма
можно плавно переходить от ООП к ФП
Особенности языка
Продвинутые языковые фичи
текущие языки многое берут из Scala спустя 3-5 лет
Особенности языка
Продвинутые языковые фичи
Уже реализованное в других языках
лямбды и функции/методы как объекты первого класса
работа с коллекциями в стиле filter/map/reduce
ленивость вычислений и Streams
extension methods
безопасное множественное наследование
локальный вывод типов
Optional
Особенности языка
Продвинутые языковые фичи
Предположительно в будущем
Type classes
и др.
Особенности языка
Продвинутые языковые фичи
Scala - новейшие разработки
Другие языки - слегка отстают
Особенности языка
Экосистема Scala
Ряд решений написаны на Scala
Крайне эффективны в своих нишах
Определяют стек
Особенности языка
Экосистема Scala
Apache Spark - фреймворк для продвинутого map/reduce, используется для бигдаты и ML
Akka - эффективная и очень зрелая реализация модели акторов
FP библиотеки (многопоточность, параллелизм, асинхронность)
Адоптеры Scala
Основной стек:
Twitter
LinkedIn
Тинькофф
и др.
Адоптеры Scala
Используют:
Apple
Airbnb
Coursera
Делибомиль
Сбербанк
и многие др.
Адоптеры Scala
почему это важно?
Адоптеры
Важно потому что
Гарантия стабильности языка
Развитие экосистемы (вкладываются непосредственно в язык/компилятор, либо открывают свои наработки, либо коммитят в другой open source)
Вакансии для разработчиков
Источник компетенций