We may earn an affiliate commission when you visit our partners.
Course image
Martin Odersky

Functional programming is becoming increasingly widespread in industry. This trend is driven by the adoption of Scala as the main programming language for many applications. Scala fuses functional and object-oriented programming in a practical package. It interoperates seamlessly with both Java and Javascript. Scala is the implementation language of many important frameworks, including Apache Spark, Kafka, and Akka. It provides the core infrastructure for sites such as Twitter, Netflix, Zalando, and also Coursera.

Read more

Functional programming is becoming increasingly widespread in industry. This trend is driven by the adoption of Scala as the main programming language for many applications. Scala fuses functional and object-oriented programming in a practical package. It interoperates seamlessly with both Java and Javascript. Scala is the implementation language of many important frameworks, including Apache Spark, Kafka, and Akka. It provides the core infrastructure for sites such as Twitter, Netflix, Zalando, and also Coursera.

In this course, you will discover the elements of the functional programming style and learn how to apply them usefully in your daily programming tasks, such as modeling business domains or implementing business logic. You will also develop a solid foundation for reasoning about functional programs, by touching upon proofs of invariants and the tracing of execution symbolically.

The course is hands-on; most units introduce short programs that serve as illustrations of important concepts and invite you to play with them, modifying and improving them. The course is complemented by a series of programming projects as homework assignments.

Recommended background: You should have at least one year of programming experience. Proficiency with Java or C# is ideal, but experience with other languages such as C/C++, Python, Javascript, or Ruby is also sufficient. You should have some background in mathematics (e.g., algebra, logic, proof by induction). Last, you should have some familiarity with using the command line.

Enroll now

What's inside

Syllabus

Getting Started + Functions & Evaluation
Get up and running with Scala on your computer. Complete an example assignment to familiarize yourself with our unique way of submitting assignments. In this week, we'll learn the difference between functional imperative programming. We step through the basics of Scala; covering expressions, evaluation, conditionals, functions, and recursion
Read more
Higher Order Functions
This week, we'll learn about functions as first-class values, and higher order functions. We'll also learn about Scala's syntax and how it's formally defined. Finally, we'll learn about methods, classes, and data abstraction through the design of a data structure for rational numbers.
Data and Abstraction
This week, we'll cover traits, and we'll learn how to organize classes into hierarchies. We'll cover the hierarchy of standard Scala types, and see how to organize classes and traits into packages. Finally, we'll touch upon the different sorts of polymorphism in Scala.
Types and Pattern Matching
This week we'll learn about the relationship between functions and objects in Scala; functions *are* objects! We'll zoom in on Scala's type system, covering subtyping and generics, and moving on to more advanced aspects of Scala's type system like variance. Finally, we'll cover Scala's most widely used data structure, Lists, and one of Scala's most powerful tools, pattern matching.
Lists
This week we dive into Lists, the most commonly-used data structure in Scala.
Collections
After a deep-dive into Lists, this week we'll explore other data structures; vectors, maps, ranges, arrays, and more. We'll dive into Scala's powerful and flexible for-comprehensions for querying data.

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Explores functional programming, which is standard in Scala industry applications
Teaches functional programming principles and their practical uses
Develops a solid foundation for reasoning about functional programs through proofs of invariants and symbolic execution tracing
Taught by Martin Odersky, who is recognized for his work in Scala
Provides hands-on experience through short programs and programming projects
Recommended for experienced programmers who are proficient in Java or C#

Save this course

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

Reviews summary

Scala functional programming

