1. What is Functiona Programming?
    1. Referential transparency: same input - same result
    2. Information about possible inputs and outcomes
  2. Why functional programming?
  3. Immutability
  4. How to Deal with Side Effects
  5. Exceptions and Readability
    1. 分支主題 1
    2. Validations not equal to Exceptional situation
    3. Always prefer return values over exceptions
    4. Primitive Obsession
      1. Wrap primitive types with separate classes
  6. The Billion-dollar Mistake
    1. return null
  7. Mitigating the Billion-dollar Mistake
    1. Maybe<T>
  8. Summary