Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
наSкальний живопис
Дмитро Мантула
dmantula@gmail.com
@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” @ Co...
Scala? У комерційному використанні?
Java? Java 8?
“Functional Programming in Scala” @ Coursera
“Reactive Programming” @ Co...
Scala? У комерційному використанні?
Java? Java 8?
“Functional Programming in Scala” @ Coursera
“Reactive Programming” @ Co...
Scala? У комерційному використанні?
Java? Java 8?
“Functional Programming in Scala” @ Coursera
“Reactive Programming” @ Co...
Scala? У комерційному використанні?
Java? Java 8?
“Functional Programming in Scala” @ Coursera
“Reactive Programming” @ Co...
Знайомимося:
Комерційний досвід у Java з 2004 року:
web, enterprise, J2ME, Android,
embedded.
“Functional Programming in S...
вести щоденник
Добра практика
для вивчаючих що завгодно:
Знайомимося: мій проект
Знайомимося: мій проект
Languages: Java, Scala,…
Знайомимося: мій проект
Languages: Java, Scala,…
DI: Spring, Guava, Cake-pattern,….
REST: Spray, (Play),…
DB: JDBC, Hibern...
Знайомимося: мій проект
Languages: Java, Scala,…
DI: Spring, Guava, Cake-pattern,….
REST: Spray, (Play),…
DB: JDBC, Hibern...
Знайомимося: мій проект
Languages: Java, Scala,…
DI: Spring, Guava, Cake-pattern,….
REST: Spray, (Play),…
DB: JDBC, Hibern...
Знайомимося: мій проект
Languages: Java, Scala,…
DI: Spring, Guava, Cake-pattern,….
REST: Spray, (Play),…
DB: JDBC, Hibern...
Знайомимося: мій проект
Languages: Java, Scala,…
DI: Spring, Guava, Cake-pattern,….
REST: Spray, (Play),…
DB: JDBC, Hibern...
Scala
If I were to pick a language today other than Java,
it would be Scala.
(James Gosling, creator of Java, 2011)
I can ...
Scala: яка вона
Scala: яка вона
Programming model:
Scala: яка вона
Programming model:
функціональна
Scala: яка вона
Programming model:
функціональна
об'єктно-орієнтована
А що нам пропонує ФП?
А що нам пропонує ФП?
абстракції більш високого рівня
краща модулярність
коротше код
менш error-prone
вища продуктивність ...
А що нам пропонує ФП?
абстракції більш високого рівня
краща модулярність
коротше код
менш error-prone
вища продуктивність ...
А що нам пропонує ФП?
абстракції більш високого рівня
краща модулярність
коротше код
менш error-prone
вища продуктивність ...
З'явився привід!
зріст потреб до hardware
З'явився привід!
зріст потреб до hardware
продуктивність ЦП не збільшується –
 збільшується кількість ядер ЦП
З'явився привід!
зріст потреб до hardware
продуктивність ЦП не збільшується –
 збільшується кількість ядер ЦП
в існуючих п...
GENE AMDAHL, 1967
З'явився привід: закон Амдала
З'явився привід!
зріст потреб до hardware
продуктивність ЦП не збільшується –
 збільшується кількість ядер ЦП
в існуючих п...
З'явився привід!
зріст потреб до hardware
продуктивність ЦП не збільшується –
 збільшується кількість ядер ЦП
