Scala – Advanced

(C) Copyright Elephant Scale

January 26, 2022

Overview

  • Scala may be the next wave in developer productivity. It is concise, object-oriented, functional, and offers support for concurrency, but is compatible with Java and is JVM – based. For this reason, Scala has been attracting the interest of many programming shops. However, these advantages are only possible through an effort of study. The Scala Programming course is designed to help this process through hands-on training.
  • This course is teaching Scala on the intermediate and advanced levels. It is targeted for developers who either have a basic knowledge of Scala or have a solid foundation of Java.
  • This course teaches how to understand the essence of Scala and write functional programming software that is efficient and “scalaesque” enough.

Goals

  • Learn one of the hottest languages
  • Be a productive programmer with Scala
  • Learn the best software development practices with Scala

Audience

  • Developers, architects

Skill Level

  • Intermediate-advanced

Duration

  • Three days

Format

  • Lectures and hands-on labs (50% – 50%)

Prerequisites

  • Basic knowledge of Scala, or
  • Scala introductory course, or
  • Good knowledge of Java

Lab environment

  • For local environment

    • JDK 8 or higher
    • Scala
    • Scala programming IDE, such as IntelliJ IDEA (recommended), Eclipse, or NetBeans.
  • If virtual machines are used

    • Zero Install: There is no need to install software on students’ machines!
    • A lab environment in the cloud will be provided for students.

Students will need the following

  • A reasonably modern laptop with unrestricted connection to the Internet. Laptops with overly restrictive VPNs or firewalls may not work properly.
    • A checklist to verify connectivity will be provided
  • Chrome browser

Detailed outline

About Scala 3

  • An Introduction to Scala 3
  • Scala vs. Java

Understanding Types in Scala

  • Type declarations
  • Type aliases
  • Parameterized types

Functions and collections

  • Ways to define a function
  • Polymorphism
  • Recursion
  • Tail recursion
  • Collections and higher order functions

Implicits and Type Classes

  • Getting to Know Implicits and Type Classes
  • Types of implicits
  • View and context bounds
  • Type classes
  • Implicit scope resolution

Property-Based Testing in Scala

  • Introduction to property-based testing
  • Properties and Generators
  • Test-driven development

Exploring Scala Effects

  • Introduction to effects
  • Option
  • Either
  • Try
  • Future
  • Cats library
  • Cats effects

Understanding Algebraic Structures

  • Understanding Algebraic Structures
  • Introduction to abstract algebraic structures
  • Semigroup
  • Monoid
  • Foldable
  • Group

Basic Monads

  • Familiarizing Yourself with Basic Monads
  • Introduction to monads
  • Id Monad
  • State monad
  • Reader monad
  • Writer monad

Monad Transformers and Free Monad

  • Look at Monad Transformers and Free Monad
  • Combining monads
  • Monad transformers
  • Free monads

Introduction to the Akka and Actor Models

  • An Introduction to the Akka and Actor Models
  • Introduction to the actor model
  • Akka basics
  • Advanced topics
  • Testing actors
  • Running the application

Building Reactive Applications with Akka Typed

  • Introduction
  • Akka Typed basics
  • Akka Typed – beyond the basics
  • Testing
  • Running the application

Basics of Akka Streams

  • Introduction to Akka Streams
  • Basics of Akka Streams
  • Testing
  • Running the application
  • ZIO