111
наS кальний живопис Дмитро Мантула [email protected] @diez_dev JAVADAY LVIV 2015

Scala Rock Painting (Ukrainian version)

Embed Size (px)

Citation preview

Page 1: Scala Rock Painting (Ukrainian version)

наSкальний живописДмитро Мантула

[email protected] @diez_devJAVADAY LVIV 2015

Page 2: Scala Rock Painting (Ukrainian version)

Знайомимося:

Page 3: Scala Rock Painting (Ukrainian version)

Scala? У комерційному використанні?

Знайомимося:

Page 4: Scala Rock Painting (Ukrainian version)

Scala? У комерційному використанні?

Java? Java 8?

Знайомимося:

Page 5: Scala Rock Painting (Ukrainian version)

Scala? У комерційному використанні?

Java? Java 8?

“Functional Programming in Scala” @ Coursera

Знайомимося:

Page 6: Scala Rock Painting (Ukrainian version)

Scala? У комерційному використанні?

Java? Java 8?

“Functional Programming in Scala” @ Coursera

“Reactive Programming” @ Coursera

Знайомимося:

Page 7: Scala Rock Painting (Ukrainian version)

Scala? У комерційному використанні?

Java? Java 8?

“Functional Programming in Scala” @ Coursera

“Reactive Programming” @ Coursera

Хто розуміє, що таке ФП?

Знайомимося:

Page 8: Scala Rock Painting (Ukrainian version)

Scala? У комерційному використанні?

Java? Java 8?

“Functional Programming in Scala” @ Coursera

“Reactive Programming” @ Coursera

Хто розуміє, що таке ФП?

Хто знає, що таке сайд-ефект?

Знайомимося:

Page 9: Scala Rock Painting (Ukrainian version)

Scala? У комерційному використанні?

Java? Java 8?

“Functional Programming in Scala” @ Coursera

“Reactive Programming” @ Coursera

Хто розуміє, що таке ФП?

Хто знає, що таке сайд-ефект?

Хто знає, що таке гомотопічні групи?

Знайомимося:

Page 10: Scala Rock Painting (Ukrainian version)

Scala? У комерційному використанні?

Java? Java 8?

“Functional Programming in Scala” @ Coursera

“Reactive Programming” @ Coursera

Хто розуміє, що таке ФП?

Хто знає, що таке сайд-ефект?

Хто знає, що таке гомотопічні групи?

Знайомимося:

Page 11: Scala Rock Painting (Ukrainian version)

Знайомимося:

Комерційний досвід у Java з 2004 року: web, enterprise, J2ME, Android, embedded.

“Functional Programming in Scala” @ Coursera (2012)

2013–Present – Scala-based back-end

Page 12: Scala Rock Painting (Ukrainian version)

вести щоденник

Добра практика для вивчаючих що завгодно:

Page 13: Scala Rock Painting (Ukrainian version)

Знайомимося: мій проект

Page 14: Scala Rock Painting (Ukrainian version)

Знайомимося: мій проектLanguages: Java, Scala, …

Page 15: Scala Rock Painting (Ukrainian version)

Знайомимося: мій проектLanguages: Java, Scala, …DI: Spring, Guava, Cake-pattern, ….REST: Spray, (Play), …DB: JDBC, Hibernate, Slick, …Build tools: Maven, SBT, …

Page 16: Scala Rock Painting (Ukrainian version)

Знайомимося: мій проектLanguages: Java, Scala, …DI: Spring, Guava, Cake-pattern, ….REST: Spray, (Play), …DB: JDBC, Hibernate, Slick, …Build tools: Maven, SBT, …Peopleware:

Page 17: Scala Rock Painting (Ukrainian version)

Знайомимося: мій проектLanguages: Java, Scala, …DI: Spring, Guava, Cake-pattern, ….REST: Spray, (Play), …DB: JDBC, Hibernate, Slick, …Build tools: Maven, SBT, …Peopleware:

“Імперативщики” та “декларативщики”

Page 18: Scala Rock Painting (Ukrainian version)

