SlideShare a Scribd company logo
на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 Rock-Painting
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-находки
Что угодно!
Спасибо!
Вопросы?

More Related Content

PDF
Spring data jee conf
PDF
мифы о спарке
PDF
What to expect from Java 9
PDF
Разговор про Java 9. Extended version
PDF
Быстрое расширение Robot Framework под свои нужды с использованием Python
PPTX
Java Ahead-Of-Time compilation
PDF
JavaScript Базовый. Занятие 03.
PPTX
JVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
Spring data jee conf
мифы о спарке
What to expect from Java 9
Разговор про Java 9. Extended version
Быстрое расширение Robot Framework под свои нужды с использованием Python
Java Ahead-Of-Time compilation
JavaScript Базовый. Занятие 03.
JVM: краткий курс общей анатомии, JPoint 2016 Conference Edition

What's hot (18)

PDF
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
ODP
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
PPTX
Spring the ripper
ODP
Документирование исходных текстов (javadoc)
PDF
JPoint 2016 - Bytecode
PPTX
Грязная автоматизация
PDF
My talk at YouCon Saratov 2016
PDF
Mobile Monday Kiev#1 - How to save time in Mobile Apps Development
PPTX
неприятная правда про язык go
PDF
Spring puzzlers
PDF
How to cook a blockchain and not get burned
PDF
Akka: как я перестал бояться и полюбил асинхронный код
PDF
Проблемы автоматизации крупных проектов: TestComplete
PDF
Лев Валкин — Кое-что про Erlang
PDF
Scala performance под капотом
PDF
Опыт использования Erlang в разработке многопользовательской игры
PDF
Joker 2016 - Bytecode 101
PDF
В поисках магической кнопки или как приручить SOAP UI
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Spring the ripper
Документирование исходных текстов (javadoc)
JPoint 2016 - Bytecode
Грязная автоматизация
My talk at YouCon Saratov 2016
Mobile Monday Kiev#1 - How to save time in Mobile Apps Development
неприятная правда про язык go
Spring puzzlers
How to cook a blockchain and not get burned
Akka: как я перестал бояться и полюбил асинхронный код
Проблемы автоматизации крупных проектов: TestComplete
Лев Валкин — Кое-что про Erlang
Scala performance под капотом
Опыт использования Erlang в разработке многопользовательской игры
Joker 2016 - Bytecode 101
В поисках магической кнопки или как приручить SOAP UI
Ad

Viewers also liked (20)

PDF
Generics Past, Present and Future
PPTX
Есть ли жизнь без ООП
PDF
Language oriented programming_(lop)_в_действии_(максим_мазин,_add-2011)
PPTX
Web application I have always dreamt of
PDF
BIG DATA: From mammoth to elephant
PDF
JEE Conf 2015: Less JS!
PDF
Atomics, CAS and Nonblocking algorithms
PDF
CompletableFuture уже здесь
ODP
PDF
JDK: CPU, PSU, LU, FR — WTF?!
PDF
Pragmatic functional refactoring with java 8 (1)
PDF
Statis code analysis
PDF
Java compilers and IDEs
PDF
Scala training
PDF
Backend: Пишем на Scala для браузера
PDF
PDF
Under the hood of scala implicits (Scala eXchange 2014)
PDF
PDF
Generics Past, Present and Future
Есть ли жизнь без ООП
Language oriented programming_(lop)_в_действии_(максим_мазин,_add-2011)
Web application I have always dreamt of
BIG DATA: From mammoth to elephant
JEE Conf 2015: Less JS!
Atomics, CAS and Nonblocking algorithms
CompletableFuture уже здесь
JDK: CPU, PSU, LU, FR — WTF?!
Pragmatic functional refactoring with java 8 (1)
Statis code analysis
Java compilers and IDEs
Scala training
Backend: Пишем на Scala для браузера
Under the hood of scala implicits (Scala eXchange 2014)
Ad

Similar to Scala Rock-Painting (20)

