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

Что такое Scala?

Дмитрий Быков

Про курс




  • Введение в Scala, включая все необходимые аспекты для написания простых программ

  • Функциональное программирование с прицелом на практическое применение

  • ZIO для реализации web-приложений и информационных систем

  • Для желающих - проектная работа с код-ревью от профессиональных разработчиков

Структура курса


III блока:

  • Scala Basic, чтобы освоить/освежить представление о синтаксисе и конструкциях языка
  • Функциональное программирование, для демонстрации практической пользы ФП
  • ZIO, чтобы освоить основы современного фреймворка для создания web-систем


  • В каждом блоке: 2 - 3 лекции; 1 - 3 практических занятия
  • Всего: 8 лекций помимо вводной; 4 практических занятия

Домашние задания



  • После каждой лекции набор упражнений и задачек

  • Для большинства из них надо писать тесты

  • Срок сдачи - неделя после анонса ДЗ в чате

  • Формат сдачи - удаленно (github)

Практика



  • Простые упражнения для закрепления лекций

  • Проектная работа (для желающих)

  • Ответы на вопросы по разработке на Scala

  • Тренировочные собеседования по итогам курса

Проектная работа



  • Факультативно, по желанию

  • Старт - после блока Scala Basic

  • Ревью от опытных разработчиков

  • Небольшое портфолио в резюме

Зачет:

Посещать занятия!   Сдавать ДЗ!


Условия сдачи курса:


  • В идеале, выполнение всех ДЗ и посещение всех лекций = "Автомат"

  • Общая сумма пропущенных (ДЗ + Занятий) не превышает трёх = Возможно, "Автомат"

  • Общая сумма пропущенных (ДЗ + Занятий) превышает половину = Недопуск до экзамена

  • В остальных случаях = Сдача экзамена

Взаимодействие на курсе


VK и telegram

  • ссылка на телеграм на Портале

  • https://vk.com/naumen_students

Взаимодействие на курсе


    Портал:



  • https://study.naumen.ru/
  • Доступ к обр. порталу будет предоставлен до 11 сен (будет отправлен на почту)
    • Анонсы занятий
    • Ссылки на подключение
    • Домашние задания
    • Записи с лекций и презентации
    • Дополнительные рекомендации

Взаимодействие на курсе


    Github:

  • https://naumen-student.github.io/-naumen.scala.course.2024.autumn
    • Сдача домашних заданий
    • Ревью

Что дает курс


  • Если вы будущий Scala разработчик:

    • Практические навыки Scala
    • Практические навыки ZIO
    • Понимание практического назначения ФП
    • Возможность попасть на стажировку в Naumen
    • Возможность реализации проектной работы для портфолио

Что дает курс


  • Если вы НЕ Scala разработчик:

    • Современные подходы и фичи языков
    • Опыт от практикующих разработчиков
    • Пункты "Scala" и "ZIO" в резюме
    • Понимание практического назначения ФП
    • Возможность реализации проектной работы для портфолио

История 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

    • ООП + ФП;   Врождённое / Органичное ФП

    • Продвинутые языковые фичи

    • Экосистема

    • Попробовать Scala легко, завязать со Scala сложно )

    Особенности языка


    JVM и Java interoperability

    JVM - высококачественная (производительность) и
    популярная платформа (компетенции + инструментарий)


    Но запускаться на JVM мало (JRuby, Jython, Clojure, Ceylon, etc)


    Interoperability - путь к библиотекам и экосистеме


    Можно запускать Java код из исходников напрямую в Scala файлах

    Особенности языка

    ООП + ФП

    • Можно на чистом ООП (как в Java, C#, Python, Typescript и т.д.); Продвинутый ООП

    • ООП - Доминирующая парадигма, - множеству людей удобно писать в этом стиле

    • Можно на удобном, органичном и чистом (почти) ФП

    • Можно плавно переходить от ООП к ФП

    Функциональное программирование


    Делает код прозрачным и понятным


    • Удобство и безопасность в конкуретной (многопоточной среде)

    • Явная обработка ошибок на уровне кода

    • Унификация написания кода

    • Ленивость вычислений

    • Возможность применения паттернов ФП (ADT, тайп-классы и т.п.)

    ZIO

    ZIO - самодостаточная библиотека для конкуррентного и асинхронного программирования на Scala


    • Производительность: ZIO намного быстрее, чем Scala Future

    • Отмена и время ожидания: ZIO позволяет отменять эффекты вручную или автоматически

    • Безопасность ресурсов: ZIO позволяет безопасно получать и освобождать ресурсы

    • Согласованность: параллельность ZIO построена на волокнах,
      которые являются легкими зелеными нитями

    • ZIO является чисто функциональным

        Адоптеры Scala

        Основной стек:


    •     X    (X-Twitter)
    •               LinkedIn
    •                  Т-Банк

    • и другие

    Адоптеры Scala:

    Используют:


    •                   Apple
    •                  Airbnb
    •             Coursera
    •     Делибомиль
    •                      Сбер

    • и многие другие

    Адоптеры



    Важно потому, что:

    • Гарантия стабильности языка

    • Развитие экосистемы (вкладываются непосредственно в язык/компилятор,
      либо открывают свои наработки, либо коммитят в другой open source)

    • Вакансии для разработчиков
    • Источник компетенций

    Инструменты