scala rock-painting

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

Upload: globallogic-ukraine

Post on 03-Aug-2015

265 views

Category:

Engineering


1 download

TRANSCRIPT

Page 1: Scala Rock-Painting

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

[email protected] @diez_dev

Page 2: Scala Rock-Painting

Знакомимся:

Page 3: Scala Rock-Painting

Scala? В коммерческом использовании?

Знакомимся:

Page 4: Scala Rock-Painting

Scala? В коммерческом использовании?

Java? Java 8?

Знакомимся:

Page 5: Scala Rock-Painting

Scala? В коммерческом использовании?

Java? Java 8?

“Functional Programming in Scala” @ Coursera

Знакомимся:

Page 6: Scala Rock-Painting

Scala? В коммерческом использовании?

Java? Java 8?

“Functional Programming in Scala” @ Coursera

“Reactive Programming” @ Coursera

Знакомимся:

Page 7: Scala Rock-Painting

Scala? В коммерческом использовании?

Java? Java 8?

“Functional Programming in Scala” @ Coursera

“Reactive Programming” @ Coursera

Кто понимает, что такое ФП?

Знакомимся:

Page 8: Scala Rock-Painting

Scala? В коммерческом использовании?

Java? Java 8?

“Functional Programming in Scala” @ Coursera

“Reactive Programming” @ Coursera

Кто понимает, что такое ФП?

Что знает, что такое сайд-эффект?

Знакомимся:

Page 9: Scala Rock-Painting

Scala? В коммерческом использовании?

Java? Java 8?

“Functional Programming in Scala” @ Coursera

“Reactive Programming” @ Coursera

Кто понимает, что такое ФП?

Что знает, что такое сайд-эффект?

Что знает, что такое гомотопические группы?

Знакомимся:

Page 10: Scala Rock-Painting

Scala? В коммерческом использовании?

Java? Java 8?

“Functional Programming in Scala” @ Coursera

“Reactive Programming” @ Coursera

Кто понимает, что такое ФП?

Что знает, что такое сайд-эффект?

Что знает, что такое гомотопические группы?

Знакомимся:

Page 11: Scala Rock-Painting

Знакомимся:

Коммерческий опыт Java с 2004 года: web, enterprise, J2ME, Android, embedded.

“Functional Programming in Scala” @ Coursera (2012)

2013–Present – Scala-based back-end

Page 12: Scala Rock-Painting

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

Page 13: Scala Rock-Painting

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

Page 14: Scala Rock-Painting

Знакомимся: мой проектLanguages: Java, Scala, …DI: Spring, Guava, Cake-pattern, ….

Page 15: Scala Rock-Painting

Знакомимся: мой проектLanguages: Java, Scala, …DI: Spring, Guava, Cake-pattern, ….REST: Spray, (Play), …

Page 16: Scala Rock-Painting

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

Page 17: Scala Rock-Painting

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

Page 18: Scala Rock-Painting

Знакомимся: мой проект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

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

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

Page 20: Scala Rock-Painting

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

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

Page 21: Scala Rock-Painting

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

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

Page 22: Scala Rock-Painting

вести́ дневни́к

Хорошая практика для изучающих что-либо:

Page 23: Scala Rock-Painting
Page 24: 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)

Page 25: Scala Rock-Painting

Scala

Scala sets a new standard against which future languages will be measured.

(Neal Gafter, Java language designer)

Page 26: Scala Rock-Painting

Scala: какая она

Page 27: Scala Rock-Painting

Scala: какая она

Programming model:

Page 28: Scala Rock-Painting

Scala: какая она

Programming model:

функциональная

Page 29: Scala Rock-Painting

Scala: какая она

Programming model:

функциональная

объектно-ориентированная

Page 30: Scala Rock-Painting

А что нам предлагает ФП?

Page 31: Scala Rock-Painting

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

Page 32: Scala Rock-Painting

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

Но ведь ФП уже 50 лет…

Page 33: Scala Rock-Painting

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

Но ведь ФП уже 50 лет…

ООП предлагало то же самое 30 лет назад!

Page 34: Scala Rock-Painting

Появился повод!

Page 35: Scala Rock-Painting

Появился повод!рост требований к hardware

производительность ЦП не увеличивается – увеличивается количество ядер ЦП

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

нужны абстракции более высокого уровня, где parallel ≈ distributed

Page 36: Scala Rock-Painting

Scala: какая она

Programming model:

функциональная

объектно-ориентированная

Page 37: Scala Rock-Painting

Scala: какая она

Page 38: Scala Rock-Painting

Scala: какая она

Типизация:статическая

Page 39: Scala Rock-Painting

Scala: какая она

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

Page 40: Scala Rock-Painting

Scala: какая она

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

Page 41: Scala Rock-Painting

Scala: какая она

Page 42: Scala Rock-Painting

Scala: какая она

Сложность:

Page 43: Scala Rock-Painting

Scala: какая она

Сложность:простая

Page 44: Scala Rock-Painting

Scala: какая она

Сложность:простая

сложная

Page 45: Scala Rock-Painting

Scala: какая она

Сложность:простая

сложная

Page 46: Scala Rock-Painting

Начнем с простого: companion object

Page 47: Scala Rock-Painting

Начнем с простого: companion object

