SlideShare a Scribd company logo
1 of 34
SCALA FOR PHP DEVELOPERS
JOSEPH PRICE
● ‘scalable language’
o scales from small to large problems
● object-functional
● runs on JVM
● performant
● concise
o type inference
o reduced repetition
Scala
Object Orientation
● Everything’s an object
o 1.toDouble
● Supports typical OO functionality - classes, methods, interfaces,
inheritance, polymorphism, encapsulation, access modifiers
● Traits
o interface with implementation
o allows multiple inheritance
o avoids ‘diamond problem’ through a technique called
linearization
Functional programming
● ‘first-class’ functions
o anonymous
o function values
o passed to and returned
from functions
o higher order functions
 map, filter, flatMap
● immutable data structures
● isolation of state, side effects
Immutability
● most methods return a new object
o immutable data structures
● val / var
● input params cannot change
● iteration - contrast to imperative style
o prefer map / fold over stateful looping
Type safety
● more confident in changes
o library / api updates
o refactoring
● static analysis
● find errors more quickly
● avoid common errors
● compiler can optimize typed code
Type inference
Typing required for
● Method signatures
● Class members
● Recursive methods
Optional elsewhere
Should be annotated on public methods
● Avoid returning too generic/specific type
● Api stability
Concurrency
● immutability enables thread safety
o concurrent access to shared mutable state
● Promises / Futures
● actors
● parallel collections
val - immutable and immediately evaluated
var - mutable and immediately evaluated
def
● calculates value on each access (same as a method)
● uniform access principle
lazy val
● calculated on first access
● avoid recalculating
Variables vs Values
Classes, Case classes, Objects
classes
● body is the constructor
● getters / setters generated
● public by default
o private, protected, restricted private[controllers]
case classes
● pattern match
● simplify common operations when working with classes as data
● generated apply, toString, equals, copy methods
singleton objects
● common pattern that can be implemented in many (mostly incorrect) ways
● companion objects - shares name and file, holds ‘static’ methods and has privileged access
Pattern Matching
Option
represents presence/absence of a result
algebraic data structure
● can be either Some or None
null handling
● empty(), is_null(), isset()
● if x != null
● callers are forced to handle absence
Try
● represents success or failure of an expression
● Success / Failure
● handle result by calling map, handle failure by calling
recover
● moves try/catch control structure into type system
Future
● simplifies asynchronous computation
● similar interface to Try
● read-only view of a promise’s result
● Promises produce values asynchronously, future allows
binding of callbacks
● similar to jQuery Deferred / Angular promise
Collections
immutable / mutable
● immutable preferred
Most commonly used are
Map, List, Seq
Magic / dragons
● can be abused, affect compile times
● simplify apis by reducing overhead
implicit parameters
● avoid passing parameters repetitively
extension methods
● via implicit classes / conversions
● ad-hoc polymorphism
Implicit scope
DSLs
domain specific language
internal
● Slick, Scalikejdbc, sbt
● make use of implicits, operator
overloading, macros, advanced type
system features
external
● library support via parser combinators
DSLs - ScalikeJDBC
val programmers: List[Long] = DB readOnly { implicit session =>
withSQL {
select
.from(Programmer as p)
.leftJoin(Company as c).on(p.companyId, c.id)
.where.eq(p.isDeleted, false)
.orderBy(p.createdAt)
.limit(10)
.offset(0)
}.map(Programmer(p, c)).list.apply()}
http://scalikejdbc.org/
Typesafe api that compiles to SQL
Makes use of advanced features like Macros and Type Dynamic (like php’s
‘magic methods’ or Ruby’s method_missing)
DSLs - Slick
slick.typesafe.com
‘Functional relational mapping’
makes use of familiar collections api
can drop down to raw SQL
DSLs - sbt http://www.scala-sbt.org/
Actor Model
asynchronous message passing between lightweight processes
isolate mutable state
lifecycle
● let it crash™
● fault tolerance
● remoting
Play
● MVC web framework
● Asynchronous
● Non-blocking
● Built on Akka, Netty
● Highly customizable
● Industry support
Environment
JVM
● garbage collection, JIT compilation
● reuse existing libraries
● Java interop - call Java code from Scala and vice versa
● tooling, instrumentation
SBT
IDEs
● IntelliJ, Eclipse
o weak support initially, but steadily improving
Resources
http://blog.jetbrains.com/scala/2012/12/04/scala-worksheet/ - for IntelliJ
https://github.com/scala-ide/scala-worksheet/wiki/Getting-Started - for Eclipse
http://www.scala-sbt.org/ - scala’s build tool
http://mvnrepository.com/ - find dependencies
http://slick.typesafe.com/ - db access using collections-like interface
https://github.com/slick/slick-examples/blob/master/src/main/scala/com/typesafe/slick/examples/lifted/FirstExample.scala
- example slick code
http://scalikejdbc.org/ - sql dsl
http://akka.io/ - actors, software transactional memory
http://letitcrash.com/ - akka blog
https://typesafe.com/activator/templates - many example projects to get you started
http://docs.scala-lang.org/overviews/collections/performance-characteristics.html - collections complexity
http://docs.scala-lang.org/resources/images/collections.immutable.png - immutable collections class hierarchy
http://docs.scala-lang.org/resources/images/collections.mutable.png - mutable collections class hierarchy
Thanks!

