We may earn an affiliate commission when you visit our partners.
Course image
Coursera logo

Effective Programming in Scala

Julien Richard-Foy and Noel Welsh

Scala is an expressive, versatile, and safe programming language.

Read more

Scala is an expressive, versatile, and safe programming language.

In this course, you will learn how to get the most out of Scala to solve common programming tasks such as modeling business domains, breaking down complex problems into simpler problems, manipulating data, or running parallel tasks.

Along the journey, you will also learn the best practices for writing high-quality code that scales to large applications, how to handle errors, how to write tests, and how to leverage a productive development environment.

This comprehensive, hands-on, course aims at leveling up your programming skills by embracing both functional programming and object-oriented programming. You will become familiar with the standard library and the common patterns of code used in the real world.

Each week contains about 1h30 of video lectures. Each lecture is a ~10 min video focused on a specific skill or concept. We always start by looking at concrete problems, and then explain how language features or libraries make you more productive to solve these problems in general.

Lectures are generally followed by a quiz to assess your progress. At the end of each week, a graded assignment inspired by real-world applications will give you an opportunity to put things in practice.

The course covers Scala 3, and it mentions the differences with Scala 2.

Enroll now

What's inside

Syllabus

Getting Started, Basics, Domain Modeling
First, get up and running with Scala on your computer. Then, learn how to write and evaluate basic expressions and definitions. Last, learn how to model a business domain by defining case classes and sealed traits.
Read more
Standard Library, Loops
Manipulate collections of values by using the generic List data type from the standard library. Then, learn about the other generic data structures provided by the standard library (sets, sequences, and maps), and their respective use cases. All the collection classes have a comprehensive set of high-level operations to transform, filter, and iterate over their elements. Last, you will learn a couple of techniques to implement loops in Scala, and their tradeoffs.
Build Tools, Modules
How to write Scala projects larger than a worksheet? Learn how to define an entry point for a Scala project, and discover the tools you can leverage to write, compile, run, and debug your code. Then, use object-oriented programming techniques to break down a complex project into small modular components. Finally, we discuss when to use case classes versus simple classes.
Reasoning About Code
The recommendation in Scala is to use immutable data types by default. Indeed, they have desirable properties such as being thread-safe and allowing local reasoning. However, in some cases, mutable variables lead to simpler code, as you will see in the lectures. We then dive into different testing techniques such as unit testing, property-based testing, integration testing, and mocking.
Type-Directed Programming
Programs automate repetitive tasks. Sometimes, writing a program is a repetitive task. We look into a unique feature of Scala that lets the compiler write some (repetitive) parts of your programs for you! Based on the expected type of a parameter, the compiler can provide a value for this parameter if it finds an unambiguous candidate value. This technique is often used to automatically generate the serializer and deserializer of a data type, solely based on its definition, for instance.
Error Handling, Concurrent Programming
Scala supports a simple low-level mechanism for error handling: exceptions. We discuss the pros and cons of this mechanism, and we show alternative approaches that you can apply when you want to make it explicit in a method signature that it can fail with an error. We then move to a similar topic, input data validation, where we want to construct nice-looking error messages listing all the errors that the user needs to fix. We conclude with a couple of lectures showing how to work with asynchronous computations, and how to leverage the multiple CPUs of a computer by running tasks in parallel. You will see that the same idioms we used for writing data validation rules can also be used to write graphs of parallel computations.

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Teaches core programming skills in Java Virtual Machine
Teaches in-demand skills
Develops expertise in Scala coding
Covers wholesome concepts of Scala functional programming and object-oriented programming
Suitable for beginners to build fundamental knowledge
Provides regular quizzes for clear assessment of understanding
Incorporates real-world applications in assignments for practical learning
May require prior knowledge or experience in coding

Save this course

Save Effective Programming in Scala to your list so you can find it easily later:
Save

Reviews summary

Challenging scala 3 course for experienced programmers

Learners say this course is largely positive and is a great introductory choice for programmers wanting to learn Scala 3. Noted as challenging but rewarding, students state that the course provides a nice guided tour of Scala 3 that was well-prepared and helpful for them. The course earned largely positive reviews, especially from advanced programmers, who particularly appreciated the engaging assignments and emphasis on functional programming. Overall, students valued the clear explanations, relevant concepts, and the opportunity to test their new skills with challenging coding exercises.
The course emphasizes functional programming principles and good code organization.
"The emphasis is always on a functional programming style."
"The course also deals with practical topics that are often neglected by programming courses, like sbt commands, unit and property-based testing, debugging."
"Special thanks for focusing on map, zip, flatMap, traverse which help to look at software engineering at a different angle and change the mindset."
The course is a good choice for programmers with prior Scala experience.
"The course is helpful even for mature Scala programmers to grasp Scala 3."
"I recommend this course all scala2 user rather than scala-beginner for experienced developers."
"For me the assignments projects are ressources of good programming."
The course provides clear explanations and good examples.
"Very clear and knowledgeable explanations + interesting coding exercises"
"Great course. All the explanations were clear and it covered a lot of relevant concepts for writing Scala code."
"Excellent explanations of contextual abstractions!"
Assignments are engaging and provide nice challenges.
"The assignments are challenging and also interesting."
"This course nicely captures the spirit of Scala 3 and gives you nice challenges to test your new skills."
"Assignments gained in engagement as the course progressed, which added a twist to the challenge and helping to solidify the subjects!"
"Great course to get familiar with Scala and widen the horizon."
"Probably the best course out there to learn Scala 3."
"My goal taking the course was to get acquainted with Scala 3."
This course is difficult and may not be suited for beginners.
"Great course. Some of the assignments are really difficult, not suited for beginners."
"The assignments are challenging and also interesting."
"The week 4 coursework is so arbitrary (and not debuggable) that it takes an arbitrary number of permutations and tries because the error messages give you no information."
"I would not reccomend that course for beginners."
"I think it would be better for beginners to follow the "Functional Programming Principles in Scala" course before this."