PDF
Павел Павлов - Scala для профессионалов - Joker 2013
PDF
Scala, SBT & Play! for Rapid Application Development
PDF
Scala: что, как и зачем?
PDF
Unsafe: to be or to be removed?
PDF
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...
PPTX
Зачем нужна Scala?
PPTX
JavaScript: хороший тон клиентской разработки
PDF
"Портирование Web SDK с JS на TS" Петров Григорий, Voximplant
PDF
In the sun.misc.Unsafe bowels
PDF
Бэкенд, фронтенд — всё смешалось (nodkz)
PDF
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
PPTX
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
PDF
Визуализация покрытия автоматизированными UI тестами
PDF
Lift, play, akka, rails part1
PDF
Вадим Челышов, Scala Engineer : Все ненавидят SBT
PDF
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
PPTX
. Kotlin для Автоматизации тестирования – первые впечатления
PPT
использование Hibernate java persistence.part 1.
PDF
Joker2014
PPTX
Статический анализ кода: борьба с удорожанием ошибок
Павел Павлов - Scala для профессионалов - Joker 2013
Scala, SBT & Play! for Rapid Application Development
Scala: что, как и зачем?
Unsafe: to be or to be removed?
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...
Зачем нужна Scala?
JavaScript: хороший тон клиентской разработки
"Портирование Web SDK с JS на TS" Петров Григорий, Voximplant
In the sun.misc.Unsafe bowels
Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
Визуализация покрытия автоматизированными UI тестами
Lift, play, akka, rails part1
Вадим Челышов, Scala Engineer : Все ненавидят SBT
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
. Kotlin для Автоматизации тестирования – первые впечатления
использование Hibernate java persistence.part 1.
Joker2014
Статический анализ кода: борьба с удорожанием ошибок

More from GlobalLogic Ukraine (20)

PDF
GlobalLogic JavaScript Community Webinar #21 “Інтерв’ю без заспокійливих”
PPTX
Deadlocks in SQL - Turning Fear Into Understanding (by Sergii Stets)
PDF
GlobalLogic Java Community Webinar #18 “How to Improve Web Application Perfor...
PDF
GlobalLogic Embedded Community x ROS Ukraine Webinar "Surgical Robots"
PDF
GlobalLogic Java Community Webinar #17 “SpringJDBC vs JDBC. Is Spring a Hero?”
PDF
GlobalLogic JavaScript Community Webinar #18 “Long Story Short: OSI Model”
PPTX
Штучний інтелект як допомога в навчанні, а не замінник.pptx
PPTX
Задачі AI-розробника як застосовується штучний інтелект.pptx
PPTX
Що треба вивчати, щоб стати розробником штучного інтелекту та нейромереж.pptx
PDF
GlobalLogic Java Community Webinar #16 “Zaloni’s Architecture for Data-Driven...
PDF
JavaScript Community Webinar #14 "Why Is Git Rebase?"
PDF
GlobalLogic .NET Community Webinar #3 "Exploring Serverless with Azure Functi...
PPTX
Страх і сила помилок - IT Inside від GlobalLogic Education
PDF
GlobalLogic .NET Webinar #2 “Azure RBAC and Managed Identity”
PDF
GlobalLogic QA Webinar “What does it take to become a Test Engineer”
PDF
“How to Secure Your Applications With a Keycloak?
PDF
GlobalLogic Machine Learning Webinar “Advanced Statistical Methods for Linear...
PPTX
GlobalLogic Machine Learning Webinar “Statistical learning of linear regressi...
PDF
GlobalLogic C++ Webinar “The Minimum Knowledge to Become a C++ Developer”
PDF
Embedded Webinar #17 "Low-level Network Testing in Embedded Devices Development"
GlobalLogic JavaScript Community Webinar #21 “Інтерв’ю без заспокійливих”
Deadlocks in SQL - Turning Fear Into Understanding (by Sergii Stets)
GlobalLogic Java Community Webinar #18 “How to Improve Web Application Perfor...
GlobalLogic Embedded Community x ROS Ukraine Webinar "Surgical Robots"
GlobalLogic Java Community Webinar #17 “SpringJDBC vs JDBC. Is Spring a Hero?”
GlobalLogic JavaScript Community Webinar #18 “Long Story Short: OSI Model”
Штучний інтелект як допомога в навчанні, а не замінник.pptx
Задачі AI-розробника як застосовується штучний інтелект.pptx
Що треба вивчати, щоб стати розробником штучного інтелекту та нейромереж.pptx
GlobalLogic Java Community Webinar #16 “Zaloni’s Architecture for Data-Driven...
JavaScript Community Webinar #14 "Why Is Git Rebase?"
GlobalLogic .NET Community Webinar #3 "Exploring Serverless with Azure Functi...
Страх і сила помилок - IT Inside від GlobalLogic Education
GlobalLogic .NET Webinar #2 “Azure RBAC and Managed Identity”
GlobalLogic QA Webinar “What does it take to become a Test Engineer”
“How to Secure Your Applications With a Keycloak?
GlobalLogic Machine Learning Webinar “Advanced Statistical Methods for Linear...
GlobalLogic Machine Learning Webinar “Statistical learning of linear regressi...
GlobalLogic C++ Webinar “The Minimum Knowledge to Become a C++ Developer”
Embedded Webinar #17 "Low-level Network Testing in Embedded Devices Development"

Scala Rock-Painting