More Related Content

What's hot

What's hot (20)

Javascript for Intermediates
Javascript for IntermediatesJavascript for Intermediates
Javascript for Intermediates
 
Complete Notes on Angular 2 and TypeScript
Complete Notes on Angular 2 and TypeScriptComplete Notes on Angular 2 and TypeScript
Complete Notes on Angular 2 and TypeScript
 
Placement and variable 03 (js)
Placement and variable 03 (js)Placement and variable 03 (js)
Placement and variable 03 (js)
 
Js ppt
Js pptJs ppt
Js ppt
 
Jumping Into Java Then!
Jumping Into Java Then!Jumping Into Java Then!
Jumping Into Java Then!
 
[OOP - Lec 01] Introduction to OOP
[OOP - Lec 01] Introduction to OOP[OOP - Lec 01] Introduction to OOP
[OOP - Lec 01] Introduction to OOP
 
[OOP - Lec 04,05] Basic Building Blocks of OOP
[OOP - Lec 04,05] Basic Building Blocks of OOP[OOP - Lec 04,05] Basic Building Blocks of OOP
[OOP - Lec 04,05] Basic Building Blocks of OOP
 
Typescript
TypescriptTypescript
Typescript
 
Classes objects in java
Classes objects in javaClasses objects in java
Classes objects in java
 
Java script
Java scriptJava script
Java script
 
Object oriented programming
Object oriented programmingObject oriented programming
Object oriented programming
 
PHP BASICS FOR BEGINNERS
PHP BASICS FOR BEGINNERSPHP BASICS FOR BEGINNERS
PHP BASICS FOR BEGINNERS
 
Metaprogramming in Ruby
Metaprogramming in RubyMetaprogramming in Ruby
Metaprogramming in Ruby
 
JavaScript Variables
JavaScript VariablesJavaScript Variables
JavaScript Variables
 
Js datatypes
Js datatypesJs datatypes
Js datatypes
 
C# Tutorial
C# Tutorial C# Tutorial
C# Tutorial
 
Adobe Flash Actionscript language basics chapter-2
Adobe Flash Actionscript language basics chapter-2Adobe Flash Actionscript language basics chapter-2
Adobe Flash Actionscript language basics chapter-2
 
Intro to ember.js
Intro to ember.jsIntro to ember.js
Intro to ember.js
 
Unit 4 plsql
Unit 4  plsqlUnit 4  plsql
Unit 4 plsql
 
Properties
PropertiesProperties
Properties
 

Viewers also liked

Linguagem Funcional Scala
Linguagem Funcional ScalaLinguagem Funcional Scala
Linguagem Funcional Scala
Davi Matos
 

Viewers also liked (6)

Roland Frasier Traffic & Conversion Presentation January 2014
Roland Frasier Traffic & Conversion Presentation January 2014Roland Frasier Traffic & Conversion Presentation January 2014
Roland Frasier Traffic & Conversion Presentation January 2014
 
Linguagem Funcional Scala
Linguagem Funcional ScalaLinguagem Funcional Scala
Linguagem Funcional Scala
 
Controle de Versões com Git + Github
Controle de Versões com Git + GithubControle de Versões com Git + Github
Controle de Versões com Git + Github
 
Selenium IDE
Selenium IDESelenium IDE
Selenium IDE
 
TCS: Freakishly Effective Marketing Hacks From Traffic & Conversion Summit
TCS: Freakishly Effective Marketing Hacks From Traffic & Conversion SummitTCS: Freakishly Effective Marketing Hacks From Traffic & Conversion Summit
TCS: Freakishly Effective Marketing Hacks From Traffic & Conversion Summit
 
