SlideShare une entreprise Scribd logo
1  sur  111
Télécharger pour lire hors ligne
на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” @ 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 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
Дякую!
Питання?

Contenu connexe

Plus de GlobalLogic Ukraine

GlobalLogic .NET Community Webinar #3 "Exploring Serverless with Azure Functi...
GlobalLogic .NET Community Webinar #3 "Exploring Serverless with Azure Functi...GlobalLogic .NET Community Webinar #3 "Exploring Serverless with Azure Functi...
GlobalLogic .NET Community Webinar #3 "Exploring Serverless with Azure Functi...GlobalLogic Ukraine
 
Страх і сила помилок - IT Inside від GlobalLogic Education
Страх і сила помилок - IT Inside від GlobalLogic EducationСтрах і сила помилок - IT Inside від GlobalLogic Education
Страх і сила помилок - IT Inside від GlobalLogic EducationGlobalLogic Ukraine
 
GlobalLogic .NET Webinar #2 “Azure RBAC and Managed Identity”
GlobalLogic .NET Webinar #2 “Azure RBAC and Managed Identity”GlobalLogic .NET Webinar #2 “Azure RBAC and Managed Identity”
GlobalLogic .NET Webinar #2 “Azure RBAC and Managed Identity”GlobalLogic Ukraine
 
GlobalLogic QA Webinar “What does it take to become a Test Engineer”
GlobalLogic QA Webinar “What does it take to become a Test Engineer”GlobalLogic QA Webinar “What does it take to become a Test Engineer”
GlobalLogic QA Webinar “What does it take to become a Test Engineer”GlobalLogic Ukraine
 
“How to Secure Your Applications With a Keycloak?
“How to Secure Your Applications With a Keycloak?“How to Secure Your Applications With a Keycloak?
“How to Secure Your Applications With a Keycloak?GlobalLogic Ukraine
 
GlobalLogic Machine Learning Webinar “Advanced Statistical Methods for Linear...
GlobalLogic Machine Learning Webinar “Advanced Statistical Methods for Linear...GlobalLogic Machine Learning Webinar “Advanced Statistical Methods for Linear...
GlobalLogic Machine Learning Webinar “Advanced Statistical Methods for Linear...GlobalLogic Ukraine
 
GlobalLogic Machine Learning Webinar “Statistical learning of linear regressi...
GlobalLogic Machine Learning Webinar “Statistical learning of linear regressi...GlobalLogic Machine Learning Webinar “Statistical learning of linear regressi...
GlobalLogic Machine Learning Webinar “Statistical learning of linear regressi...GlobalLogic Ukraine
 
GlobalLogic C++ Webinar “The Minimum Knowledge to Become a C++ Developer”
GlobalLogic C++ Webinar “The Minimum Knowledge to Become a C++ Developer”GlobalLogic C++ Webinar “The Minimum Knowledge to Become a C++ Developer”
GlobalLogic C++ Webinar “The Minimum Knowledge to Become a C++ Developer”GlobalLogic Ukraine
 
Embedded Webinar #17 "Low-level Network Testing in Embedded Devices Development"
Embedded Webinar #17 "Low-level Network Testing in Embedded Devices Development"Embedded Webinar #17 "Low-level Network Testing in Embedded Devices Development"
Embedded Webinar #17 "Low-level Network Testing in Embedded Devices Development"GlobalLogic Ukraine
 
GlobalLogic Webinar "Introduction to Embedded QA"
GlobalLogic Webinar "Introduction to Embedded QA"GlobalLogic Webinar "Introduction to Embedded QA"
GlobalLogic Webinar "Introduction to Embedded QA"GlobalLogic Ukraine
 
C++ Webinar "Why Should You Learn C++ in 2021-22?"
C++ Webinar "Why Should You Learn C++ in 2021-22?"C++ Webinar "Why Should You Learn C++ in 2021-22?"
C++ Webinar "Why Should You Learn C++ in 2021-22?"GlobalLogic Ukraine
 
GlobalLogic Test Automation Live Testing Session “Android Behind UI — Testing...
GlobalLogic Test Automation Live Testing Session “Android Behind UI — Testing...GlobalLogic Test Automation Live Testing Session “Android Behind UI — Testing...
GlobalLogic Test Automation Live Testing Session “Android Behind UI — Testing...GlobalLogic Ukraine
 