learners say Martin Odersky, the creator of Scala, teaches this largely positive, challenging course on functional programming and the Scala programming language. It begins with fundamental concepts then dives into advanced and engaging assignments that require abstract problem solving using recursion and immutability. Videos are clear, but some early assignments are difficult and may require additional research. Students with an OOP background or experience with algorithms may find this course easier. It's recommended for those seeking a deep understanding of functional concepts and how to effectively code in Scala.
This course is academically rigorous and requires a solid understanding of programming fundamentals. Assignments are complex and time-consuming, but they provide valuable learning experiences.
"It is mentioned that it is only necessary to have at least one year of experience in a programming language, however, it does not mention that you must have a solid base in arithmetic, all the examples are associated in a very general way but with great complexity that is not clarified."
"It is expected to have a Computer Science background and the assignments are not easy at all."
"The 1+ year programming experience prerequisite is a little loose but is technically correct."
"Mixed feelings.... The course seems to have been a bit botched upon several updates as the material is almost 10 years old."
"I would echo the other reviews about how it took a long time to get the environment set up."
Odersky, the course instructor, is Scala's creator. His lessons go beyond theory to include insights into the language's inner workings.
"The best course for learning Scala and Functional Programming! Taught by the creator himself, this course is for everyone who wants to learn Scala and understand prinicples of FP which makes up Scala's elegance."
"I had a little of expirience in programming(3 month). So, It was not very simple. Good part of this course is the clearness and lucidity of exercises. I took another Scala course after that and there was a diificulty to understand what should I do. In this course there is no such problem. The main problem here is programming, not analysis. Recomend this course to all."
Weekly programming assignments are challenging and time-consuming, but they provide valuable practice and help reinforce the concepts learned in the videos.
"Programming assignments complement the course material and are much harder than your typical MOOC assignments."
"Definitely NOT a beginner course on programming or algorithms."
"This course did a great job of pragmatically demonstrating principles in functional programming."
"Wow!The course is really challenging and force you to think in a functional way."
"Amazing course. After this course, Scala is my new favorite programming language."
"The course could be very interesting for those, who have not been thinking of solving problems in the way Functional Programming approaches problems."
"Really good course. Only point of criticism would be that sometimes the level of detail in the explanation of the assignments is a little low."
"I had a little of expirience in programming(3 month). So, It was not very simple."
The course emphasizes functional programming principles and provides a strong foundation in concepts such as recursion, immutability, and higher-order functions.
"This was a fascinating course in Scala and functional programming."
"That was a fascinating course in Scala and functional programming."
"The best course for learning Scala and Functional Programming!"
"This course was excellent. This was my first attempt at learning functional programming after having spent the past 13 years doing OO programming and the 3 years before that doing procedural programming and it was much more challenging than I expected."
"This course was more focused on computer science as I had anticipated, and less on working with Scala as a language to build e.g. an application."
"This course is very challenging for those uninitiated in data structures and algorithms."
"I wanted to get more familiar with functional programming paradigms for a long time and I know that Scala is a mighty programming language."
"The course starts slow and might appear to teach trivial concepts at the start but don't be fooled."
Taught by the creator of Scala, Martin Odersky, this course provides a unique opportunity to learn from a pioneer in the field. His clear explanations and passion for the subject are evident throughout.
"The best course for learning Scala and Functional Programming! Taught by the creator himself, this course is for everyone who wants to learn Scala and understand prinicples of FP which makes up Scala's elegance."
"A great experience! The lectures are concise while illustrating core concepts very well."
"Excellent course to get started with Scala and make start with learning a completely different way of thinking (I have a Java background)."
"I also got a basic understanding of Scala and the intention of the founder, and I also got application example through not easy assignment."
"Amazing, changed my mindset and improved my programming skills with another approach totally different."
"This was an eye opener to the world of functional thinking."
"This course has subjects explained i a very simple fashion however it touches some advanced topics, some others require problem solving using especial styles like immutability and recursion, because of that it may be a better fit for some with at least 1 year of practice."
"I had been knowing about functional programming since my college days."
"The programming assignments complement the course material and are much harder than your typical MOOC assignments."
Setting up your environment and completing early assignments can be challenging for those new to Scala or functional programming. Be prepared for a steep learning curve and the need for supplemental research.
"0.I have long since learned that the autocoders utilized are probably the worst pieces of software ever written."
"In general course is good. It gives the basics of functional programming paradigm. However most of the tasks are incredibly difficult, It takes a lot of time to look for external resources to solve the assignment."
"I've tried to take the course and have already completed 3 assignments. I have to say that I still do not understand how to code basic stuffs on scala."
"I have been programming in Java over the past few years. So, when I first encountered Scala code at work earlier this year, I was under the impression that I could just go through other developer's code in my project codebase and learn the basics of Scala."
"I am sorry to give this mark, guys. But I am a little disappointedTo start with I spent more than a week installing the programs."
"My background: Physics PhD, background in Matlab and some limited Python. Brief review: A decent course, very difficult at first but gets fun, especially the final Anagram assignment. Expect it to take longer than the estimated time if you're not familiar with Java. Could do with more examples in lectures to drill home tools introduced. Verbose Course Review: I found the learning curve on the first few weeks very steep coming from non-java background, and the references to java methods and types weren't helpful."

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 Functional Programming Principles in Scala with these activities:
Read "Scala Cookbook"
Review key concepts and best practices in Scala programming to lay a strong foundation for the course.
Show steps
  • Purchase or borrow the book.
  • Read the introduction and first two chapters to familiarize yourself with the basics of Scala.
  • Complete one to two exercises from each chapter to practice applying the concepts.
  • Take notes on important concepts and make connections to your current knowledge of programming.