TCS: Ad Tools, Social Marketing Tools + List Building Tools
TCS: Ad Tools, Social Marketing Tools + List Building ToolsTCS: Ad Tools, Social Marketing Tools + List Building Tools
TCS: Ad Tools, Social Marketing Tools + List Building Tools
 

Similar to An Intro to Scala for PHP Developers

Linq To The Enterprise
Linq To The EnterpriseLinq To The Enterprise
Linq To The Enterprise
Daniel Egan
 

Similar to An Intro to Scala for PHP Developers (20)

Reactive Software Systems
Reactive Software SystemsReactive Software Systems
Reactive Software Systems
 
Hibernate 1x2
Hibernate 1x2Hibernate 1x2
Hibernate 1x2
 
Your First Scala Web Application using Play 2.1
Your First Scala Web Application using Play 2.1Your First Scala Web Application using Play 2.1
Your First Scala Web Application using Play 2.1
 
Develop realtime web with Scala and Xitrum
Develop realtime web with Scala and XitrumDevelop realtime web with Scala and Xitrum
Develop realtime web with Scala and Xitrum
 
Functional programming in Scala
Functional programming in ScalaFunctional programming in Scala
Functional programming in Scala
 
JavaScript | Introduction
JavaScript | IntroductionJavaScript | Introduction
JavaScript | Introduction
 
Clean code and refactoring
Clean code and refactoringClean code and refactoring
Clean code and refactoring
 
Plpgsql russia-pgconf
Plpgsql russia-pgconfPlpgsql russia-pgconf
Plpgsql russia-pgconf
 
Dart the Better JavaScript
Dart the Better JavaScriptDart the Better JavaScript
Dart the Better JavaScript
 
C# - Igor Ralić
C# - Igor RalićC# - Igor Ralić
C# - Igor Ralić
 
API Design
API DesignAPI Design
API Design
 
Software Development with PHP & Laravel
Software Development  with PHP & LaravelSoftware Development  with PHP & Laravel
Software Development with PHP & Laravel
 
Functional Programming in JavaScript & ESNext
Functional Programming in JavaScript & ESNextFunctional Programming in JavaScript & ESNext
Functional Programming in JavaScript & ESNext
 
Understanding Implicits in Scala
Understanding Implicits in ScalaUnderstanding Implicits in Scala
Understanding Implicits in Scala
 
NUS Hackers Club Mar 21 - Whats New in JavaSE 8?
NUS Hackers Club Mar 21 - Whats New in JavaSE 8?NUS Hackers Club Mar 21 - Whats New in JavaSE 8?
NUS Hackers Club Mar 21 - Whats New in JavaSE 8?
 
Introduction to f#
Introduction to f#Introduction to f#
Introduction to f#
 
Stairway to scala flyer
Stairway to scala flyerStairway to scala flyer
Stairway to scala flyer
 
"Building Modern PHP Applications" - Jackson Murtha, South Dakota Code Camp 2012
"Building Modern PHP Applications" - Jackson Murtha, South Dakota Code Camp 2012"Building Modern PHP Applications" - Jackson Murtha, South Dakota Code Camp 2012
"Building Modern PHP Applications" - Jackson Murtha, South Dakota Code Camp 2012
 
Learn To Code: Introduction to java
Learn To Code: Introduction to javaLearn To Code: Introduction to java
Learn To Code: Introduction to java
 
Linq To The Enterprise
Linq To The EnterpriseLinq To The Enterprise
Linq To The Enterprise
 

Recently uploaded

CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
anilsa9823
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 

Recently uploaded (20)

SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 