Page 48: Scala Rock-Painting

Начнем с простого: companion object и наследование

Page 49: Scala Rock-Painting

Начнем с простого: companion object in Java

Page 50: Scala Rock-Painting

GOTO современности: return

Page 51: Scala Rock-Painting

GOTO современности: return

With no warnings…

Page 52: Scala Rock-Painting

GOTO современности: return

Page 53: Scala Rock-Painting

GOTO современности: return

Page 54: Scala Rock-Painting

GOTO современности: return

Page 55: Scala Rock-Painting

GOTO современности: return

Page 56: Scala Rock-Painting

GOTO современности: return

Play:

Page 57: Scala Rock-Painting

Scala

Прежде чем начать программировать на Java, нужно читать книгу “Effective Programming in

Java”. Почему бы просто не создать эффективную Java? И она создана – это Scala!

(Dr. Venkat Subramaniam)

Page 58: Scala Rock-Painting

Арность-0: скобки

def foo = …

val f = foo

def foo() = …

val f = foo

def foo = …

val f = foo()

def foo() = …

val f = foo()

Page 59: Scala Rock-Painting

Арность-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 60: Scala Rock-Painting

Арность-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 61: Scala Rock-Painting

Арность-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 62: Scala Rock-Painting

Арность-0: скобки #1

Page 63: Scala Rock-Painting

Арность-0: скобки #1

Page 64: Scala Rock-Painting

Арность-0: скобки #1

OK!

Page 65: Scala Rock-Painting

Арность-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 66: Scala Rock-Painting

Арность-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 67: Scala Rock-Painting

Арность-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 68: Scala Rock-Painting

Арность-0: скобки #2

Page 69: Scala Rock-Painting

Арность-0: скобки #2

Page 70: Scala Rock-Painting

Арность-0: скобки #2

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

Page 71: Scala Rock-Painting

Арность-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 72: Scala Rock-Painting

Арность-0: точка

Page 73: Scala Rock-Painting

Арность-0: точка

Результат:java.lang.IndexOutOfBoundsException … в 20% случаев

Page 74: Scala Rock-Painting

Арность-0: точка

Результат:java.lang.IndexOutOfBoundsException … в 20% случаев

Page 75: Scala Rock-Painting

Арность-0: точка

Как скомпилировалось:

Page 76: Scala Rock-Painting

Арность-0: точка

Точнее:

Page 77: Scala Rock-Painting

Постфиксная запись

Зачем?

Page 78: Scala Rock-Painting

Постфиксная запись: DSL

Page 79: Scala Rock-Painting

Постфиксная запись: DSL

Page 80: Scala Rock-Painting

map

Page 81: Scala Rock-Painting

map

Page 82: Scala Rock-Painting

map

Page 83: Scala Rock-Painting

map

Page 84: Scala Rock-Painting

Еще одно проклятие: _

Page 85: Scala Rock-Painting

Еще одно проклятие: _

Page 86: Scala Rock-Painting

Еще одно проклятие: _

Сколько раз выведется Foo?

Page 87: Scala Rock-Painting

Еще одно проклятие: _

Сколько раз выведется Foo?

Аж один раз!

Page 88: Scala Rock-Painting

Еще одно проклятие: _

OK!

Page 89: Scala Rock-Painting

Lazy + mutable

Page 90: Scala Rock-Painting

Lazy + mutable

Page 91: Scala Rock-Painting

Свобода – это ответственность

Page 92: Scala Rock-Painting

Необходимо знать все граничные сценарии, чтобы не отстрелить себе ногу

Page 93: Scala Rock-Painting

Как?

Page 94: Scala Rock-Painting

Много всего запоминать

и периодически переосмысливать

Как?

Page 95: Scala Rock-Painting

Каты

Ката – упражнение, которое помогает ${whomever} оттачивать мастерство путем практики и повторений. (Wikipedia)

Page 96: Scala Rock-Painting

Каты

Ката – упражнение по программированию, которое помогает программистам оттачивать мастерство путем практики и повторений. (Wikipedia)

Page 97: Scala Rock-Painting

Метод Spaced Repetitions

Page 98: Scala Rock-Painting

Метод Spaced Repetitions

Page 99: Scala Rock-Painting

Метод Spaced Repetitions

Page 100: Scala Rock-Painting

Метод Spaced Repetitions

Page 101: Scala Rock-Painting

Метод Spaced Repetitions:

что запоминаю я

Page 102: Scala Rock-Painting

Метод Spaced Repetitions:

что запоминаю яУпражнения из книг и лекций

Page 103: Scala Rock-Painting

Метод Spaced Repetitions:

что запоминаю яУпражнения из книг и лекций

Любые проблемы, на которые я потратил больше часа и которые можно ясно сформулировать

Page 104: Scala Rock-Painting

Метод Spaced Repetitions:

что запоминаю яУпражнения из книг и лекций

Любые проблемы, на которые я потратил больше часа и которые можно ясно сформулировать

Wow-находки

Page 105: Scala Rock-Painting

Метод Spaced Repetitions:

что запоминаю яУпражнения из книг и лекций

Любые проблемы, на которые я потратил больше часа и которые можно ясно сформулировать

Wow-находки

Что угодно!

Page 106: Scala Rock-Painting

Спасибо! Вопросы?