We may earn an affiliate commission when you visit our partners.
Packt Publishing

Professional Scala teaches you how to build and contribute to Scala programs, recognizing common patterns and techniques used with the language. You'll learn how to write concise, functional code with Scala. After an introduction to core concepts, syntax, and writing example applications with scalac, you'll learn about the Scala Collections API and how the language handles type safety via static types out-of-the-box. You'll then learn about advanced functional programming patterns, and how you can write your own Domain Specific Languages (DSLs). By the end of the course, you'll be equipped with the skills you need to successfully build smart, efficient applications in Scala that can be compiled to the JVM.

Read more

Professional Scala teaches you how to build and contribute to Scala programs, recognizing common patterns and techniques used with the language. You'll learn how to write concise, functional code with Scala. After an introduction to core concepts, syntax, and writing example applications with scalac, you'll learn about the Scala Collections API and how the language handles type safety via static types out-of-the-box. You'll then learn about advanced functional programming patterns, and how you can write your own Domain Specific Languages (DSLs). By the end of the course, you'll be equipped with the skills you need to successfully build smart, efficient applications in Scala that can be compiled to the JVM.

About the Authors

Nimish Narang has a degree in biology and computer science. He has worked with application development and machine learning. His recent achievement was building the biggest ever mobile machine learning course which has many different machine learning and deep learning models in Python and translated into both Android and iOS applications to incorporate some elements of machine learning into mobile application.

Joao Azevedo is a Software Engineer currently working at ShiftForward, where he is involved in the development of large-scale systems for the online advertising industry. His interests in computer science usually revolve around artificial intelligence, machine learning, data mining, algorithms, data structures and programming language theory. He is fond of reading computer science textbooks and science-fiction novels. He makes an effort to keep as much of the code he writes open-source.

Mads Hartmann is a software engineer with a fondness for automation and programming languages, especially statically typed functional ones. He holds a masters degree in computer science from the University of Copenhagen and he is currently working as a full-stack engineer at Family. He is active in the Copenhagen developer scene and he has organized a meetup group for people interested in Scala and co-organized a meetup group for people generally interested in programming languages.