Build a Tic-Tac-Toe game in Scala
Apply functional programming principles to design and implement a classic game, solidifying understanding of Scala concepts.
Show steps
  • Design the game logic and classes.
  • Implement the game loop.
  • Add user input handling.
  • Test and debug the game.
Solve Scala coding challenges on LeetCode
Enhance problem-solving skills and gain practical experience in applying Scala to solve coding challenges.
Browse courses on Algorithms
Show steps
  • Select a set of LeetCode problems relevant to the course topics.
  • Attempt to solve the problems on your own.
  • Check your solutions against the provided test cases or community discussions.
  • Review your solutions and identify areas for improvement.
Three other activities
Expand to see all activities and additional details
Show all six activities
Attend a workshop on Scala's Interoperability with Java and JavaScript
Gain hands-on experience in integrating Scala with other popular programming languages used in industry.
Browse courses on Java Interoperability
Show steps
  • Identify and register for a workshop on Scala interoperability.
  • Attend the workshop and actively participate in the exercises.
  • Experiment with the concepts covered in the workshop in your own projects.
Write a blog post on Higher Order Functions in Scala
Deepen understanding of higher order functions by explaining and providing examples in a written format.
Browse courses on Higher Order Functions
Show steps
  • Choose a specific aspect of higher order functions to focus on.
  • Research and gather relevant information from the course materials and external sources.
  • Write an outline of the blog post.
  • Draft the blog post, including examples and explanations.
  • Review and edit the blog post for clarity and accuracy.
Design a RESTful API for a library management system
Apply Scala's capabilities for building web applications to design and document an API for a real-world scenario.
Browse courses on RESTful API
Show steps
  • Define the requirements and use cases for the API.
  • Design the data model and API endpoints.
  • Create a prototype or mock implementation of the API.
  • Document the API using OpenAPI or Swagger.

Career center

