Scala Training Course (2 days Beginner, 4 days comprehensive)
Note: this outline is our proposal, but the training can be tailored to your specific requirements upon prior request ahead of the proposed course date.
Why Learn Scala
Scala Language was created to address problems with programming in Java. It's a general-purpose programming language that runs on Java Virtual Machine (JVM) and can accommodate libraries in either language. The Scala community is robust, and the language itself is just as flexible as more dynamic languages such as Python.
Java programmers often learn Scala programming because it's on the newest project or their companies have adopted it. Scala code does solve quite a few Java issues including supporting multiparadigm programming (object-oriented and functional programming) Even though Java 8 has attempted to address this, it's still a few steps behind.
It's interoperable with Java code. It offers closures like more dynamic languages (Ruby or Python for example). It's highly expressive, much more so than Java, allowing developers to build beautiful and elegant solutions. Current versions of Scala also offer case classes, and Scala documentation is getting better as more developers jump on it.
Requirements
-
Knowledge of functional programming and basic knowledge of Java and the JVM would be an advantage to start learning Scala.
Course details
In the first part, you will learn the foundations of the language for developers and data scientists interested in using Scala for data analysis.
-
Tackle data analysis problems involving Big Data, Scala and Spark.
-
Get a solid understanding of the fundamentals of the language, the tooling, and the development process.
-
Develop a good appreciation of more advanced features.
The agenda can also cover advanced topics, see Part 2.
The final training outline will be designed depending on your particular requirements.
The practical exercises constitute a big part of the course time, besides demonstrations and theoretical presentations. Discussions and questions can be asked throughout the course.
Course Outline
Part 1:
Introduction
-
What is Scala
-
The paradigms of object-oriented programming
-
Functional programming paradigms
-
Scala and Java
-
Language runtime environments
Basics of Scala
-
data Types
-
Operators
-
The control instructions and loops
Object-Oriented Programming
-
Classes
-
Fields
-
Methods
-
Objects and instances
-
Inheritance, abstraction, encapsulation, polymorphism
-
Features
Functional Programming
-
A function declaration
-
function Arguments
-
closures
-
anonymous functions
-
recursion
-
delayed initialization
Packages
-
Packages Scala language
-
Importing packages
-
Create your own packages
Other aspects of the Scala language
-
general types
-
exceptional service
-
case of the class.
-
collections, data structures
-
parameters alleged
-
metaprogramming
-
concurrent programming
Part 2:
Introduction
-
Who uses Scala?
-
Developing large-scale, purely-functional programs
Overview of Functional Programming in Scala
-
Higher-Order Functions
-
Combinators
-
Polymorphic Functions
Mastering Scala Types
-
Product types & Sum types
-
Supertypes & Subtypes
-
Universals & Existentials
-
Higher-Kinded Types
-
Type Lambdas
Mastering Scala Type Classes
-
Classes & Instances
-
Tricks with Implicits
-
Polymorphic Constraints
Case Study: Highly-stateful programs with complex external systems
Coding Exercise
Working with Data
-
Immutable Data & Recursion
-
Catamorphisms & Church Encoding
-
Fixed-Point Data
-
Recursion Schemes
Advanced Pattern Matching in Scala
-
Deep matching
-
Using extractors
Case Study: Scala and Big Data
Coding Exercise
Using Functional Patterns
-
Options, Eithers & Validations
-
Semigroups & Monoids
-
Functors
-
Applicatives
-
Monads
-
Foldables & Traversables
-
Lenses
Working with Effects
-
IO
-
State
-
Reader
-
Combining Effects
Case Study
-
TBD
Coding Exercise
Functional Architecture
-
Modern Architecture for FP
-
Reified Computation & Deferred Evaluation
-
Compositional Evaluators
-
Optimization Techniques
-
Purely Functional Mocking
Libraries and DSLs
-
Custom control structures with by-name parameters
-
Building well-designed libraries and internal DSLs
Functional Exception Handling
-
Traditional exception handling
-
Functional exception handling
-
Using Try with For comprehensions
Final Coding Exercise and Evaluation
Closing Remarks