Scala Parallel Collections Aleksandar Prokopec, Tiark Rompf Scala Team EPFL.
Scala. Inception.
-
Upload
alexander-korotkikh -
Category
Technology
-
view
381 -
download
0
Transcript of Scala. Inception.
![Page 1: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/1.jpg)
SCALA.INCEPTION.
@alexkorotkikh
![Page 2: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/2.jpg)
WHY SCALA?
![Page 3: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/3.jpg)
•Not����������� ������������������ expressive
JAVA IS...
![Page 4: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/4.jpg)
•Not����������� ������������������ expressive•No����������� ������������������ lambdas
JAVA IS...
![Page 5: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/5.jpg)
•Not����������� ������������������ expressive•No����������� ������������������ lambdas•No����������� ������������������ mixins
JAVA IS...
![Page 6: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/6.jpg)
•Not����������� ������������������ expressive•No����������� ������������������ lambdas•No����������� ������������������ mixins•Nothing����������� ������������������ fun����������� ������������������ :(
JAVA IS...
![Page 7: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/7.jpg)
•Not����������� ������������������ expressive•No����������� ������������������ lambdas•No����������� ������������������ mixins•Nothing����������� ������������������ fun����������� ������������������ :(•Poor����������� ������������������ standard����������� ������������������ library
JAVA IS...
![Page 8: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/8.jpg)
•Not����������� ������������������ expressive•No����������� ������������������ lambdas•No����������� ������������������ mixins•Nothing����������� ������������������ fun����������� ������������������ :(•Poor����������� ������������������ standard����������� ������������������ library•That’s����������� ������������������ why����������� ������������������ we����������� ������������������ have����������� ������������������ Guava����������� ������������������ and����������� ������������������ Apache����������� ������������������ Commons
JAVA IS...
![Page 9: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/9.jpg)
•Still����������� ������������������ JVM����������� ������������������ based
BUT SCALA IS...
![Page 10: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/10.jpg)
•Still����������� ������������������ JVM����������� ������������������ based•World����������� ������������������ class����������� ������������������ performance
BUT SCALA IS...
![Page 11: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/11.jpg)
•Still����������� ������������������ JVM����������� ������������������ based•World����������� ������������������ class����������� ������������������ performance•Variety����������� ������������������ of����������� ������������������ libraries����������� ������������������ and����������� ������������������ components
BUT SCALA IS...
![Page 12: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/12.jpg)
•Still����������� ������������������ JVM����������� ������������������ based•World����������� ������������������ class����������� ������������������ performance•Variety����������� ������������������ of����������� ������������������ libraries����������� ������������������ and����������� ������������������ components•Expressive
BUT SCALA IS...
![Page 13: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/13.jpg)
•Still����������� ������������������ JVM����������� ������������������ based•World����������� ������������������ class����������� ������������������ performance•Variety����������� ������������������ of����������� ������������������ libraries����������� ������������������ and����������� ������������������ components•Expressive•All����������� ������������������ cool����������� ������������������ things����������� ������������������ you’ve����������� ������������������ heard����������� ������������������ about
BUT SCALA IS...
![Page 14: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/14.jpg)
•Still����������� ������������������ JVM����������� ������������������ based•World����������� ������������������ class����������� ������������������ performance•Variety����������� ������������������ of����������� ������������������ libraries����������� ������������������ and����������� ������������������ components•Expressive•All����������� ������������������ cool����������� ������������������ things����������� ������������������ you’ve����������� ������������������ heard����������� ������������������ about•Compact����������� ������������������ while����������� ������������������ still����������� ������������������ readable����������� ������������������ code
BUT SCALA IS...
![Page 15: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/15.jpg)
FIRST STEPSFIRST STEPS
![Page 16: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/16.jpg)
ONCE UPON A TIME...
![Page 17: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/17.jpg)
ONCE UPON A TIME...We����������� ������������������ had����������� ������������������ a����������� ������������������ module
![Page 18: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/18.jpg)
ONCE UPON A TIME...We����������� ������������������ had����������� ������������������ a����������� ������������������ modulefull����������� ������������������ of����������� ������������������ magic
![Page 19: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/19.jpg)
ONCE UPON A TIME...We����������� ������������������ had����������� ������������������ a����������� ������������������ modulefull����������� ������������������ of����������� ������������������ magic
They����������� ������������������ called����������� ������������������ it����������� ������������������ business����������� ������������������ logic
![Page 20: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/20.jpg)
DROOLS DECISION TABLE
Do����������� ������������������ not����������� ������������������ ever����������� ������������������ try����������� ������������������ to����������� ������������������ repeat����������� ������������������ it����������� ������������������ at����������� ������������������ home
![Page 21: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/21.jpg)
DROOLS DECISION TABLE
Do����������� ������������������ not����������� ������������������ ever����������� ������������������ try����������� ������������������ to����������� ������������������ repeat����������� ������������������ it����������� ������������������ at����������� ������������������ home
We����������� ������������������ had����������� ������������������ to����������� ������������������ rewrite����������� ������������������ it����������� ������������������
![Page 22: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/22.jpg)
DROOLS DECISION TABLE
Do����������� ������������������ not����������� ������������������ ever����������� ������������������ try����������� ������������������ to����������� ������������������ repeat����������� ������������������ it����������� ������������������ at����������� ������������������ home
We����������� ������������������ had����������� ������������������ to����������� ������������������ rewrite����������� ������������������ it����������� ������������������ for����������� ������������������ the����������� ������������������ sake����������� ������������������ of����������� ������������������ readability����������� ������������������
and����������� ������������������ testability
![Page 23: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/23.jpg)
DROOLS DECISION TABLE
Do����������� ������������������ not����������� ������������������ ever����������� ������������������ try����������� ������������������ to����������� ������������������ repeat����������� ������������������ it����������� ������������������ at����������� ������������������ home
We����������� ������������������ had����������� ������������������ to����������� ������������������ rewrite����������� ������������������ it����������� ������������������ for����������� ������������������ the����������� ������������������ sake����������� ������������������ of����������� ������������������ readability����������� ������������������
and����������� ������������������ testability
So����������� ������������������ we’ve����������� ������������������ decided����������� ������������������ to����������� ������������������ give����������� ������������������ Scala����������� ������������������ a����������� ������������������ chance
![Page 24: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/24.jpg)
FIRST FUN
![Page 25: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/25.jpg)
trait Logging { val log: Logger = LoggerFactory getLogger getClass}
![Page 26: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/26.jpg)
class ImportantLogic { self: { val log: Logger } => def doSomething() { log warn "Something important" }}
trait Logging { val log: Logger = LoggerFactory getLogger getClass}
![Page 27: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/27.jpg)
class ImportantLogic { self: { val log: Logger } => def doSomething() { log warn "Something important" }}
trait Logging { val log: Logger = LoggerFactory getLogger getClass}
val logic = new ImportantLogic with Logginglogic.doSomething()
![Page 28: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/28.jpg)
class ImportantLogic { self: { val log: Logger } => def doSomething() { log warn "Something important" }}
trait Logging { val log: Logger = LoggerFactory getLogger getClass}
val logic = new ImportantLogic with Logginglogic.doSomething()
val logic2 = new ImportantLogic // compile errorlogic2.doSomething()
![Page 29: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/29.jpg)
(1 to 20) // [1, 20]
![Page 30: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/30.jpg)
(1 to 20) // [1, 20] .map(d => d * d) // 1, 4, 9, ..., 400
![Page 31: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/31.jpg)
(1 to 20) // [1, 20] .map(d => d * d) // 1, 4, 9, ..., 400 .filter(_ % 3 == 0) // 9, 36, 81, ...
![Page 32: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/32.jpg)
(1 to 20) // [1, 20] .map(d => d * d) // 1, 4, 9, ..., 400 .filter(_ % 3 == 0) // 9, 36, 81, ... .foldLeft(0)(_ + _) // 819
![Page 33: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/33.jpg)
val x: Int = ...
![Page 34: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/34.jpg)
val x: Int = ...
(1 to 20) // [1, 20]
![Page 35: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/35.jpg)
val x: Int = ...
(1 to 20) // [1, 20] .find(_ == x) // Option[Int]
![Page 36: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/36.jpg)
val x: Int = ...
(1 to 20) // [1, 20] .find(_ == x) // Option[Int] .map(_ / 2) // Option[Int], still
![Page 37: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/37.jpg)
val x: Int = ...
(1 to 20) // [1, 20] .find(_ == x) // Option[Int] .map(_ / 2) // Option[Int], still .getOrElse(0) // x / 2 if 1 >= x >= 20
![Page 38: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/38.jpg)
val x: Int = ...
(1 to 20) // [1, 20] .find(_ == x) // Option[Int] .map(_ / 2) // Option[Int], still .getOrElse(0) // x / 2 if 1 >= x >= 20 // 0 otherwise
![Page 39: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/39.jpg)
def patternMatching(x: Any) = x match {
}
![Page 40: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/40.jpg)
def patternMatching(x: Any) = x match {
}
case 1 | 2 | 3 => “one or two or three”
![Page 41: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/41.jpg)
def patternMatching(x: Any) = x match {
}
case 1 | 2 | 3 => “one or two or three” case d: Double => “double is here”
![Page 42: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/42.jpg)
def patternMatching(x: Any) = x match {
}
case 1 | 2 | 3 => “one or two or three” case d: Double => “double is here” case s: String if s.size < 5 => “short str”
![Page 43: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/43.jpg)
def patternMatching(x: Any) = x match {
}
case 1 | 2 | 3 => “one or two or three” case d: Double => “double is here” case s: String if s.size < 5 => “short str” case _ => “anything else”
![Page 44: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/44.jpg)
•Implicit����������� ������������������ conversions
AND MUCH MORE
![Page 45: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/45.jpg)
•Implicit����������� ������������������ conversions
•Parallel����������� ������������������ collections
AND MUCH MORE
![Page 46: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/46.jpg)
•Implicit����������� ������������������ conversions
•Parallel����������� ������������������ collections
•XML����������� ������������������ as����������� ������������������ built-in����������� ������������������ data����������� ������������������ type
AND MUCH MORE
![Page 47: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/47.jpg)
•Implicit����������� ������������������ conversions
•Parallel����������� ������������������ collections
•XML����������� ������������������ as����������� ������������������ built-in����������� ������������������ data����������� ������������������ type
•Singleton����������� ������������������ as����������� ������������������ build-in����������� ������������������ data����������� ������������������ type
AND MUCH MORE
![Page 48: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/48.jpg)
•Implicit����������� ������������������ conversions
•Parallel����������� ������������������ collections
•XML����������� ������������������ as����������� ������������������ built-in����������� ������������������ data����������� ������������������ type
•Singleton����������� ������������������ as����������� ������������������ build-in����������� ������������������ data����������� ������������������ type
•Macros����������� ������������������ (from����������� ������������������ 2.10.x)
AND MUCH MORE
![Page 49: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/49.jpg)
FIRST FAILS
![Page 50: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/50.jpg)
SO EASY...
![Page 51: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/51.jpg)
Functional code is hard to read at first.
![Page 52: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/52.jpg)
def sort(list: List[Int]): List[Int] = list match { case Nil => Nil case head :: tail => sort(tail.filter(_ < head)) ::: head :: sort(tail.filter(_ >= head)) }
Functional code is hard to read at first.
![Page 53: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/53.jpg)
def sort(list: List[Int]): List[Int] = list match { case Nil => Nil case head :: tail => sort(tail.filter(_ < head)) ::: head :: sort(tail.filter(_ >= head)) }
Functional code is hard to read at first.
![Page 54: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/54.jpg)
No backward compatibilities.
![Page 55: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/55.jpg)
No backward compatibilities.
Libraries compiled with 2.9.x compiler may not work with 2.10.x. And vice versa.
![Page 56: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/56.jpg)
No backward compatibilities.
Libraries compiled with 2.9.x compiler may not work with 2.10.x. And vice versa.
![Page 57: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/57.jpg)
SUMMARY
![Page 58: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/58.jpg)
•All����������� ������������������ new����������� ������������������ features����������� ������������������ are����������� ������������������ written����������� ������������������ in����������� ������������������ Scala
WE
![Page 59: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/59.jpg)
•All����������� ������������������ new����������� ������������������ features����������� ������������������ are����������� ������������������ written����������� ������������������ in����������� ������������������ Scala
•More����������� ������������������ then����������� ������������������ 30%����������� ������������������ of����������� ������������������ production����������� ������������������ code
WE
![Page 60: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/60.jpg)
•All����������� ������������������ new����������� ������������������ features����������� ������������������ are����������� ������������������ written����������� ������������������ in����������� ������������������ Scala
•More����������� ������������������ then����������� ������������������ 30%����������� ������������������ of����������� ������������������ production����������� ������������������ code
•We����������� ������������������ became����������� ������������������ more����������� ������������������ productive
WE
![Page 61: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/61.jpg)
•All����������� ������������������ new����������� ������������������ features����������� ������������������ are����������� ������������������ written����������� ������������������ in����������� ������������������ Scala
•More����������� ������������������ then����������� ������������������ 30%����������� ������������������ of����������� ������������������ production����������� ������������������ code
•We����������� ������������������ became����������� ������������������ more����������� ������������������ productive
•And����������� ������������������ we����������� ������������������ enjoy����������� ������������������ it����������� ������������������ =)
WE
![Page 62: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/62.jpg)
SCALA•Compact,����������� ������������������ expressive����������� ������������������ and����������� ������������������ readable����������� ������������������ code
![Page 63: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/63.jpg)
SCALA•Compact,����������� ������������������ expressive����������� ������������������ and����������� ������������������ readable����������� ������������������ code
•...ok,����������� ������������������ readable����������� ������������������ after����������� ������������������ some����������� ������������������ time
![Page 64: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/64.jpg)
SCALA•Compact,����������� ������������������ expressive����������� ������������������ and����������� ������������������ readable����������� ������������������ code
•...ok,����������� ������������������ readable����������� ������������������ after����������� ������������������ some����������� ������������������ time
•All����������� ������������������ the����������� ������������������ power����������� ������������������ of����������� ������������������ JVM����������� ������������������ and����������� ������������������ Java����������� ������������������ libs
![Page 65: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/65.jpg)
SCALA•Compact,����������� ������������������ expressive����������� ������������������ and����������� ������������������ readable����������� ������������������ code
•...ok,����������� ������������������ readable����������� ������������������ after����������� ������������������ some����������� ������������������ time
•All����������� ������������������ the����������� ������������������ power����������� ������������������ of����������� ������������������ JVM����������� ������������������ and����������� ������������������ Java����������� ������������������ libs
•...altogether����������� ������������������ with����������� ������������������ functional����������� ������������������ approach����������� ������������������
![Page 66: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/66.jpg)
•Check����������� ������������������ out����������� ������������������ some����������� ������������������ quick����������� ������������������ tutorial����������� ������������������ (e.g.����������� ������������������ Twitter����������� ������������������ Scala����������� ������������������ School)
YOU
![Page 67: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/67.jpg)
•Check����������� ������������������ out����������� ������������������ some����������� ������������������ quick����������� ������������������ tutorial����������� ������������������ (e.g.����������� ������������������ Twitter����������� ������������������ Scala����������� ������������������ School)
•Separate����������� ������������������ a����������� ������������������ feature����������� ������������������ (you����������� ������������������ don’t����������� ������������������ need����������� ������������������ to����������� ������������������ rewrite����������� ������������������ whole����������� ������������������ project����������� ������������������ at����������� ������������������ once!)
YOU
![Page 68: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/68.jpg)
•Check����������� ������������������ out����������� ������������������ some����������� ������������������ quick����������� ������������������ tutorial����������� ������������������ (e.g.����������� ������������������ Twitter����������� ������������������ Scala����������� ������������������ School)
•Separate����������� ������������������ a����������� ������������������ feature����������� ������������������ (you����������� ������������������ don’t����������� ������������������ need����������� ������������������ to����������� ������������������ rewrite����������� ������������������ whole����������� ������������������ project����������� ������������������ at����������� ������������������ once!)
•Start����������� ������������������ with����������� ������������������ tests����������� ������������������ (if����������� ������������������ usually����������� ������������������ you����������� ������������������ don’t)
YOU
![Page 69: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/69.jpg)
•Check����������� ������������������ out����������� ������������������ some����������� ������������������ quick����������� ������������������ tutorial����������� ������������������ (e.g.����������� ������������������ Twitter����������� ������������������ Scala����������� ������������������ School)
•Separate����������� ������������������ a����������� ������������������ feature����������� ������������������ (you����������� ������������������ don’t����������� ������������������ need����������� ������������������ to����������� ������������������ rewrite����������� ������������������ whole����������� ������������������ project����������� ������������������ at����������� ������������������ once!)
•Start����������� ������������������ with����������� ������������������ tests����������� ������������������ (if����������� ������������������ usually����������� ������������������ you����������� ������������������ don’t)
•Enjoy����������� ������������������ it
YOU
![Page 70: Scala. Inception.](https://reader034.fdocuments.us/reader034/viewer/2022052208/5559e936d8b42a39498b50f3/html5/thumbnails/70.jpg)
THANK YOU!
@alexkorotkikh