Activities

Coming soon We're preparing activities for Effective Programming in Scala. These are activities you can do either before, during, or after a course.

Career center

Learners who complete Effective Programming in Scala will develop knowledge and skills that may be useful to these careers:
Cloud Architect
A Cloud Architect designs and manages cloud computing infrastructure. This course may be useful for Cloud Architects who want to learn Scala to build and manage cloud-based applications. Scala's support for concurrency and its powerful libraries make it an excellent choice for cloud computing.
Computer Scientist
A Computer Scientist researches and develops new computing technologies. This course may be useful for Computer Scientists who want to learn Scala to explore advanced programming concepts and techniques. Scala's support for functional programming, object-oriented programming, and concurrency make it an excellent choice for computer science research.
DevOps Engineer
A DevOps Engineer automates and manages the software development lifecycle. This course may be useful for DevOps Engineers who want to learn Scala to build and manage CI/CD pipelines. Scala's support for concurrency and its powerful libraries make it an excellent choice for DevOps tasks.
Software Architect
A Software Architect designs and oversees the development of software systems. This course may be useful for Software Architects who want to learn Scala to build robust and scalable software systems. Scala's strong typing system, support for functional programming, and powerful libraries make it an excellent choice for software architecture.
Mobile Developer
A Mobile Developer designs and develops mobile applications. This course may be useful for Mobile Developers who want to learn Scala to build native mobile applications for Android and iOS. Scala's cross-platform capabilities and its support for mobile frameworks make it an excellent choice for mobile development.
Backend Developer
A Backend Developer designs and develops the server-side logic of web applications. This course may be useful for Backend Developers who want to learn Scala to build robust and scalable backend systems. Scala's support for concurrency and its type-safe nature make it an excellent choice for developing backend services.
Big Data Engineer
A Big Data Engineer designs and manages big data systems. This course may be useful for Big Data Engineers who want to learn Scala to handle and process large datasets. Scala's parallel programming capabilities and its豊富なライブラリ makes it an efficient language for big data processing.
Machine Learning Engineer
A Machine Learning Engineer designs, builds, and maintains machine learning models. This course may be useful for Machine Learning Engineers who want to learn Scala to build and deploy machine learning models. Scala's support for parallel programming and its powerful libraries make it an excellent choice for machine learning.
Quantitative Analyst
A Quantitative Analyst uses mathematical and statistical models to analyze financial data. This course may be useful for Quantitative Analysts who want to learn Scala to build and automate financial models. Scala's support for parallel programming and its powerful libraries make it an excellent choice for quantitative finance.
Software Engineer
A Software Engineer designs, develops, and maintains software applications. This course may be useful for Software Engineers who want to learn Scala to build robust and scalable applications. Scala's strong typing system, support for functional programming, and powerful libraries make it an excellent choice for developing complex software systems.
Web Developer
A Web Developer designs and develops websites and web applications. This course may be useful for Web Developers who want to learn Scala to build dynamic and interactive web applications. Scala's support for functional programming and its powerful web frameworks make it an excellent choice for web development.
Full-Stack Developer
A Full Stack Developer designs and develops both the front-end and back-end of web applications. This course may be useful for Full Stack Developers who want to learn Scala to build robust and scalable web applications. Scala's support for functional programming and its powerful web frameworks make it an excellent choice for full stack development.
Data Engineer
A Data Engineer designs, builds, and maintains data pipelines. This course may be useful for Data Engineers who want to learn Scala to handle and process large datasets. Scala's parallel programming capabilities and its豊富なライブラリ makes it an efficient language for data-intensive tasks.
Game Developer
A Game Developer designs and develops video games. This course may be useful for Game Developers who want to learn Scala to build high-performance and scalable game engines. Scala's support for concurrency and its powerful libraries make it an excellent choice for game development.
Data Scientist
A Data Scientist analyzes and interprets data to extract insights and make predictions. This course may be useful for Data Scientists who want to learn Scala to handle and process large datasets. Scala's parallel programming capabilities and豊富なライブラリ makes it an efficient language for data-intensive tasks.

Reading list

We've selected seven books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Effective Programming in Scala.
A hands-on guide to Scala programming, covering topics from the basics to advanced concepts like concurrency and functional programming.
A detailed guide to multithreading and concurrency in Scala, covering topics like actors, futures, and reactive programming.
A deep dive into Scala's functional programming capabilities, covering concepts like immutability, lazy evaluation, and monads.
A practical guide to building web applications in Scala, covering frameworks like Play and Akka-HTTP.
A transition guide for Java developers looking to adopt Scala, covering syntax, libraries, and programming paradigms.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Here are nine courses similar to Effective Programming in Scala.
Scala 2: The Big Picture
Most relevant
Design Data Models for Couchbase 6
Big Data Analysis with Scala and Spark (Scala 2 version)
Functional Programming Principles in Scala (Scala 2...
Functional Programming Principles in Scala
Big Data Analysis with Scala and Spark
Functional Program Design in Scala (Scala 2 version)
Functional Program Design in Scala
Advanced Scala and Functional Programming | Rock the JVM
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2024 OpenCourser