Learners who complete Functional Programming Principles in Scala will develop knowledge and skills that may be useful to these careers:
Functional Programmer
Functional Programmers work in a programming style that focuses on the mathematical evaluation of expressions. They have a deep understanding of how functions work and how to apply them in practical applications. This course in 'Functional Programming Principles in Scala' will provide you with the foundation you need to become a successful Functional Programmer. You will learn the basics of Scala, including expressions, evaluation, conditionals, functions, and recursion. You will also learn about higher order functions, data abstraction, types, and pattern matching. This course is hands-on, with most units introducing short programs that serve as illustrations of important concepts. You will also complete a series of programming projects as homework assignments.
Software Engineer
Software Engineers apply the principles of computer science and software design to the creation of computer programs. They use their knowledge of programming languages, algorithms, and data structures to design, develop, test, and maintain software systems. This course in 'Functional Programming Principles in Scala' will help you build a strong foundation in functional programming, which is becoming increasingly widespread in industry. You will learn the elements of the functional programming style and how to apply them usefully in your daily programming tasks. You will also develop a solid foundation for reasoning about functional programs. Functional programming is a valuable skill for Software Engineers to have, as it can help them write more efficient and maintainable code.
Data Scientist
Data Scientists use their knowledge of statistics, machine learning, and data mining to extract insights from data. They use this information to help businesses make better decisions. This course in 'Functional Programming Principles in Scala' will help you build a strong foundation in functional programming, which is a valuable skill for Data Scientists to have. Functional programming can help Data Scientists write more efficient and maintainable code. It can also help them to better understand the data they are working with.
Web Developer
Web Developers design and develop websites. They use their knowledge of HTML, CSS, and JavaScript to create websites that are both visually appealing and functional. This course in 'Functional Programming Principles in Scala' may be useful for Web Developers who want to learn more about functional programming. Functional programming can help Web Developers write more efficient and maintainable code. It can also help them to better understand the data they are working with.
Computer Scientist
Computer Scientists conduct research on the theory and practice of computing. They develop new algorithms and data structures, and they design new programming languages. This course in 'Functional Programming Principles in Scala' may be useful for Computer Scientists who want to learn more about functional programming. Functional programming is a valuable skill for Computer Scientists to have, as it can help them to write more efficient and maintainable code.
Quantitative Analyst
Quantitative Analysts use their knowledge of mathematics, statistics, and computer science to develop and implement mathematical models to help businesses make better decisions. This course in 'Functional Programming Principles in Scala' may be useful for Quantitative Analysts who want to learn more about functional programming. Functional programming can help Quantitative Analysts write more efficient and maintainable code. It can also help them to better understand the data they are working with.
Systems Analyst
Systems Analysts design, develop, and implement computer systems. They use their knowledge of computer hardware and software to create systems that meet the needs of businesses. This course in 'Functional Programming Principles in Scala' may be useful for Systems Analysts who want to learn more about functional programming. Functional programming can help Systems Analysts write more efficient and maintainable code. It can also help them to better understand the data they are working with.
Database Administrator
Database Administrators are responsible for the design, implementation, and maintenance of databases. They use their knowledge of database management systems to ensure that databases are reliable, efficient, and secure. This course in 'Functional Programming Principles in Scala' may be useful for Database Administrators who want to learn more about functional programming. Functional programming can help Database Administrators write more efficient and maintainable code. It can also help them to better understand the data they are working with.
Technical Writer
Technical Writers create documentation for software and hardware products. They use their knowledge of technical writing principles and software development to create documentation that is clear, concise, and accurate. This course in 'Functional Programming Principles in Scala' may be useful for Technical Writers who want to learn more about functional programming. Functional programming can help Technical Writers write more efficient and maintainable code. It can also help them to better understand the data they are working with.
Project Manager
Project Managers plan, organize, and execute projects. They use their knowledge of project management principles and software development to ensure that projects are completed on time, within budget, and to the required quality. This course in 'Functional Programming Principles in Scala' may be useful for Project Managers who want to learn more about functional programming. Functional programming can help Project Managers write more efficient and maintainable code. It can also help them to better understand the data they are working with.
Business Analyst
Business Analysts analyze business processes and identify opportunities for improvement. They use their knowledge of business analysis techniques and software development to develop solutions that meet the needs of businesses. This course in 'Functional Programming Principles in Scala' may be useful for Business Analysts who want to learn more about functional programming. Functional programming can help Business Analysts write more efficient and maintainable code. It can also help them to better understand the data they are working with.
Software Tester
Software Testers test software applications to find and fix bugs. They use their knowledge of software testing principles and software development to develop test cases that will thoroughly test software applications. This course in 'Functional Programming Principles in Scala' may be useful for Software Testers who want to learn more about functional programming. Functional programming can help Software Testers write more efficient and maintainable code. It can also help them to better understand the data they are working with.
Network Administrator
Network Administrators design, implement, and maintain computer networks. They use their knowledge of networking principles and software development to create networks that are reliable, efficient, and secure. This course in 'Functional Programming Principles in Scala' may be useful for Network Administrators who want to learn more about functional programming. Functional programming can help Network Administrators write more efficient and maintainable code. It can also help them to better understand the data they are working with.
Database Engineer
Database Engineers design, implement, and maintain databases. They use their knowledge of database management systems and software development to create databases that are reliable, efficient, and secure. This course in 'Functional Programming Principles in Scala' may be useful for Database Engineers who want to learn more about functional programming. Functional programming can help Database Engineers write more efficient and maintainable code. It can also help them to better understand the data they are working with.
Security Analyst
Security Analysts analyze security risks and develop security solutions. They use their knowledge of security principles and software development to develop security solutions that protect computer systems and networks from unauthorized access. This course in 'Functional Programming Principles in Scala' may be useful for Security Analysts who want to learn more about functional programming. Functional programming can help Security Analysts write more efficient and maintainable code. It can also help them to better understand the data they are working with.

Reading list

