Upload
globallogic-ukraine
View
265
Download
1
Embed Size (px)
Citation preview
наSкальная живописьДмитрий Мантула
[email protected] @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-находки
Что угодно!
Спасибо! Вопросы?