scala rock painting (ukrainian version)
TRANSCRIPT
наSкальний живописДмитро Мантула
[email protected] @diez_devJAVADAY LVIV 2015
Знайомимося:
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, ….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: яка вона
Programming model:
Scala: яка вона
Programming model:
функціональна
Scala: яка вона
Programming model:
функціональна
об'єктно-орієнтована
А що нам пропонує ФП?
А що нам пропонує ФП?абстракції більш високого рівня краща модулярність коротше код менш error-prone вища продуктивність розробки
А що нам пропонує ФП?абстракції більш високого рівня краща модулярність коротше код менш error-prone вища продуктивність розробки
Але ж ФП вже 50 років…
А що нам пропонує ФП?абстракції більш високого рівня краща модулярність коротше код менш error-prone вища продуктивність розробки
Але ж ФП вже 50 років…
ООП пропонувало те ж саме 30 років тому!
З'явився привід!зріст потреб до hardware
З'явився привід!зріст потреб до hardware
продуктивність ЦП не збільшується – збільшується кількість ядер ЦП
З'явився привід!зріст потреб до hardware
продуктивність ЦП не збільшується – збільшується кількість ядер ЦП
в існуючих програмних моделях локи не скейляться
GENE AMDAHL, 1967
З'явився привід: закон Амдала
З'явився привід!зріст потреб до hardware
продуктивність ЦП не збільшується – збільшується кількість ядер ЦП
в існуючих програмних моделях локи не скейляться
потрібні абстракції більш високого рівня, де parallel ≈ distributed
З'явився привід!зріст потреб до hardware
продуктивність ЦП не збільшується – збільшується кількість ядер ЦП
в існуючих програмних моделях локи не скейляться
потрібні абстракції більш високого рівня, де parallel ≈ distributed
відокремлення поведінки від стану!
Scala: яка вона
Programming model:
функціональна
об'єктно-орієнтована
Scala: яка вона
Scala: яка вона
Типізація:статична
Scala: яка вона
Типізація:статичнадинамічна
Scala: яка вона
Типізація:статичнадинамічнаduck-typing
Scala: яка вона
Scala: яка вона
Складність:
Scala: яка вона
Складність:проста
Scala: яка вона
Складність:проста
складна
Scala: яка вона
Складність:проста
складна
НЕБЕЗПЕЧНА
Scala
Перш ніж почати програмувати на Java, треба прочитати книжку
“Effective Programming in Java”. Чому ж просто не створити ефективну Java? І насправді вона вже створена – це Scala!
(Dr. Venkat Subramaniam)
GOTO сучасності: return
GOTO сучасності: return
With no warnings…
GOTO сучасності: return
With no warnings…
GOTO сучасності: return
GOTO сучасності: return
GOTO сучасності: return
GOTO сучасності: return
GOTO сучасності: return
Play:
Арність-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
крута штука type inference!
Арність-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 … в 80% випадків
Арність-0: без крапки
Результат:java.lang.IndexOutOfBoundsException … в 80% випадків
Арність-0: без крапки
Як скомпілювалось:
Арність-0: без крапки
Точніше:
Арність-0: без крапки
Навіщо ж тоді?
= постфіксна нотація
Постфіксна нотація: DSL
Постфіксна нотація: DSL
інакше ворнінг
map
map
map
map
Ще одне прокляття: _
Ще одне прокляття: _
Ще одне прокляття: _
Скільки разів виведе Foo?
Ще одне прокляття: _
Скільки разів виведе Foo?
Аж один!
Ще одне прокляття: _
OK!
Lazy + mutable
Lazy + mutable
Companion object
Companion object
Companion object
Companion object in Java
Свобода – це відповідальність
Необхідно знати і усвідомлювати усі граничні випадки, щоб не
відстрелити собі ногу
Як?
Багато всього запам'ятовувати
та періодично переосмислювати
Як?
Кати
Ката – вправа, яка допомагає ${whomever} відточувати свою майстерність шляхом практики та повторень. (Wikipedia)
Кати
Ката – вправа з програмування, яка допомагає програмістам відточувати майстерність шляхом практики та повторень.
Метод Spaced Repetitions
Метод Spaced Repetitions
Метод Spaced Repetitions
Метод Spaced Repetitions
Метод Spaced Repetitions:
що запам'ятовую я
Метод Spaced Repetitions:
що запам'ятовую яВправи з книжок і лекцій
Метод Spaced Repetitions:
що запам'ятовую яВправи з книжок і лекцій
Будь-які проблеми, на вирішення яких я втратив більше години і які можно зрозуміло сформулювати
Метод Spaced Repetitions:
що запам'ятовую яВправи з книжок і лекцій
Будь-які проблеми, на вирішення яких я втратив більше години і які можно зрозуміло сформулювати
Wow-знахідки
Метод Spaced Repetitions:
що запам'ятовую яВправи з книжок і лекцій
Будь-які проблеми, на вирішення яких я втратив більше години і які можно зрозуміло сформулювати
Wow-знахідки
Що завгодно!
M A N N I N G
IN ACTIONNilanjan RaychaudhuriFOREWORD BY Chad Fowler
Covers Scala 2.10
M A N N I N G
IN ACTIONNilanjan RaychaudhuriFOREWORD BY Chad Fowler
Covers Scala 2.10
Дякую! Питання?