scala: an experience report
DESCRIPTION
An experience report after using scala for 6 months.TRANSCRIPT
![Page 1: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/1.jpg)
Scala Experience Report
Mark Needham and Liz Douglass
![Page 2: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/2.jpg)
Funny image?
![Page 3: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/3.jpg)
Funny image?
GAME
ON!
![Page 4: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/4.jpg)
Should the project have been done in
Java?
Does it really speed up the development as was hoped?
What features of the language and patterns of usage have been successes?
Is it easier to maintain and extend than an equivalent Java code base?
![Page 5: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/5.jpg)
Testing
Templating
Domain
![Page 6: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/6.jpg)
![Page 7: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/7.jpg)
Testing
![Page 8: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/8.jpg)
scalatest
specs2
JUnit
scalacheck
![Page 9: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/9.jpg)
Unit testing
![Page 10: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/10.jpg)
Functional Testing
![Page 11: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/11.jpg)
Test DSL
![Page 12: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/12.jpg)
First class functions
![Page 13: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/13.jpg)
Test DSL
![Page 14: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/14.jpg)
# of unit tests:449
# of functional tests:353
# of integration tests:280
![Page 15: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/15.jpg)
Unit testing
![Page 16: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/16.jpg)
Unit testing
![Page 17: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/17.jpg)
BookTests
ArticleTests
ChapterTests
Unit testing
![Page 18: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/18.jpg)
Templating
![Page 19: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/19.jpg)
Scalatra
![Page 20: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/20.jpg)
Scalatra Scalate
![Page 21: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/21.jpg)
Scalatra Scalate
Mustache
scaml
jade
SSP
![Page 22: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/22.jpg)
Controller
![Page 23: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/23.jpg)
Mustache
![Page 24: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/24.jpg)
Jade
![Page 25: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/25.jpg)
View Helper
![Page 26: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/26.jpg)
Jade
![Page 27: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/27.jpg)
Domain
![Page 28: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/28.jpg)
Presentation Model
![Page 29: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/29.jpg)
XML
![Page 30: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/30.jpg)
More XML
![Page 31: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/31.jpg)
More XML
![Page 32: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/32.jpg)
And not just XML…
![Page 33: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/33.jpg)
Going too far!
![Page 34: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/34.jpg)
Traits
Which example was this supposed to be?ContentRepository - JUNE
![Page 35: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/35.jpg)
1. Utilities
Traits
http://blog.schauderhaft.de/2011/08/21/usage-patterns-of-scala-traits/
![Page 36: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/36.jpg)
2. Presentation Model
Traits
![Page 37: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/37.jpg)
3. Helpers to Helpers
Traits
![Page 38: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/38.jpg)
4. Wanna be objects
Traits
![Page 39: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/39.jpg)
5. Type container
Traits
![Page 40: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/40.jpg)
6. Traits with standards
Traits
![Page 41: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/41.jpg)
Implicits
![Page 42: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/42.jpg)
Implicits
![Page 43: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/43.jpg)
Implicits
![Page 44: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/44.jpg)
Options
![Page 45: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/45.jpg)
Refactoring
IDE support
Code discoverability
Method visibility
Less code to
change
Tendency to have fewer
tests
![Page 46: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/46.jpg)
In Retrospect …
![Page 47: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/47.jpg)
Should the project have been done in
Java?
Does it really speed up the development as was hoped?
What features of the language and patterns of usage have been successes?
Is it easier to maintain and extend than an equivalent Java code base?
![Page 48: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/48.jpg)
![Page 49: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/49.jpg)
Greater potential to
high talented
developers
Increased
developer
productivity
Built in XML support
Seamless
integration with
Java + eco-
system
Comes with SBT
– powerful built
tool
Gentle learning curve for Java developers
Runs on the
JVM
Bigger potential to screw things up
Tool support
less matureCommunity is younger and smaller
Scala compiler slower than
Java’s
![Page 50: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/50.jpg)
Easy to learn
Functional
language
Concise code
SBT power
XML support
Case classesJava integration
IDE support
Slow compiler
Complex code
SBT complexity
Immature frameworks
![Page 51: Scala: An experience report](https://reader038.vdocuments.net/reader038/viewer/2022103114/554ebd08b4c905064d8b466c/html5/thumbnails/51.jpg)
Questions