GlobalLogic Test Automation Online TechTalk “Test Driven Development as a Per...
GlobalLogic Test Automation Online TechTalk “Test Driven Development as a Per...GlobalLogic Test Automation Online TechTalk “Test Driven Development as a Per...
GlobalLogic Test Automation Online TechTalk “Test Driven Development as a Per...GlobalLogic Ukraine
 
GlobalLogic Azure TechTalk ONLINE “Marketing Data Lake in Azure”
GlobalLogic Azure TechTalk ONLINE “Marketing Data Lake in Azure”GlobalLogic Azure TechTalk ONLINE “Marketing Data Lake in Azure”
GlobalLogic Azure TechTalk ONLINE “Marketing Data Lake in Azure”GlobalLogic Ukraine
 
GlobalLogic Test Automation Online TechTalk “Playwright — A New Hope”
GlobalLogic Test Automation Online TechTalk “Playwright — A New Hope”GlobalLogic Test Automation Online TechTalk “Playwright — A New Hope”
GlobalLogic Test Automation Online TechTalk “Playwright — A New Hope”GlobalLogic Ukraine
 
Java Webinar #13 “Where Is My Development Zone?”
Java Webinar #13 “Where Is My Development Zone?”Java Webinar #13 “Where Is My Development Zone?”
Java Webinar #13 “Where Is My Development Zone?”GlobalLogic Ukraine
 
NET Webinar #1 "Is There a Life Outside the Entity Framework"
NET Webinar #1 "Is There a Life Outside the Entity Framework"NET Webinar #1 "Is There a Life Outside the Entity Framework"
NET Webinar #1 "Is There a Life Outside the Entity Framework"GlobalLogic Ukraine
 
GlobalLogic С/C++/Embedded Live Coding Challenge. Basic graph algorithms
GlobalLogic С/C++/Embedded Live Coding Challenge. Basic graph algorithmsGlobalLogic С/C++/Embedded Live Coding Challenge. Basic graph algorithms
GlobalLogic С/C++/Embedded Live Coding Challenge. Basic graph algorithmsGlobalLogic Ukraine
 
Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”GlobalLogic Ukraine
 
Online TechTalk  "Patterns in Embedded SW Design"
Online TechTalk  "Patterns in Embedded SW Design"Online TechTalk  "Patterns in Embedded SW Design"
Online TechTalk  "Patterns in Embedded SW Design"GlobalLogic Ukraine
 

Plus de GlobalLogic Ukraine (20)

GlobalLogic .NET Community Webinar #3 "Exploring Serverless with Azure Functi...
GlobalLogic .NET Community Webinar #3 "Exploring Serverless with Azure Functi...GlobalLogic .NET Community Webinar #3 "Exploring Serverless with Azure Functi...
GlobalLogic .NET Community Webinar #3 "Exploring Serverless with Azure Functi...
 
Страх і сила помилок - IT Inside від GlobalLogic Education
Страх і сила помилок - IT Inside від GlobalLogic EducationСтрах і сила помилок - IT Inside від GlobalLogic Education
Страх і сила помилок - IT Inside від GlobalLogic Education
 
GlobalLogic .NET Webinar #2 “Azure RBAC and Managed Identity”
GlobalLogic .NET Webinar #2 “Azure RBAC and Managed Identity”GlobalLogic .NET Webinar #2 “Azure RBAC and Managed Identity”
GlobalLogic .NET Webinar #2 “Azure RBAC and Managed Identity”
 
GlobalLogic QA Webinar “What does it take to become a Test Engineer”
GlobalLogic QA Webinar “What does it take to become a Test Engineer”GlobalLogic QA Webinar “What does it take to become a Test Engineer”
GlobalLogic QA Webinar “What does it take to become a Test Engineer”
 
“How to Secure Your Applications With a Keycloak?
“How to Secure Your Applications With a Keycloak?“How to Secure Your Applications With a Keycloak?
“How to Secure Your Applications With a Keycloak?
 
GlobalLogic Machine Learning Webinar “Advanced Statistical Methods for Linear...
GlobalLogic Machine Learning Webinar “Advanced Statistical Methods for Linear...GlobalLogic Machine Learning Webinar “Advanced Statistical Methods for Linear...
GlobalLogic Machine Learning Webinar “Advanced Statistical Methods for Linear...
 