Знайомимося: мій проектLanguages: Java, Scala, …DI: Spring, Guava, Cake-pattern, ….REST: Spray, (Play), …DB: JDBC, Hibernate, Slick, …Build tools: Maven, SBT, …Peopleware:

“Імперативщики” та “декларативщики”Сіньори та не-сіньори

Page 19: Scala Rock Painting (Ukrainian version)

Знайомимося: мій проектLanguages: Java, Scala, …DI: Spring, Guava, Cake-pattern, ….REST: Spray, (Play), …DB: JDBC, Hibernate, Slick, …Build tools: Maven, SBT, …Peopleware:

“Імперативщики” та “декларативщики”Сіньори та не-сіньори“Адеквати” та “неадеквати” з т. з. codebase

Page 20: Scala Rock Painting (Ukrainian version)
Page 21: Scala Rock Painting (Ukrainian version)

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)

Page 22: Scala Rock Painting (Ukrainian version)

Scala: яка вона

Page 23: Scala Rock Painting (Ukrainian version)

Scala: яка вона

Programming model:

Page 24: Scala Rock Painting (Ukrainian version)

Scala: яка вона

Programming model:

функціональна

Page 25: Scala Rock Painting (Ukrainian version)

Scala: яка вона

Programming model:

функціональна

об'єктно-орієнтована

Page 26: Scala Rock Painting (Ukrainian version)

А що нам пропонує ФП?

Page 27: Scala Rock Painting (Ukrainian version)

А що нам пропонує ФП?абстракції більш високого рівня краща модулярність коротше код менш error-prone вища продуктивність розробки

Page 28: Scala Rock Painting (Ukrainian version)

А що нам пропонує ФП?абстракції більш високого рівня краща модулярність коротше код менш error-prone вища продуктивність розробки

Але ж ФП вже 50 років…

Page 29: Scala Rock Painting (Ukrainian version)

А що нам пропонує ФП?абстракції більш високого рівня краща модулярність коротше код менш error-prone вища продуктивність розробки

Але ж ФП вже 50 років…

ООП пропонувало те ж саме 30 років тому!

Page 30: Scala Rock Painting (Ukrainian version)

З'явився привід!зріст потреб до hardware

Page 31: Scala Rock Painting (Ukrainian version)

З'явився привід!зріст потреб до hardware

продуктивність ЦП не збільшується – збільшується кількість ядер ЦП

Page 32: Scala Rock Painting (Ukrainian version)

З'явився привід!зріст потреб до hardware

продуктивність ЦП не збільшується – збільшується кількість ядер ЦП

в існуючих програмних моделях локи не скейляться

Page 33: Scala Rock Painting (Ukrainian version)

GENE AMDAHL, 1967

З'явився привід: закон Амдала

Page 34: Scala Rock Painting (Ukrainian version)

З'явився привід!зріст потреб до hardware

продуктивність ЦП не збільшується – збільшується кількість ядер ЦП

в існуючих програмних моделях локи не скейляться

потрібні абстракції більш високого рівня, де parallel ≈ distributed

Page 35: Scala Rock Painting (Ukrainian version)

З'явився привід!зріст потреб до hardware

продуктивність ЦП не збільшується – збільшується кількість ядер ЦП

в існуючих програмних моделях локи не скейляться

потрібні абстракції більш високого рівня, де parallel ≈ distributed

відокремлення поведінки від стану!

Page 36: Scala Rock Painting (Ukrainian version)

Scala: яка вона

Programming model:

функціональна

об'єктно-орієнтована

Page 37: Scala Rock Painting (Ukrainian version)

Scala: яка вона

Page 38: Scala Rock Painting (Ukrainian version)

Scala: яка вона

Типізація:статична

Page 39: Scala Rock Painting (Ukrainian version)

Scala: яка вона

Типізація:статичнадинамічна

Page 40: Scala Rock Painting (Ukrainian version)

Scala: яка вона

Типізація:статичнадинамічнаduck-typing

Page 41: Scala Rock Painting (Ukrainian version)

Scala: яка вона

Page 42: Scala Rock Painting (Ukrainian version)

Scala: яка вона

Складність:

