Martin Odersky suggested different levels of Scala adoption and learning.
This is an attempt to go through all those levels.
Level A1: Beginning application programmer
Java-like statements and expressions:
standard operators
method calls
conditionals
loops
try/catch
class
object
def
val
var
import
package
Infix notation for method calls
Simple closures
Collections with
map
filter
etc
for-expressions
Level A2: Intermediate application programmer
Pattern matching
Trait composition
Recursion, in particular tail recursion
XML literals
Level A3: Expert application programmer
Folds, i.e. methods such as foldLeft, foldRight
Streams and other lazy data structures
Actors
Combinator parsers
Level L1: Junior library designer
Type parameters
Traits
Lazy vals
Control abstraction, currying
By-name parameters
Level L2: Senior library designer
link
Level L3: Expert library designer
Early initializers
Abstract types
Implicit definitions
Higher###kinded types