1.1.1. Scala as an object-oriented language
1.1.2. Scala as a functional language
1.1.3. Scala as a multi-paradigm language
1.3. Transitioning from Java to Scala
1.4. Coming from a dynamic language
2.1. REPL with Scala interpreter
2.3. Working with Array and List
2.4. Controlling flow with loops and ifs
2.8. Command-line REST client: building a working example
3.1. Building a Scala MongoDB driver: user stories
3.5. Objects and companion objects
3.8. Named and default arguments and copy constructors
3.10. Value classes: objects on a diet
Chapter 4. Having fun with functional data structures
4.1. Introducing type parameterization
4.2. Type variance with covariance and contravariance
4.3. Lower and upper type bounds
4.4. Higher-order functions, including map, flatMap, and friends
4.5. Using foldLeft and foldRight
4.6. Building your own function objects
4.7. Scala collection hierarchy
4.8. Mutable and immutable collections
4.9. Working with List and ListBuffer
4.9.1. Working with Set and SortedSet
4.9.2. Working with Map and Tuple
4.10. Working with lazy collections: views and streams
4.10.1. Convert a strict collection to a nonstrict collection with views
4.11. Divide and conquer with parallel collections
4.11.1. Parallel collection hierarchy
4.11.2. Switching between sequential and parallel collections
Chapter 5. Functional programming
5.1. What is functional programming?
5.2. Moving from OOP to functional programming
5.2.1. Pure vs. impure programming
5.3. Functions in all shapes and forms
5.6. Why does functional programming matter?
5.7. Building higher abstractions with monads
Chapter 6. Building web applications in functional style
6.1. Building weKanban: a simple web-based Kanban board
6.2. Building Scala applications using Simple Build Tool
6.3. Introducing the Scalaz HTTP module
6.3.1. How the Scalaz HTTP library works
Chapter 7. Connecting to a database
7.1. Adding a new story to a weKanban board
7.1.1. Connecting to a database using Squeryl
7.2. Building the Kanban board page
Chapter 8. Building scalable and extensible components
8.1. Building your first component in Scala
8.3. Ad hoc polymorphism with type classes
Chapter 9. Concurrency programming in Scala
9.1. What is concurrent programming?
9.2. Challenges with concurrent programming
9.2.1. Difficulties of shared-state concurrency with threads
9.3. Implementing message-passing concurrency with actors
9.3.2. How do Scala actors work?
9.4. Composing concurrent programs with Future and Promise
Chapter 10. Building confidence with testing
10.1. Importance of automated testing
10.2. Automated test generation using ScalaCheck
10.3. Test-driven development cycle
10.4. Better tests with dependency injection
10.4.1. Techniques to implement DI
10.5. Behavior-driven development using Specs2
Chapter 11. Interoperability between Scala and Java
11.1. Using Java classes in Scala
11.1.1. Working with Java static members
11.2. Using Scala classes in Java
11.3. Building web applications in Scala using Java frameworks
Chapter 12. Scalable and distributed applications using Akka
12.1. The philosophy behind Akka
12.2. Simple concurrency with Akka
12.3. Building a real-time pricing system: Akkaoogle
12.3.1. The high-level architecture of Akkaoogle
12.3.2. Setting up the project for Akkaoogle
12.3.3. Implementing the domain models
12.3.4. Implementing the core with actors
12.3.5. Increase scalability with remote actors, dispatchers, and routers
12.4. Adding asynchronous HTTP support with Play2-mini