We've selected 23 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 Functional Programming Principles in Scala.
Provides an in-depth look at advanced Scala topics, including functional programming concepts. It is written for experienced Scala programmers.
Provides a comprehensive overview of functional programming in Scala. It covers the core concepts of functional programming, such as immutability, higher-order functions, and recursion. The book also provides a detailed introduction to Scala's type system and its support for functional programming.
Provides a deep dive into the Scala type system. It covers everything from the basics of the type system to advanced topics such as variance and type inference. This book great resource for anyone who wants to learn more about the Scala type system.
Provides a comprehensive overview of advanced Scala programming. It covers topics such as type classes, implicits, and macros. The book is ideal for Scala developers who want to learn more about the advanced features of the language.
Provides a practical guide to functional and reactive domain modeling in Scala. It covers the core concepts of functional and reactive programming, and it shows how to use these concepts to build scalable and maintainable applications. The book is ideal for Scala developers who want to learn more about functional and reactive programming.
Provides a comprehensive overview of functional programming in Scala. It covers the basics of functional programming, as well as more advanced topics such as monads and type classes. This book great resource for anyone who wants to learn more about functional programming in Scala.
Provides a comprehensive overview of functional programming in Scala. It covers the basics of functional programming, as well as more advanced topics such as monads and type classes. This book great resource for anyone who wants to learn more about functional programming in Scala.
Provides an introduction to type theory, which is the mathematical foundation of functional programming. It is helpful for programmers who want to understand the theoretical underpinnings of functional programming.
Provides an introduction to logic, which is the mathematical foundation of functional programming. It is helpful for programmers who want to understand the theoretical underpinnings of functional programming.
Provides an introduction to category theory, which is the mathematical foundation of functional programming. It is helpful for programmers who want to understand the theoretical underpinnings of functional programming.
Provides an introduction to Scala for web development. It covers the basics of the language, as well as more advanced topics such as web frameworks and web services. This book great resource for anyone who wants to learn more about Scala for web development.
Fast-paced introduction to Scala. It covers the basics of the language, including its syntax, type system, and object-oriented features. The book also provides a number of examples of how to use Scala to solve real-world problems.
Provides a gentle introduction to functional programming in Scala. It covers the core concepts of functional programming, such as immutability, higher-order functions, and recursion. The book also provides a number of examples of how to use Scala to solve real-world problems.
Practical guide to Scala for Java developers. It covers the differences between Scala and Java, and it shows how to use Scala to solve common programming problems. The book is ideal for Java developers who want to learn Scala.
Provides a practical guide to using Scala for big data analysis. It covers the core concepts of big data analysis, such as data ingestion, data processing, and data visualization. The book is ideal for Scala developers who want to learn more about big data analysis.
Provides an introduction to Scala for machine learning. It covers the basics of the language, as well as more advanced topics such as data manipulation and machine learning algorithms. This book great resource for anyone who wants to learn more about Scala for machine learning.
Provides an introduction to Scala. It covers the basics of the language, as well as more advanced topics such as concurrency and Akka. This book great resource for anyone who wants to learn more about Scala.
Explores the practical applications of functional programming in real-world software development. It covers a wide range of topics, from concurrency to testing to web development.
Provides an introduction to functional programming concepts using C#. It is helpful for programmers who want to learn functional programming without having to learn a new language.
Provides an introduction to functional programming concepts using Java. It is helpful for programmers who want to learn functional programming without having to learn a new language.
Gentle introduction to Scala. It covers the basics of the language, including its syntax, type system, and object-oriented features. The book is ideal for beginners who have no prior experience with Scala.
Provides a gentle introduction to functional programming concepts. It is written for programmers with no prior experience in functional programming.

Share

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

Similar courses

Here are nine courses similar to Functional Programming Principles in Scala.
Functional Programming Principles in Scala (Scala 2...
Most relevant
Parallel programming (Scala 2 version)
Most relevant
Parallel programming
Most relevant
Functional Program Design in Scala (Scala 2 version)
Most relevant
Functional Program Design in Scala
Most relevant
Big Data Analysis with Scala and Spark (Scala 2 version)
Most relevant
Big Data Analysis with Scala and Spark
Most relevant
Scala 2: The Big Picture
Most relevant
Scala 2 Methods and Functions
Most relevant
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