What we do?

  • Work in Tinkoff Business
  • Develop backend applications in Scala

Course

Introduction to Functional Programming and Scala Language

Why did you choose this course?

What are your expectations about this course?

Course Structure

The course will consist of 3 blocks (or main themes):

  1. Scala: Syntax and Standard Library
  2. Concurrent Programming
  3. Functional Programming

Grading

  1. Labs - 20%
  2. Individual Projects - 40%
  3. Midterm Exam - 15%
  4. Final Exam - 25%

Timeline

  • Every lab class there will be a lab exercise with week deadline
  • Individual Projects will be held after Midterm
  • Best effort for grading

Resources - Books

Programming in Scala, Fourth Edition: Martin Odersky, Lex Spoon, Bill Venners

Functional Programming in Scala: Paul Chiusano, Runar Bjarnason

Resources - Courses

Resources - Telegram

What is Scala?

Scala is a multi-paradigm programming language

One paradigm - Object Oriented Programming or OOP.

In OOP everything is an object - state and its behaviour

Other paradigm - Functional Programming or FP

In FP everything is a value or a function

Why use Scala?

  • Physical limits of single CPU processing. All CPUs today have multiple cores, that are needed to be used.
  • Business has a need in creating complex, stable and maintainable applications.

Scala Advantages

  • Conciseness — better maintainability
  • Rich type system
  • Interoperability with Java

Complex Concurrent Systems

Scala has a great type system that allowed to implement all kinds of approaches to concurrency:

  • Actor model
  • Futures
  • Green Threads

All of them enable a rather simple approach to concurrent programming

Interoperability with Java

Scala is executed on Java Virtual Machine (JVM)

Scala provides full interoperability with Java:

  • Ability to use / call any Java code from Scala code
  • Ability to use compiled Java libraries
  • Ability to call Scala code from Java

Thus, whole Java ecosystem can be reused in Scala

Where Scala can be applied?

  • Main area - creating complex concurrent backend (web-server) applications
  • Can be used for creating frontend application using Scala.js
  • Spark - platform for distributed computations on Big Data

However, Scala.js and Spark will not be covered in this course

Main focus - backend applications