An Intro to Scala for PHP Developers

  • 1. SCALA FOR PHP DEVELOPERS JOSEPH PRICE
  • 2. ● ‘scalable language’ o scales from small to large problems ● object-functional ● runs on JVM ● performant ● concise o type inference o reduced repetition Scala
  • 3. Object Orientation ● Everything’s an object o 1.toDouble ● Supports typical OO functionality - classes, methods, interfaces, inheritance, polymorphism, encapsulation, access modifiers ● Traits o interface with implementation o allows multiple inheritance o avoids ‘diamond problem’ through a technique called linearization
  • 4.
  • 5. Functional programming ● ‘first-class’ functions o anonymous o function values o passed to and returned from functions o higher order functions  map, filter, flatMap ● immutable data structures ● isolation of state, side effects
  • 6. Immutability ● most methods return a new object o immutable data structures ● val / var ● input params cannot change ● iteration - contrast to imperative style o prefer map / fold over stateful looping
  • 7. Type safety ● more confident in changes o library / api updates o refactoring ● static analysis ● find errors more quickly ● avoid common errors ● compiler can optimize typed code
  • 8. Type inference Typing required for ● Method signatures ● Class members ● Recursive methods Optional elsewhere Should be annotated on public methods ● Avoid returning too generic/specific type ● Api stability
  • 9. Concurrency ● immutability enables thread safety o concurrent access to shared mutable state ● Promises / Futures ● actors ● parallel collections
  • 10. val - immutable and immediately evaluated var - mutable and immediately evaluated def ● calculates value on each access (same as a method) ● uniform access principle lazy val ● calculated on first access ● avoid recalculating Variables vs Values
  • 11.
  • 12.
  • 13. Classes, Case classes, Objects classes ● body is the constructor ● getters / setters generated ● public by default o private, protected, restricted private[controllers] case classes ● pattern match ● simplify common operations when working with classes as data ● generated apply, toString, equals, copy methods singleton objects ● common pattern that can be implemented in many (mostly incorrect) ways ● companion objects - shares name and file, holds ‘static’ methods and has privileged access
  • 14.
  • 16. Option represents presence/absence of a result algebraic data structure ● can be either Some or None null handling ● empty(), is_null(), isset() ● if x != null ● callers are forced to handle absence
  • 17.
  • 18. Try ● represents success or failure of an expression ● Success / Failure ● handle result by calling map, handle failure by calling recover ● moves try/catch control structure into type system
  • 19. Future ● simplifies asynchronous computation ● similar interface to Try ● read-only view of a promise’s result ● Promises produce values asynchronously, future allows binding of callbacks ● similar to jQuery Deferred / Angular promise
  • 20.
  • 21.
  • 22. Collections immutable / mutable ● immutable preferred Most commonly used are Map, List, Seq
  • 23.
  • 24. Magic / dragons ● can be abused, affect compile times ● simplify apis by reducing overhead implicit parameters ● avoid passing parameters repetitively extension methods ● via implicit classes / conversions ● ad-hoc polymorphism Implicit scope
  • 25. DSLs domain specific language internal ● Slick, Scalikejdbc, sbt ● make use of implicits, operator overloading, macros, advanced type system features external ● library support via parser combinators
  • 26. DSLs - ScalikeJDBC val programmers: List[Long] = DB readOnly { implicit session => withSQL { select .from(Programmer as p) .leftJoin(Company as c).on(p.companyId, c.id) .where.eq(p.isDeleted, false) .orderBy(p.createdAt) .limit(10) .offset(0) }.map(Programmer(p, c)).list.apply()} http://scalikejdbc.org/ Typesafe api that compiles to SQL Makes use of advanced features like Macros and Type Dynamic (like php’s ‘magic methods’ or Ruby’s method_missing)
  • 27. DSLs - Slick slick.typesafe.com ‘Functional relational mapping’ makes use of familiar collections api can drop down to raw SQL
  • 28. DSLs - sbt http://www.scala-sbt.org/
  • 29. Actor Model asynchronous message passing between lightweight processes isolate mutable state lifecycle ● let it crash™ ● fault tolerance ● remoting
  • 30. Play ● MVC web framework ● Asynchronous ● Non-blocking ● Built on Akka, Netty ● Highly customizable ● Industry support
  • 31. Environment JVM ● garbage collection, JIT compilation ● reuse existing libraries ● Java interop - call Java code from Scala and vice versa ● tooling, instrumentation SBT IDEs ● IntelliJ, Eclipse o weak support initially, but steadily improving
  • 32.
  • 33. Resources http://blog.jetbrains.com/scala/2012/12/04/scala-worksheet/ - for IntelliJ https://github.com/scala-ide/scala-worksheet/wiki/Getting-Started - for Eclipse http://www.scala-sbt.org/ - scala’s build tool http://mvnrepository.com/ - find dependencies http://slick.typesafe.com/ - db access using collections-like interface https://github.com/slick/slick-examples/blob/master/src/main/scala/com/typesafe/slick/examples/lifted/FirstExample.scala - example slick code http://scalikejdbc.org/ - sql dsl http://akka.io/ - actors, software transactional memory http://letitcrash.com/ - akka blog https://typesafe.com/activator/templates - many example projects to get you started http://docs.scala-lang.org/overviews/collections/performance-characteristics.html - collections complexity http://docs.scala-lang.org/resources/images/collections.immutable.png - immutable collections class hierarchy http://docs.scala-lang.org/resources/images/collections.mutable.png - mutable collections class hierarchy