наSкальная живопись
Дмитрий Мантула
dmantula@gmail.com
@diez_dev
Знакомимся:
Scala? В коммерческом использовании?
Знакомимся:
Scala? В коммерческом использовании?
Java? Java 8?
Знакомимся:
Scala? В коммерческом использовании?
Java? Java 8?
“Functional Programming in Scala” @ Coursera
Знакомимся:
Scala? В коммерческом использовании?
Java? Java 8?
“Functional Programming in Scala” @ Coursera
“Reactive Programming” @ Coursera
Знакомимся:
Scala? В коммерческом использовании?
Java? Java 8?
“Functional Programming in Scala” @ Coursera
“Reactive Programming” @ Coursera
Кто понимает, что такое ФП?
Знакомимся:
Scala? В коммерческом использовании?
Java? Java 8?
“Functional Programming in Scala” @ Coursera
“Reactive Programming” @ Coursera
Кто понимает, что такое ФП?
Что знает, что такое сайд-эффект?
Знакомимся:
Scala? В коммерческом использовании?
Java? Java 8?
“Functional Programming in Scala” @ Coursera
“Reactive Programming” @ Coursera
Кто понимает, что такое ФП?
Что знает, что такое сайд-эффект?
Что знает, что такое гомотопические группы?
Знакомимся:
Scala? В коммерческом использовании?
Java? Java 8?
“Functional Programming in Scala” @ Coursera
“Reactive Programming” @ Coursera
Кто понимает, что такое ФП?
Что знает, что такое сайд-эффект?
Что знает, что такое гомотопические группы?
Знакомимся:
Знакомимся:
Коммерческий опыт Java с 2004 года:
web, enterprise, J2ME, Android,
embedded.
“Functional Programming in Scala” @ Coursera (2012)
2013–Present – Scala-based back-end
Знакомимся: мой проект
Знакомимся: мой проект
Languages: Java, Scala,…
Знакомимся: мой проект
Languages: Java, Scala,…
DI: Spring, Guava, Cake-pattern,….
Знакомимся: мой проект
Languages: Java, Scala,…
DI: Spring, Guava, Cake-pattern,….
REST: Spray, (Play),…
Знакомимся: мой проект
Languages: Java, Scala,…
DI: Spring, Guava, Cake-pattern,….
REST: Spray, (Play),…
DB: JDBC, Hibernate, Slick,…
Знакомимся: мой проект
Languages: Java, Scala,…
DI: Spring, Guava, Cake-pattern,….
REST: Spray, (Play),…
DB: JDBC, Hibernate, Slick,…
Build tools: Maven, SBT,…
Знакомимся: мой проект
Languages: Java, Scala,…
DI: Spring, Guava, Cake-pattern,….
REST: Spray, (Play),…
DB: JDBC, Hibernate, Slick,…
Build tools: Maven, SBT,…
Peopleware:
Знакомимся: мой проект
Languages: Java, Scala,…
DI: Spring, Guava, Cake-pattern,….
REST: Spray, (Play),…
DB: JDBC, Hibernate, Slick,…
Build tools: Maven, SBT,…
Peopleware:
“Императивщики” и “декларативщики”
Знакомимся: мой проект
Languages: Java, Scala,…
DI: Spring, Guava, Cake-pattern,….
REST: Spray, (Play),…
DB: JDBC, Hibernate, Slick,…
Build tools: Maven, SBT,…
Peopleware:
“Императивщики” и “декларативщики”
Сеньоры и не-сеньоры
Знакомимся: мой проект
Languages: Java, Scala,…
DI: Spring, Guava, Cake-pattern,….
REST: Spray, (Play),…
DB: JDBC, Hibernate, Slick,…
Build tools: Maven, SBT,…
Peopleware:
“Императивщики” и “декларативщики”
Сеньоры и не-сеньоры
“Адекваты” и “неадекваты” с т. з. codebase
вести́ дневни́к
Хорошая практика
для изучающих что-либо:
Scala
If I were to pick a language today other than Java,
it would be Scala.
(James Gosling, creator of Java, 2011)
I can honestly say if someone had shown me the
“Programming in Scala” book back in 2003, I'd
probably never created Groovy.
(James Strachan, creator of Groovy, 2009)
Scala
Scala sets a new standard against which future
languages will be measured.
(Neal Gafter, Java language designer)
Scala: какая она
Scala: какая она
Programming model:
Scala: какая она
Programming model:
функциональная
Scala: какая она
Programming model:
функциональная
объектно-ориентированная
А что нам предлагает ФП?
А что нам предлагает ФП?
абстракции более высокого уровня
лучшая модулярность
короче код
менее error-prone
выше продуктивность разработки
А что нам предлагает ФП?
абстракции более высокого уровня
лучшая модулярность
короче код
менее error-prone
выше продуктивность разработки
Но ведь ФП уже 50 лет…
А что нам предлагает ФП?
абстракции более высокого уровня
лучшая модулярность
короче код
менее error-prone
выше продуктивность разработки
Но ведь ФП уже 50 лет…
ООП предлагало то же самое 30 лет назад!
Появился повод!
Появился повод!
рост требований к hardware
производительность ЦП не
увеличивается – увеличивается
количество ядер ЦП
в существующих программных
моделях локи не скейлятся
нужны абстракции более высокого
уровня, где parallel ≈ distributed
Scala: какая она
Programming model:
функциональная
объектно-ориентированная
Scala: какая она
Scala: какая она
Типизация:
статическая
Scala: какая она
Типизация:
статическая
динамическая
Scala: какая она
Типизация:
статическая
динамическая
duck-typing
Scala: какая она
Scala: какая она
Сложность:
Scala: какая она
Сложность:
простая
Scala: какая она
Сложность:
простая
сложная
Scala: какая она
Сложность:
простая
сложная
Начнем с простого:
companion object
Начнем с простого:
companion object
Начнем с простого:
companion object и наследование
Начнем с простого:
companion object in Java
GOTO современности: return
GOTO современности: return
With no warnings…
GOTO современности: return
GOTO современности: return
GOTO современности: return
GOTO современности: return
GOTO современности: return
Play:
Scala
Прежде чем начать программировать на Java,
нужно читать книгу“Effective Programming in
Java”. Почему бы просто не создать
эффективную Java? И она создана – это Scala!
(Dr. Venkat Subramaniam)
Арность-0: скобки
def foo = …
val f = foo
def foo() = …
val f = foo
def foo = …
val f = foo()
def foo() = …
val f = foo()
Арность-0: скобки
def foo = …
val f = foo
def foo() = …
val f = foo
def foo = …
val f = foo()
def foo() = …
val f = foo()Won’t compile
Арность-0: скобки
def foo = …
val f = foo
def foo() = …
val f = foo
def foo = …
val f = foo()
def foo() = …
val f = foo()Won’t compile
Side-effects here
No side-effects here
Арность-0: скобки
def foo = …
val f = foo
def foo() = …
val f = foo
def foo = …
val f = foo()
def foo() = …
val f = foo()Won’t compile
Side-effects here
No side-effects here ?
Арность-0: скобки #1
Арность-0: скобки #1
Арность-0: скобки #1
OK!
Арность-0: скобки
def foo = …
val f = foo
def foo() = …
val f = foo
def foo = …
val f = foo()
def foo() = …
val f = foo()Won’t compile
Side-effects here
No side-effects here
Арность-0: скобки
def foo = …
val f = foo
def foo() = …
val f = foo
def foo = …
val f = foo()
def foo() = …
val f = foo()Won’t compile
Side-effects here
No side-effects here
Bad practice
Арность-0: скобки
def foo = …
val f = foo
def foo() = …
val f = foo
def foo = …
val f = foo()
def foo() = …
val f = foo()
Side-effects here
No side-effects here
WILL compile !!!
Bad practice
Арность-0: скобки #2
Арность-0: скобки #2
Арность-0: скобки #2
Проклятие метода apply(…) и значения () типа Unit
Арность-0: скобки
def foo = …
val f = foo
def foo() = …
val f = foo
def foo = …
val f = foo()
def foo() = …
val f = foo()Won’t compile
Side-effects here
No side-effects here
Bad practice
Арность-0: точка
Арность-0: точка
Результат:
java.lang.IndexOutOfBoundsException
… в 20% случаев
Арность-0: точка
Результат:
java.lang.IndexOutOfBoundsException
… в 20% случаев
Арность-0: точка
Как скомпилировалось:
Арность-0: точка
Точнее:
Постфиксная запись
Зачем?
Постфиксная запись: DSL
Постфиксная запись: DSL
map
map
map
map
Еще одно проклятие: _
Еще одно проклятие: _
Еще одно проклятие: _
Сколько раз выведется Foo?
Еще одно проклятие: _
Сколько раз выведется Foo?
Аж один раз!
Еще одно проклятие: _
OK!
Lazy + mutable
Lazy + mutable
Свобода – это
ответственность
Необходимо знать все
граничные сценарии, чтобы
не отстрелить себе ногу
Как?
Много всего
запоминать
и периодически переосмысливать
Как?
Каты
Ката – упражнение, которое помогает ${whomever}
оттачивать мастерство путем практики и повторений.
(Wikipedia)
Каты
Ката – упражнение по
программированию, которое
помогает программистам
оттачивать мастерство путем
практики и повторений.
(Wikipedia)
Метод Spaced Repetitions
Метод Spaced Repetitions
Метод Spaced Repetitions
Метод Spaced Repetitions
Метод Spaced Repetitions:
что запоминаю я
Метод Spaced Repetitions:
что запоминаю я
Упражнения из книг и лекций
Метод Spaced Repetitions:
что запоминаю я
Упражнения из книг и лекций
Любые проблемы, на которые я потратил
больше часа и которые можно ясно
сформулировать
Метод Spaced Repetitions:
что запоминаю я
Упражнения из книг и лекций
Любые проблемы, на которые я потратил
больше часа и которые можно ясно
сформулировать
Wow-находки
Метод Spaced Repetitions:
что запоминаю я
Упражнения из книг и лекций
Любые проблемы, на которые я потратил
больше часа и которые можно ясно
сформулировать
Wow-находки
Что угодно!
Спасибо!
Вопросы?

Scala Rock-Painting