Ruslan Shevchenko is a system architect and a software developer who is focused on building reliable software systems. He specializes in programming languages and frameworks such as Scala, Java ( The domains he specializes in are telecommunications, OSS/billing systems, finance, code analysis, social integration, system utilities architecture domains, large-scale software systems, and distributed processing. In terms of architecture, his specialist domains are large-scale software systems and distributed processing.

Enroll now

What's inside

Syllabus

Setting up the Development Environment

This video gives an overview of the entire course.

In this video, we will set up our environment for the course.

Read more

This video gives an overview of the entire lesson.

In this topic, we'll be exploring ad hoc polymorphism, but through the usage of type classes.

In this video, we will be covering the structure of a basic Scala program. We will be covering definitions such as packages, imports, and objects. We will also be looking into the main method of a Scala program.

In this video, we will look at the structure of a Scala project in more detail.

Now that we can use REPL, this video will explain the base Scala syntax.

In this video, we will learn about the different tools that are used for unit testing in Scala.

In this video, we will learn to:

● Run tests for our chatbot

● Add the second test, which checks bye

● Add the date command to our chatbot program

This section summarizes what we have learned in the earlier topics.

In this video, we will learn about objects.

In this video, we will explore classes.

In this video, we will learn about equality, case classes, and the difference between value and reference equality.

In this video, we will learn about pattern matching and how to use match/ case statements.

In this video, we will explore traits which is one of Scala's traditional object-oriented programming facilities.

In this video, we will learn about self-types, annotations and special classes.

Now that we know the theoretical basics, let's look at the facilities and how they are used in our program.

In this video, we will look at sealed traits and algebraic datatypes.

In this video, we will create the same modes for the CurrentTime query.

In this video, we will learn about function calls.

In this video, we will learn the types of parameters which are in passing mode: by value, by name, and by need.

In this topic, we will introduce the fundamentals of functional programming, such as function values and high-order functions.

In this topic, we will look at conversions and syntax sugar in a function definition.

In this video, we will learn how to write our own pattern matcher and get acquainted with some standard generic classes which are often used with pattern matching.

We have learned a lot about functions and pattern matching, In this video, we will apply our theoretical knowledge to practical programming.

In this video, we will cover the core concepts behind functional programming and give you the necessary knowledge to understand and write simple functional programs.

In this video, we will learn about:

● Using vals instead of vars

● Implementing the standard library

● Higher-Order Functions

● The cornerstones Of Functional Programming

Lists are probably the most commonly used data structures in Scala programs. Learning how to work with lists is important both from a data structure standpoint but also as an entry point to designing programs around recursive data structures. Let’s look at it in more detail in this video.

In this video, we will learn about:

● First-Order Methods on List

● Appending and Concatenation

● Taking the Length of a List

● Reversing a List

● Prefixes and Suffixes

● Display

All Scala collections descend from a common trait called Traversable. The design adopted for Scala collections allows one to use higher-order functions similarly in nearly all collections, with proper return types in specific instances. Treating collections as sequences, or as containers of elements, allows one to use different data structures seamlessly. Let’s learn more about them in detail in this video.

Now that we've covered the List and some relevant Traversables in the Scala standard library, we should also visit some other useful collections Scala provides. Let’s look at them in more detail in this video.

In this topic, we are moving beyond the basic concepts behind functional programming and looking at some of the functional design patterns that you'll encounter when using functional libraries.

In this video, we will learn about type basics and polymorphism.

Variance provides a way to constrain parameterized types. It defines a subtyping relationship between parameterized types based on the subtyping relationship of their component types.

If you have come from Java, most of these things may not be surprising. As such, let's look at some other features of Scala's type system.

In this video, we will explore:

● Implicit Parameters

● Implicit Conversions

● Implicit Resolution

In this video, we will learn about Functors and Monads.

In this video, we will learn about two of the popular Scala libraries, Cats and Doobie.

In this video, we will look at Doobie in more detail.

In this video, we will look at DSLs and the different types of DSLs.

In this video, we'll have a look at a popular library for testing your Scala programs, ScalaTest, and see how the library uses DSLs to allow its users to write readable tests in various styles.

In this video, we will look at the different ScalaTest Styles.

In this video, we'll look at the Scala features that make it easy to write small DSLs.

In this video, we'll reimplement some FlatSpec ScalaTest DSLs to see how to implement DSLs in Scala.

This video will help you get a better overview of the Scala ecosystem and help guide your self-study after the course has ended, so you can continue to improve your Scala skills.

Traffic lights

Read about what's good
what should give you pause
and possible dealbreakers
Covers advanced functional programming patterns, which are essential for building robust and scalable applications, and writing Domain Specific Languages, which can improve code readability and maintainability
Explores the Scala Collections API, which provides powerful tools for data manipulation and transformation, and is a key component of functional programming in Scala
Examines Scala's type system, including variance and implicits, which are crucial for writing type-safe and expressive code, and for leveraging advanced functional programming techniques
Introduces Cats and Doobie, which are popular Scala libraries for functional programming and database interaction, respectively, and can enhance the capabilities of Scala applications
Requires setting up a development environment, which may involve installing specific software and tools, and could pose a challenge for learners with limited technical experience
Uses ScalaTest, which is a testing library that allows users to write readable tests, but learners should be aware that other testing frameworks exist

Save this course

Create your own learning path. Save this course to your list so you can find it easily later.
Save

Reviews summary

Comprehensive professional scala course

According to learners, this course provides a solid foundation in Scala, particularly for those aiming for professional development roles. Students found the coverage of functional programming patterns, the Scala Type System, and concepts like implicits to be valuable. The inclusion of hands-on exercises and practical use of libraries such as Cats and Doobie were highlighted as particularly helpful. While many praised the instructors' knowledge and the course's logical structure, some noted that the pace can be fast, especially in later sections, and that the course may assume some prior familiarity with functional programming concepts, which could make it challenging for complete beginners to FP.
Instructors are knowledgeable and clear.
"Instructors explain complex topics clearly."
"The instructors are clearly experts and explain challenging concepts like Monads and Functors in an understandable way."
"The instructors are knowledgeable."
"Instructors clearly know their stuff."
Hands-on coding and library use are beneficial.
"The hands-on exercises, especially with Cats and Doobie, were incredibly valuable."
"Building the chatbot project throughout helped tie everything together."
"The practical examples and the integration of libraries like Cats and Doobie were very helpful."
"The inclusion of Cats/Doobie is a huge plus. Highly practical and relevant for professional developers."
Strong coverage of FP concepts and patterns.
"The coverage of functional programming patterns, implicits, and the type system was excellent."
"The emphasis on writing functional code was great. Felt well-prepared for professional Scala development after this."
"The functional programming parts are explained very well, and the inclusion of Cats/Doobie is a huge plus."
"Appreciated the focus on functional patterns and using standard libraries."
May be difficult without functional background.
"It feels like it assumes more prior FP knowledge than stated."
"Might be better for people already familiar with FP concepts in other languages."
"Found myself needing external resources."
"The second half ... assumes a strong background in FP, which I didn't have."
Pace is fast, especially on advanced topics.
"Sometimes the pace felt a little fast, especially on the implicits section. You really need to pause and rewatch."
"The later sections were too theoretical and abstract. The explanations of implicits and Monads were confusing..."
"The second half on advanced FP and implicits is much harder. It assumes a strong background in FP..."
"Not suitable for beginners or those new to functional programming."

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Professional Scala with these activities:
Review Functional Programming Concepts
Reinforce your understanding of functional programming principles before diving into advanced Scala concepts. This will make grasping Scala's functional idioms easier.
Browse courses on Functional Programming
Show steps
  • Review the core principles of functional programming.
  • Practice writing pure functions and using immutable data structures.
  • Familiarize yourself with higher-order functions and lambda expressions.
Read 'Functional Programming in Scala'
Deepen your understanding of functional programming principles as applied to Scala. This book provides a solid foundation for the course material.
Show steps
  • Read the first few chapters covering basic functional programming concepts.
  • Work through the exercises in the book to solidify your understanding.
  • Relate the concepts in the book to the course material.
Implement Scala Collections API methods
Solidify your understanding of Scala Collections by implementing common methods. This will improve your fluency with the API and your ability to write concise, functional code.
Show steps
  • Choose a few methods from the Scala Collections API (e.g., map, filter, reduce).
  • Implement these methods from scratch using recursion or other functional techniques.
  • Compare your implementation to the standard library implementation.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Write a Blog Post on Implicits in Scala
Deepen your understanding of implicits by explaining them to others. Writing a blog post forces you to clarify your understanding and address potential questions.
Show steps
  • Research different use cases for implicits in Scala.
  • Write a clear and concise explanation of implicits, including examples.
  • Publish your blog post on a platform like Medium or your own website.
Build a Simple DSL
Apply your knowledge of Scala's DSL features by building a small, focused DSL. This will help you understand how to create readable and expressive code.
Show steps
  • Define the purpose and scope of your DSL.
  • Identify the key operations and syntax for your DSL.
  • Implement the DSL using Scala's features like implicit conversions and operators.
  • Write tests to ensure your DSL works as expected.
Read 'Scala with Cats'
Explore advanced functional programming concepts using the Cats library. This book will help you understand how to apply these concepts in real-world Scala projects.
Show steps
  • Read the chapters covering type classes, functors, and monads.
  • Work through the exercises in the book to gain hands-on experience with Cats.
  • Experiment with using Cats in your own Scala projects.
Contribute to a Scala Open Source Project
Gain practical experience with Scala by contributing to an open-source project. This will expose you to real-world codebases and collaborative development practices.
Show steps
  • Find a Scala open-source project that interests you.
  • Identify a bug or feature that you can contribute to.
  • Submit a pull request with your changes.
  • Respond to feedback from the project maintainers.

Career center

Learners who complete Professional Scala will develop knowledge and skills that may be useful to these careers:
Software Engineer
A Software Engineer designs, develops, and tests software applications. This role often requires proficiency in multiple programming languages and frameworks. The Professional Scala course helps build a foundation in Scala, a language increasingly used in modern software development. The course's lessons on core concepts, syntax, and writing example applications with scalac are directly applicable to the tasks a Software Engineer performs daily. Furthermore, learning how the language handles type safety via static types out-of-the-box is a critical skill. The functional programming patterns and techniques that you’ll find in this Professional Scala course are essential for any aspiring Software Engineer, and the course will help you to build smart, efficient applications in Scala that can be compiled to the JVM.
Application Developer
An Application Developer is responsible for designing, coding, and testing applications. This role often involves working with various programming languages and frameworks to create software that meets specific user needs. The Professional Scala course helps build a foundation in Scala, a language known for its ability to create concise and efficient applications. As an Application Developer, you'll learn how to write functional code with Scala and recognizing common patterns and techniques. The course's modules on Scala Collections API, advanced functional programming patterns, and creating Domain Specific Languages (DSLs) are all directly applicable to building robust and maintainable applications. The course will equip you with the skills required to successfully build efficient applications in Scala that can be compiled to the JVM, making you a more valuable Application Developer.
Backend Developer
A Backend Developer focuses on the server-side logic and infrastructure that powers web and mobile applications. This role requires a deep understanding of programming languages, databases, and system architecture. The Professional Scala course equips you with the knowledge to build robust and scalable backend systems using Scala. As a Backend Developer, you’ll learn how to write concise, functional code with Scala and recognizing common patterns and techniques This includes knowing how the language handles type safety via static types. The course's coverage of functional programming patterns and creating Domain Specific Languages (DSLs) is particularly valuable for designing efficient and maintainable backend services. With the training from this course the Backend Developer will be prepared to build applications in Scala that can be compiled to the JVM.
Technical Lead
As Technical Lead, you will guide a team of developers in designing and delivering software solutions. A strong understanding of programming languages and software development methodologies is essential. The Professional Scala course will increase your skillset and better prepare you to guide your team. As Technical Lead, you’ll learn how to write concise, functional code with Scala and knowing common patterns and techniques. The course's lessons on functional programming patterns and Domain Specific Languages (DSLs) will provide you with the knowledge needed to mentor your team and make informed technical decisions. Learning how the language handles type safety via static types will give you a leading edge.
Full-Stack Developer
A Full Stack Developer works on both the front-end and back-end aspects of web and mobile applications. This role requires proficiency in a variety of programming languages and frameworks. The Professional Scala course may be useful, since it teaches you how to build and contribute to Scala programs, recognizing common patterns and techniques used with the language. A Full Stack Developer will learn how to write concise, functional code with Scala. The course's coverage of functional programming patterns and Domain Specific Languages (DSLs) can enhance your ability to design and implement scalable applications. Learning how the language handles type safety via static types is key to understanding many technologies.
Data Engineer
A Data Engineer is responsible for building and maintaining the infrastructure that supports data storage, processing, and analysis. This role requires a strong understanding of programming languages and data structures. The Professional Scala course may be useful, since it teaches you how to build and contribute to Scala programs, recognizing common patterns and techniques used with the language. If you are a Data Engineer, you’ll learn how to write concise, functional code with Scala. The Data Engineer will be able to create efficient data pipelines. The course's exploration of the Scala Collections API is particularly relevant to data manipulation tasks and the insights into functional design patterns are highly beneficial for building robust and scalable data processing systems.
Test Automation Engineer
A Test Automation Engineer designs and implements automated tests to ensure software quality. This role requires proficiency in programming languages and testing frameworks. The Professional Scala course may be useful, since it teaches you how to build and contribute to Scala programs, recognizing common patterns and techniques used with the language. The course's lessons on functional programming patterns and Domain Specific Languages (DSLs) are especially beneficial for creating expressive and maintainable automated tests. Gaining a strong foundation with the skills learned will allow any Test Automation Engineer to be more efficient and effective.
Software Architect
A Software Architect is responsible for designing the high-level structure of software systems. This role requires a deep understanding of software development principles, design patterns, and various technologies. The Professional Scala course may be useful, since it teaches you how to build and contribute to Scala programs, recognizing common patterns and techniques used with the language. Scala's support for functional programming and Domain Specific Languages is invaluable for creating flexible and maintainable architectures. The course's lessons on advanced functional programming patterns and type safety will deepen your understanding of how to design robust software systems. This training would allow the Software Architect to build applications in Scala that can be compiled to the JVM.
Machine Learning Engineer
A Machine Learning Engineer develops and deploys machine learning models and algorithms. This role requires a strong understanding of programming languages, machine learning frameworks, and data engineering principles. The Professional Scala course may be useful, since it teaches you how to build and contribute to Scala programs, recognizing common patterns and techniques used with the language. A Machine Learning Engineer will learn how to write concise, functional code with Scala. The course's lessons on functional programming patterns and Domain Specific Languages (DSLs) can enhance your ability to implement and optimize machine learning algorithms. Learning how the language handles type safety via static types can help you more easily debug any issues you encounter along the way.
Solutions Architect
A Solutions Architect is responsible for designing and implementing technology solutions to meet specific business needs. This role requires a broad understanding of various technologies and architectural patterns. The Professional Scala course may be useful to a Solutions Architect, since it teaches you how to build and contribute to Scala programs, recognizing common patterns and techniques used with the language. A Solutions Architect will learn how to write concise, functional code with Scala. The course's lessons on functional programming patterns and Domain Specific Languages (DSLs) can provide valuable options for complex problem-solving. Learning how the language handles type safety via static types will give you a deep understanding of the implications of this powerful programming paradigm.
DevOps Engineer
A DevOps Engineer focuses on automating and streamlining the software development lifecycle. This role requires a strong understanding of programming languages, scripting, and system administration. The Professional Scala course may be useful to a DevOps Engineer, since it teaches you how to build and contribute to Scala programs, recognizing common patterns and techniques used with the language. Scala's conciseness and functional programming capabilities are beneficial for writing automation scripts and tools. The course's exploration of the Scala Collections API and Domain Specific Languages (DSLs) can enhance your ability to create efficient and maintainable automation solutions. Learning how the language handles type safety via static types will prepare you to handle modern challenges.
Data Scientist
A Data Scientist analyzes and interprets complex data to extract meaningful insights and drive business decisions. While this role often involves statistical modeling and machine learning, proficiency in programming languages is also essential. The Professional Scala course may be useful to a Data Scientist, since it teaches you how to build and contribute to Scala programs, recognizing common patterns and techniques used with the language. The course's exploration of the Scala Collections API and advanced functional programming patterns can aid in data manipulation and algorithm implementation. Learning about Scala will help you better understand this powerful programming paradigm and build robust models.
Data Analyst
A Data Analyst collects, processes, and analyzes data to identify trends and insights that can inform business decisions. This role typically requires proficiency in data analysis tools, statistical methods, and programming languages. The Professional Scala course may be useful, since it teaches you how to build and contribute to Scala programs, recognizing common patterns and techniques used with the language. A Data Analyst will learn how to write concise, functional code with Scala. The course's exploration of the Scala Collections API can be valuable for manipulating and analyzing large datasets. Learning how the language handles type safety via static types will improve the analyst's skillset.
преподаватель информатики
A Computer Science Instructor teaches computer science principles and programming to students. This role often requires a master's or doctoral degree in computer science or a related field. The Professional Scala course may be useful to this role, since it teaches you how to build and contribute to Scala programs, recognizing common patterns and techniques used with the language. A Computer Science Instructor will learn how to write concise, functional code with Scala. The course's lessons on functional programming patterns and Domain Specific Languages (DSLs) can provide valuable insights for curriculum development and student projects. Learning how the language handles type safety via static types will prepare the instructor to answer student's questions.
Consultant
A Consultant provides expert advice and guidance to organizations to improve their performance and efficiency. This role requires a broad understanding of various industries and business practices. The Professional Scala course may be useful, since it teaches you how to build and contribute to Scala programs, recognizing common patterns and techniques used with the language. A Consultant will learn how to write concise, functional code with Scala. The course's lessons on functional programming patterns and Domain Specific Languages (DSLs) can help consultants assess the technical merits of solutions and make informed recommendations. Learning how the language handles type safety via static types will prepare the consultant to better understand source code.

Reading list

We've selected two 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 Professional Scala.
Provides a comprehensive introduction to functional programming using Scala. It covers core concepts like immutability, pure functions, and higher-order functions in detail. It is particularly useful for understanding the functional design patterns and libraries commonly used in Scala. This book is often used as a textbook in university courses on functional programming.
Provides a practical introduction to functional programming using the Cats library in Scala. It covers type classes, functors, monads, and other advanced functional concepts. It is particularly useful for understanding how to apply functional programming principles in real-world Scala projects. This book provides additional depth to the course by covering Cats, a popular library.

Share

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

Similar courses

Similar courses are unavailable at this time. Please try again later.
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 - 2025 OpenCourser