Page 43: Scala Rock Painting (Ukrainian version)

Scala: яка вона

Складність:проста

Page 44: Scala Rock Painting (Ukrainian version)

Scala: яка вона

Складність:проста

складна

Page 45: Scala Rock Painting (Ukrainian version)

Scala: яка вона

Складність:проста

складна

НЕБЕЗПЕЧНА

Page 46: Scala Rock Painting (Ukrainian version)

Scala

Перш ніж почати програмувати на Java, треба прочитати книжку

“Effective Programming in Java”. Чому ж просто не створити ефективну Java? І насправді вона вже створена – це Scala!

(Dr. Venkat Subramaniam)

Page 47: Scala Rock Painting (Ukrainian version)

GOTO сучасності: return

Page 48: Scala Rock Painting (Ukrainian version)

GOTO сучасності: return

With no warnings…

Page 49: Scala Rock Painting (Ukrainian version)

GOTO сучасності: return

With no warnings…

Page 50: Scala Rock Painting (Ukrainian version)

GOTO сучасності: return

Page 51: Scala Rock Painting (Ukrainian version)

GOTO сучасності: return

Page 52: Scala Rock Painting (Ukrainian version)

GOTO сучасності: return

Page 53: Scala Rock Painting (Ukrainian version)

GOTO сучасності: return

Page 54: Scala Rock Painting (Ukrainian version)

GOTO сучасності: return

Play:

Page 55: Scala Rock Painting (Ukrainian version)

Арність-0: дужки

def foo = …

val f = foo

def foo() = …

val f = foo

def foo = …

val f = foo()

def foo() = …

val f = foo()

Page 56: Scala Rock Painting (Ukrainian version)

Арність-0: дужки

def foo = …

val f = foo

def foo() = …

val f = foo

def foo = …

val f = foo()

def foo() = …

val f = foo()Won’t compile

Page 57: Scala Rock Painting (Ukrainian version)

Арність-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

Page 58: Scala Rock Painting (Ukrainian version)

Арність-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 ?

Page 59: Scala Rock Painting (Ukrainian version)

Арність-0: дужки #1

Page 60: Scala Rock Painting (Ukrainian version)

Арність-0: дужки #1

Page 61: Scala Rock Painting (Ukrainian version)

Арність-0: дужки #1

OK!

Page 62: Scala Rock Painting (Ukrainian version)

Арність-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

Page 63: Scala Rock Painting (Ukrainian version)

Арність-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

Page 64: Scala Rock Painting (Ukrainian version)

Арність-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

Page 65: Scala Rock Painting (Ukrainian version)

Арність-0: дужки #2

Page 66: Scala Rock Painting (Ukrainian version)

Арність-0: дужки #2

крута штука type inference!

Page 67: Scala Rock Painting (Ukrainian version)

Арність-0: дужки #2

Page 68: Scala Rock Painting (Ukrainian version)

Арність-0: дужки #2

Page 69: Scala Rock Painting (Ukrainian version)

Арність-0: дужки #2

Прокляття методу apply(…) і значення () типу Unit

Як скомпілювалось:

Page 70: Scala Rock Painting (Ukrainian version)

Арність-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

Page 71: Scala Rock Painting (Ukrainian version)

Арність-0: без крапки

Page 72: Scala Rock Painting (Ukrainian version)

Арність-0: без крапки

Результат:java.lang.IndexOutOfBoundsException … в 80% випадків

Page 73: Scala Rock Painting (Ukrainian version)

Арність-0: без крапки

Результат:java.lang.IndexOutOfBoundsException … в 80% випадків

Page 74: Scala Rock Painting (Ukrainian version)

Арність-0: без крапки

Як скомпілювалось:

Page 75: Scala Rock Painting (Ukrainian version)

Арність-0: без крапки

Точніше:

Page 76: Scala Rock Painting (Ukrainian version)

Арність-0: без крапки

Навіщо ж тоді?

= постфіксна нотація

Page 77: Scala Rock Painting (Ukrainian version)

Постфіксна нотація: DSL

Page 78: Scala Rock Painting (Ukrainian version)

Постфіксна нотація: DSL