GlobalLogic Machine Learning Webinar “Statistical learning of linear regressi...
GlobalLogic Machine Learning Webinar “Statistical learning of linear regressi...GlobalLogic Machine Learning Webinar “Statistical learning of linear regressi...
GlobalLogic Machine Learning Webinar “Statistical learning of linear regressi...
 
GlobalLogic C++ Webinar “The Minimum Knowledge to Become a C++ Developer”
GlobalLogic C++ Webinar “The Minimum Knowledge to Become a C++ Developer”GlobalLogic C++ Webinar “The Minimum Knowledge to Become a C++ Developer”
GlobalLogic C++ Webinar “The Minimum Knowledge to Become a C++ Developer”
 
Embedded Webinar #17 "Low-level Network Testing in Embedded Devices Development"
Embedded Webinar #17 "Low-level Network Testing in Embedded Devices Development"Embedded Webinar #17 "Low-level Network Testing in Embedded Devices Development"
Embedded Webinar #17 "Low-level Network Testing in Embedded Devices Development"
 
GlobalLogic Webinar "Introduction to Embedded QA"
GlobalLogic Webinar "Introduction to Embedded QA"GlobalLogic Webinar "Introduction to Embedded QA"
GlobalLogic Webinar "Introduction to Embedded QA"
 
C++ Webinar "Why Should You Learn C++ in 2021-22?"
C++ Webinar "Why Should You Learn C++ in 2021-22?"C++ Webinar "Why Should You Learn C++ in 2021-22?"
C++ Webinar "Why Should You Learn C++ in 2021-22?"
 
GlobalLogic Test Automation Live Testing Session “Android Behind UI — Testing...
GlobalLogic Test Automation Live Testing Session “Android Behind UI — Testing...GlobalLogic Test Automation Live Testing Session “Android Behind UI — Testing...
GlobalLogic Test Automation Live Testing Session “Android Behind UI — Testing...
 
GlobalLogic Test Automation Online TechTalk “Test Driven Development as a Per...
GlobalLogic Test Automation Online TechTalk “Test Driven Development as a Per...GlobalLogic Test Automation Online TechTalk “Test Driven Development as a Per...
GlobalLogic Test Automation Online TechTalk “Test Driven Development as a Per...
 
GlobalLogic Azure TechTalk ONLINE “Marketing Data Lake in Azure”
GlobalLogic Azure TechTalk ONLINE “Marketing Data Lake in Azure”GlobalLogic Azure TechTalk ONLINE “Marketing Data Lake in Azure”
GlobalLogic Azure TechTalk ONLINE “Marketing Data Lake in Azure”
 
GlobalLogic Test Automation Online TechTalk “Playwright — A New Hope”
GlobalLogic Test Automation Online TechTalk “Playwright — A New Hope”GlobalLogic Test Automation Online TechTalk “Playwright — A New Hope”
GlobalLogic Test Automation Online TechTalk “Playwright — A New Hope”
 
Java Webinar #13 “Where Is My Development Zone?”
Java Webinar #13 “Where Is My Development Zone?”Java Webinar #13 “Where Is My Development Zone?”
Java Webinar #13 “Where Is My Development Zone?”
 
NET Webinar #1 "Is There a Life Outside the Entity Framework"
NET Webinar #1 "Is There a Life Outside the Entity Framework"NET Webinar #1 "Is There a Life Outside the Entity Framework"
NET Webinar #1 "Is There a Life Outside the Entity Framework"
 
GlobalLogic С/C++/Embedded Live Coding Challenge. Basic graph algorithms
GlobalLogic С/C++/Embedded Live Coding Challenge. Basic graph algorithmsGlobalLogic С/C++/Embedded Live Coding Challenge. Basic graph algorithms
GlobalLogic С/C++/Embedded Live Coding Challenge. Basic graph algorithms
 
Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”Online TechTalk “Flutter Mobile Development”
Online TechTalk “Flutter Mobile Development”
 
Online TechTalk  "Patterns in Embedded SW Design"
Online TechTalk  "Patterns in Embedded SW Design"Online TechTalk  "Patterns in Embedded SW Design"
Online TechTalk  "Patterns in Embedded SW Design"
 

Scala Rock Painting (Ukrainian version)