/scala-essentials-nanodegree

Scala Essentials Nanodegree by Intersys Consulting

Primary LanguageJavaScriptCreative Commons Attribution Share Alike 4.0 InternationalCC-BY-SA-4.0

Scala Essentials Nanodegree

Join the chat at https://gitter.im/IntersysConsulting/scala-essentials-nanodegree

About this nanodegree

Scala has positioned itself as the de facto language for Data Engineering. Several of the major big data frameworks and toolkits for batch processing and streaming analytics are implemented in this language. Furthermore, Scala provides a highly expressive and strong type system on top of the JVM which facilitates the development and maintenance of complex software applications. This includes but is not limited to distributed computing, highly resilient web applications, streaming technologies, and real time machine learning serving APIs.

In this nanodegree, you will learn the basics of Scala programming as well as the most common best practices. You will get familiar with functional programming principles and understand the trade-offs between traditional object-oriented and functional paradigms. A successful completion of this nanodegree will enable you to pursue more advanced topics in the big data practice and general software development with Scala.

Who should apply

Consider the following prospectus profiles:

  • Beginners with basic programming skills and willing to learn Scala.

    • Object oriented programming notions are a nice to have.
    • Experience with at least one typed language (e.g., Java).
  • IT professionals interested in software and/or data engineering with Scala.

    • Understands basic programming concepts.
    • Previous coding experience is required.
  • Developers willing to increase their current skill set.

    • Has experience developing with several programming language including dynamic and strongly typed.
    • Has a good notion of design patterns and software best practices.
  • Scala and Java programmers with object-oriented background and willing to learn functional programming.

    • Has a solid understanding of the JVM.
    • Understands OO design patterns.
    • Is aware of the paradigm shift that implies FP.

Requirements

Prospectus students must:

  • Have their own hardware with the following minimum specs:
    • At least 4GB of RAM. See the system requirements for IntelliJ here.
    • Be able to dedicate at least 1 hour of individual learning for each module (homework, readings, etc).

What you'll learn

This nanodegree aims to create proficient Scala developers. For doing so, we layout the foundational concepts that every Scala programmer should master.

Syllabus

Module 1: Introduction

  • History and context
  • Getting started

Module 2: Essentials

  • Understanding of the JVM
  • Basics of Scala interoperability
  • Scala expressions, types and values
  • Evaluation strategies
  • Scaladoc
  • Documenting your work

Module 3: Objects and classes

  • Classes
  • Objects
  • Companion Object design pattern
  • Subtyping (or dynamic) polymorphism.
  • OOP patterns

Module 4: Functions

  • Function types
  • Composition
  • Currying
  • Generics and parametric polymorphism
  • Functions and Dependency Injection.

Module 5: Traits for data modelling

  • Traits
  • Abstract/Algebraic Data Types (ADTs)
  • Recursive Data Structures
  • Invariance, covariance and contravariance

Module 6: Sequencing computations

  • fold
  • map and flatMap
  • Functional programming constructs in action

Module 7: Idiomatic Scala

  • Collections
  • For-comprehension
  • Pattern matching

Module 8: Type classes

  • Implicits
  • The typeclass pattern (ad-hoc polymorphism)
  • Typeclass instances and interfaces

Module 9: Functional programming

  • Monoids and Semigroups
  • Functors
  • Monads
  • Monad transformers
  • Algebraic effects
  • Functional Data Structures and programming patterns

Module 10: Popular framework and toolkits

  • Web Development
  • Batch processing
  • Real time processing with streams
  • Utilities
  • Testing: ScalaTest, ScalaCheck (property-based testing)
  • Selected topics on SBT and useful plugins
  • Targeting other platforms: ScalaJs and Scala Native.

Collaborators

Content owners (by alphabetical order)

  • Mauricio Martín Saavedra Contreras @MMSaavedraC
  • Rafael Avila @Rafailong
  • Rodrigo Hernández Mota @rhdzmota
  • Oscar Vargas Torres @oscarvarto

For more information see the CONTRIBUTING.md file.

License

This nanodegree uses the Creative Commons Attribution ShareAlike 4.0 International license. Read the LICENSE.md file for more information.