інакше ворнінг

Page 79: Scala Rock Painting (Ukrainian version)

map

Page 80: Scala Rock Painting (Ukrainian version)

map

Page 81: Scala Rock Painting (Ukrainian version)

map

Page 82: Scala Rock Painting (Ukrainian version)

map

Page 83: Scala Rock Painting (Ukrainian version)

Ще одне прокляття: _

Page 84: Scala Rock Painting (Ukrainian version)

Ще одне прокляття: _

Page 85: Scala Rock Painting (Ukrainian version)

Ще одне прокляття: _

Скільки разів виведе Foo?

Page 86: Scala Rock Painting (Ukrainian version)

Ще одне прокляття: _

Скільки разів виведе Foo?

Аж один!

Page 87: Scala Rock Painting (Ukrainian version)

Ще одне прокляття: _

OK!

Page 88: Scala Rock Painting (Ukrainian version)

Lazy + mutable

Page 89: Scala Rock Painting (Ukrainian version)

Lazy + mutable

Page 90: Scala Rock Painting (Ukrainian version)

Companion object

Page 91: Scala Rock Painting (Ukrainian version)

Companion object

Page 92: Scala Rock Painting (Ukrainian version)

Companion object

Page 93: Scala Rock Painting (Ukrainian version)

Companion object in Java

Page 94: Scala Rock Painting (Ukrainian version)

Свобода – це відповідальність

Page 95: Scala Rock Painting (Ukrainian version)

Необхідно знати і усвідомлювати усі граничні випадки, щоб не

відстрелити собі ногу

Page 96: Scala Rock Painting (Ukrainian version)

Як?

Page 97: Scala Rock Painting (Ukrainian version)

Багато всього запам'ятовувати

та періодично переосмислювати

Як?

Page 98: Scala Rock Painting (Ukrainian version)

Кати

Ката – вправа, яка допомагає ${whomever} відточувати свою майстерність шляхом практики та повторень. (Wikipedia)

Page 99: Scala Rock Painting (Ukrainian version)

Кати

Ката – вправа з програмування, яка допомагає програмістам відточувати майстерність шляхом практики та повторень.

Page 100: Scala Rock Painting (Ukrainian version)

Метод Spaced Repetitions

Page 101: Scala Rock Painting (Ukrainian version)

Метод Spaced Repetitions

Page 102: Scala Rock Painting (Ukrainian version)

Метод Spaced Repetitions

Page 103: Scala Rock Painting (Ukrainian version)

Метод Spaced Repetitions

Page 104: Scala Rock Painting (Ukrainian version)

Метод Spaced Repetitions:

що запам'ятовую я

Page 105: Scala Rock Painting (Ukrainian version)

Метод Spaced Repetitions:

що запам'ятовую яВправи з книжок і лекцій

Page 106: Scala Rock Painting (Ukrainian version)

Метод Spaced Repetitions:

що запам'ятовую яВправи з книжок і лекцій

Будь-які проблеми, на вирішення яких я втратив більше години і які можно зрозуміло сформулювати

Page 107: Scala Rock Painting (Ukrainian version)

Метод Spaced Repetitions:

що запам'ятовую яВправи з книжок і лекцій

Будь-які проблеми, на вирішення яких я втратив більше години і які можно зрозуміло сформулювати

Wow-знахідки

Page 108: Scala Rock Painting (Ukrainian version)

Метод Spaced Repetitions:

що запам'ятовую яВправи з книжок і лекцій

Будь-які проблеми, на вирішення яких я втратив більше години і які можно зрозуміло сформулювати

Wow-знахідки

Що завгодно!

Page 109: Scala Rock Painting (Ukrainian version)

M A N N I N G

IN ACTIONNilanjan RaychaudhuriFOREWORD BY Chad Fowler

Covers Scala 2.10

Page 110: Scala Rock Painting (Ukrainian version)

M A N N I N G

IN ACTIONNilanjan RaychaudhuriFOREWORD BY Chad Fowler

Covers Scala 2.10

Page 111: Scala Rock Painting (Ukrainian version)

Дякую! Питання?