в існуючих п...
Scala: яка вона
Programming model:
функціональна
об'єктно-орієнтована
Scala: яка вона
Scala: яка вона
Типізація:
статична
Scala: яка вона
Типізація:
статична
динамічна
Scala: яка вона
Типізація:
статична
динамічна
duck-typing
Scala: яка вона
Scala: яка вона
Складність:
Scala: яка вона
Складність:
проста
Scala: яка вона
Складність:
проста
складна
Scala: яка вона
Складність:
проста
складна
НЕБЕЗПЕЧНА
Scala
Перш ніж почати програмувати на Java,
треба прочитати книжку
“Effective Programming in Java”.
Чому ж просто не створ...
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()Wo...
Арність-0: дужки
def foo = …
val f = foo
def foo() = …
val f = foo
def foo = …
val f = foo()
def foo() = …
val f = foo()Wo...
Арність-0: дужки
def foo = …
val f = foo
def foo() = …
val f = foo
def foo = …
val f = foo()
def foo() = …
val f = foo()Wo...
Арність-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()Wo...
Арність-0: дужки
def foo = …
val f = foo
def foo() = …
val f = foo
def foo = …
val f = foo()
def foo() = …
val f = foo()Wo...
Арність-0: дужки
def foo = …
val f = foo
def foo() = …
val f = foo
def foo = …
val f = foo()
def foo() = …
val f = foo()
S...
Арність-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()Wo...
Арність-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:
що запам'ятовую я
Вправи з книжок і лекцій
Будь-які проблеми, на вирішення яких я
втратив більше...
Метод Spaced Repetitions:
що запам'ятовую я
Вправи з книжок і лекцій
Будь-які проблеми, на вирішення яких я
втратив більше...
M A N N I N G
IN ACTION
Nilanjan Raychaudhuri
FOREWORD BY Chad Fowler
Covers Scala 2.10
M A N N I N G
IN ACTION
Nilanjan Raychaudhuri
FOREWORD BY Chad Fowler
Covers Scala 2.10
Дякую!
Питання?
Scala Rock Painting (Ukrainian version)
Prochain SlideShare
Chargement dans…5
×

Scala Rock Painting (Ukrainian version)

857 vues

Publié le

This is an updated version* of a presentation devoted to Scala programming language, its perks and disadvantages, elegant solutions and hidden traps.

This presentation by Dmytro Mantula (Lead Software Engineer, GlobalLogic) was delivered at Java Day Lviv on June 14, 2015.

* The first version of the presentation (in Russian) can be found here: http://www.slideshare.net/GlobalLogicUkraine/ss-48746051

More details: http://globallogic.com.ua/java_day_lviv_2015_presentations

Publié dans : Ingénierie
  • Soyez le premier à commenter

