Вводная лекция

Что такое 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)
  • Вакансии для разработчиков
  • Источник компетенций
  • Инструменты

  • REPL - https://downloads.lightbend.com/scala/2.12.10/scala-2.12.10.msi
  • Ammonite REPL (only Linux/Mac) - https://ammonite.io/#Ammonite-REPL
  • Scastie - online worksheet and code share - https://scastie.scala-lang.org/
  • IDE - IntelliJ Idea (with Scala plugin)
  • VS Code (with Metals plugin)
  • Worksheet (in Scastie or Idea)
  • cheatsheet https://alvinalexander.com/downloads/scala/Scala-Cheat-Sheet-devdaily.pdf