Scala Rock Painting (Ukrainian version)

  1. 1. наSкальний живопис Дмитро Мантула dmantula@gmail.com @diez_devJAVADAY LVIV 2015
  2. 2. Знайомимося:
  3. 3. Scala? У комерційному використанні? Знайомимося:
  4. 4. Scala? У комерційному використанні? Java? Java 8? Знайомимося:
  5. 5. Scala? У комерційному використанні? Java? Java 8? “Functional Programming in Scala” @ Coursera Знайомимося:
  6. 6. Scala? У комерційному використанні? Java? Java 8? “Functional Programming in Scala” @ Coursera “Reactive Programming” @ Coursera Знайомимося:
  7. 7. Scala? У комерційному використанні? Java? Java 8? “Functional Programming in Scala” @ Coursera “Reactive Programming” @ Coursera Хто розуміє, що таке ФП? Знайомимося:
  8. 8. Scala? У комерційному використанні? Java? Java 8? “Functional Programming in Scala” @ Coursera “Reactive Programming” @ Coursera Хто розуміє, що таке ФП? Хто знає, що таке сайд-ефект? Знайомимося:
  9. 9. Scala? У комерційному використанні? Java? Java 8? “Functional Programming in Scala” @ Coursera “Reactive Programming” @ Coursera Хто розуміє, що таке ФП? Хто знає, що таке сайд-ефект? Хто знає, що таке гомотопічні групи? Знайомимося:
  10. 10. Scala? У комерційному використанні? Java? Java 8? “Functional Programming in Scala” @ Coursera “Reactive Programming” @ Coursera Хто розуміє, що таке ФП? Хто знає, що таке сайд-ефект? Хто знає, що таке гомотопічні групи? Знайомимося:
  11. 11. Знайомимося: Комерційний досвід у Java з 2004 року: web, enterprise, J2ME, Android, embedded. “Functional Programming in Scala” @ Coursera (2012) 2013–Present – Scala-based back-end
  12. 12. вести щоденник Добра практика для вивчаючих що завгодно:
  13. 13. Знайомимося: мій проект
  14. 14. Знайомимося: мій проект Languages: Java, Scala,…
  15. 15. Знайомимося: мій проект Languages: Java, Scala,… DI: Spring, Guava, Cake-pattern,…. REST: Spray, (Play),… DB: JDBC, Hibernate, Slick,… Build tools: Maven, SBT,…
  16. 16. Знайомимося: мій проект Languages: Java, Scala,… DI: Spring, Guava, Cake-pattern,…. REST: Spray, (Play),… DB: JDBC, Hibernate, Slick,… Build tools: Maven, SBT,… Peopleware:
  17. 17. Знайомимося: мій проект Languages: Java, Scala,… DI: Spring, Guava, Cake-pattern,…. REST: Spray, (Play),… DB: JDBC, Hibernate, Slick,… Build tools: Maven, SBT,… Peopleware: “Імперативщики” та “декларативщики”
  18. 18. Знайомимося: мій проект Languages: Java, Scala,… DI: Spring, Guava, Cake-pattern,…. REST: Spray, (Play),… DB: JDBC, Hibernate, Slick,… Build tools: Maven, SBT,… Peopleware: “Імперативщики” та “декларативщики” Сіньори та не-сіньори
  19. 19. Знайомимося: мій проект Languages: Java, Scala,… DI: Spring, Guava, Cake-pattern,…. REST: Spray, (Play),… DB: JDBC, Hibernate, Slick,… Build tools: Maven, SBT,… Peopleware: “Імперативщики” та “декларативщики” Сіньори та не-сіньори “Адеквати” та “неадеквати” з т. з. codebase
  20. 20. 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)
  21. 21. Scala: яка вона
  22. 22. Scala: яка вона Programming model:
  23. 23. Scala: яка вона Programming model: функціональна
  24. 24. Scala: яка вона Programming model: функціональна об'єктно-орієнтована
  25. 25. А що нам пропонує ФП?
  26. 26. А що нам пропонує ФП? абстракції більш високого рівня краща модулярність коротше код менш error-prone вища продуктивність розробки
  27. 27. А що нам пропонує ФП? абстракції більш високого рівня краща модулярність коротше код менш error-prone вища продуктивність розробки Але ж ФП вже 50 років…
  28. 28. А що нам пропонує ФП? абстракції більш високого рівня краща модулярність коротше код менш error-prone вища продуктивність розробки Але ж ФП вже 50 років… ООП пропонувало те ж саме 30 років тому!
  29. 29. З'явився привід! зріст потреб до hardware
  30. 30. З'явився привід! зріст потреб до hardware продуктивність ЦП не збільшується –  збільшується кількість ядер ЦП
  31. 31. З'явився привід! зріст потреб до hardware продуктивність ЦП не збільшується –  збільшується кількість ядер ЦП в існуючих програмних моделях локи не скейляться
  32. 32. GENE AMDAHL, 1967 З'явився привід: закон Амдала
  33. 33. З'явився привід! зріст потреб до hardware продуктивність ЦП не збільшується –  збільшується кількість ядер ЦП в існуючих програмних моделях локи не скейляться потрібні абстракції більш високого рівня, де parallel ≈ distributed
  34. 34. З'явився привід! зріст потреб до hardware продуктивність ЦП не збільшується –  збільшується кількість ядер ЦП в існуючих програмних моделях локи не скейляться потрібні абстракції більш високого рівня, де parallel ≈ distributed відокремлення поведінки від стану!
  35. 35. Scala: яка вона Programming model: функціональна об'єктно-орієнтована
  36. 36. Scala: яка вона
  37. 37. Scala: яка вона Типізація: статична
  38. 38. Scala: яка вона Типізація: статична динамічна
  39. 39. Scala: яка вона Типізація: статична динамічна duck-typing
  40. 40. Scala: яка вона
  41. 41. Scala: яка вона Складність:
  42. 42. Scala: яка вона Складність: проста
  43. 43. Scala: яка вона Складність: проста складна
  44. 44. Scala: яка вона Складність: проста складна НЕБЕЗПЕЧНА
  45. 45. Scala Перш ніж почати програмувати на Java, треба прочитати книжку “Effective Programming in Java”. Чому ж просто не створити ефективну Java? І насправді вона вже створена – це Scala! (Dr. Venkat Subramaniam)
  46. 46. GOTO сучасності: return
  47. 47. GOTO сучасності: return With no warnings…
  48. 48. GOTO сучасності: return With no warnings…
  49. 49. GOTO сучасності: return
  50. 50. GOTO сучасності: return
  51. 51. GOTO сучасності: return
  52. 52. GOTO сучасності: return
  53. 53. GOTO сучасності: return Play:
  54. 54. Арність-0: дужки def foo = … val f = foo def foo() = … val f = foo def foo = … val f = foo() def foo() = … val f = foo()
  55. 55. Арність-0: дужки def foo = … val f = foo def foo() = … val f = foo def foo = … val f = foo() def foo() = … val f = foo()Won’t compile
  56. 56. Арність-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
  57. 57. Арність-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 ?
  58. 58. Арність-0: дужки #1
  59. 59. Арність-0: дужки #1
  60. 60. Арність-0: дужки #1 OK!
  61. 61. Арність-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
  62. 62. Арність-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
  63. 63. Арність-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
  64. 64. Арність-0: дужки #2
  65. 65. Арність-0: дужки #2 крута штука type inference!
  66. 66. Арність-0: дужки #2
  67. 67. Арність-0: дужки #2
  68. 68. Арність-0: дужки #2 Прокляття методу apply(…) і значення () типу Unit Як скомпілювалось:
  69. 69. Арність-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
  70. 70. Арність-0: без крапки
  71. 71. Арність-0: без крапки Результат: java.lang.IndexOutOfBoundsException … в 80% випадків
  72. 72. Арність-0: без крапки Результат: java.lang.IndexOutOfBoundsException … в 80% випадків
  73. 73. Арність-0: без крапки Як скомпілювалось:
  74. 74. Арність-0: без крапки Точніше:
  75. 75. Арність-0: без крапки Навіщо ж тоді? = постфіксна нотація
  76. 76. Постфіксна нотація: DSL
  77. 77. Постфіксна нотація: DSL інакше ворнінг
  78. 78. map
  79. 79. map
  80. 80. map
  81. 81. map
  82. 82. Ще одне прокляття: _
  83. 83. Ще одне прокляття: _
  84. 84. Ще одне прокляття: _ Скільки разів виведе Foo?
  85. 85. Ще одне прокляття: _ Скільки разів виведе Foo? Аж один!
  86. 86. Ще одне прокляття: _ OK!
  87. 87. Lazy + mutable
  88. 88. Lazy + mutable
  89. 89. Companion object
  90. 90. Companion object
  91. 91. Companion object
  92. 92. Companion object in Java
  93. 93. Свобода – це відповідальність
  94. 94. Необхідно знати і усвідомлювати усі граничні випадки, щоб не відстрелити собі ногу
  95. 95. Як?
  96. 96. Багато всього запам'ятовувати та періодично переосмислювати Як?
  97. 97. Кати Ката – вправа, яка допомагає ${whomever} відточувати свою майстерність шляхом практики та повторень. (Wikipedia)
  98. 98. Кати Ката – вправа з програмування, яка допомагає програмістам відточувати майстерність шляхом практики та повторень.
  99. 99. Метод Spaced Repetitions
  100. 100. Метод Spaced Repetitions
  101. 101. Метод Spaced Repetitions
  102. 102. Метод Spaced Repetitions
  103. 103. Метод Spaced Repetitions: що запам'ятовую я
  104. 104. Метод Spaced Repetitions: що запам'ятовую я Вправи з книжок і лекцій
  105. 105. Метод Spaced Repetitions: що запам'ятовую я Вправи з книжок і лекцій Будь-які проблеми, на вирішення яких я втратив більше години і які можно зрозуміло сформулювати
  106. 106. Метод Spaced Repetitions: що запам'ятовую я Вправи з книжок і лекцій Будь-які проблеми, на вирішення яких я втратив більше години і які можно зрозуміло сформулювати Wow-знахідки
  107. 107. Метод Spaced Repetitions: що запам'ятовую я Вправи з книжок і лекцій Будь-які проблеми, на вирішення яких я втратив більше години і які можно зрозуміло сформулювати Wow-знахідки Що завгодно!
  108. 108. M A N N I N G IN ACTION Nilanjan Raychaudhuri FOREWORD BY Chad Fowler Covers Scala 2.10
  109. 109. M A N N I N G IN ACTION Nilanjan Raychaudhuri FOREWORD BY Chad Fowler Covers Scala 2.10
  110. 110. Дякую! Питання?

×