This course has already ended.

Luet oppimateriaalin englanninkielistä versiota. Mainitsit kuitenkin taustakyselyssä osaavasi suomea. Siksi suosittelemme, että käytät suomenkielistä versiota, joka on testatumpi ja hieman laajempi ja muutenkin mukava.

Suomenkielinen materiaali kyllä esittelee englanninkielisetkin termit.

Kieli vaihtuu A+:n sivujen yläreunan painikkeesta. Tai tästä: Vaihda suomeksi.

Books and Other Resources

O1’s custom ebook covers all the course topics; you don’t need a separate textbook. But you might want to look at other resources to further expand your knowledge of the Scala language or programming more generally.

All the books and web pages listed below feature Scala in one way or another, so they are more “directly” suitable as extensions to O1. But you can certainly look elsewhere, too, and expand your programming knowledge using other languages.

A note about language versions

This page is up to date as of mid-2023, when Scala’s new version, Scala 3, has already found its way into some books and web sites, but not all. The older Scala 2 is also still in widespread use. In O1, we use Scala 3.

If you’re considering whether to buy some of these books, note that some of them have already been updated for Scala 3 but others do not yet have such an updated edition. An older language version doesn’t mean that you can’t benefit from a book, but it does complicate things a little. You may want to wait for the next edition.

The Scala Web Site

Scala’s home page,, provides a lot of resources, some of which are works-in-progress. A couple of examples:

  • Scala 3 Book: Brief introductions to Scala 3’s features. Covers features beyond those that we use in O1.

  • Scala Standard API Scaladoc: The documentation for Scala’s standard libraries. Not all of it is beginner-friendly.


Basics of programming in Scala


Introduction to Programming and Problem Solving Using Scala (Second Edition, 2016) by Mark C. Lewis and Lisa L. Lacher is an introductory programming textbook that uses the Scala programming language.

The book’s goals and content are different from what we cover in O1. So is the order in which the content is covered. The book doesn’t use the same set of tools for writing Scala programs that we do.

Despite all that, this book may serve you well as an additional resource. Especially for beginner programmers this is a far better text than a random page or book about programming in Scala that you might find with a web search.

For more information, see the book’s web site. The same site also provides video lectures that go with the book.

At the time of writing (mid-2023), a Scala 3 edition of this book is not yet available.

On the Scala language itself


Programming In Scala (Fifth Edition, 2021) by Martin Odersky, Bill Venners, Lex Spoon, and Frank Sommers is not a textbook on introductory-level programming or programming in general; it’s an in-depth introduction to the Scala programming language specifically. On the other hand, the book discusses the reasoning behind Scala in such a way that you can learn language-independent principles of good programming as well.

We recommend this book to those students who already know how to program and now want to find out as much as they can about the various features of the Scala language. The book covers many aspects of the language that we don’t discuss in O1.

The newest edition from 2021 uses Scala 3; earlier editions don’t.

The book’s first edition (2008) is free to read online. You can find useful things there, too, as long as you keep in mind that Scala has evolved since that edition came out.

Practical programming in Scala


Li Haoyi’s Hands-on Scala Programming (2020) targets readers who already know how to program and who would like to make effective use of Scala and its libraries. The book takes you through a series of programming projects, which involve, among other things, various forms of web programming, file manipulation, parallel computing, databases, and the creation of a small programming language. Besides the usual tools of the standard Scala API, the book introduces several convenient professional-grade libraries.

The examples are concrete but connect to principles of software design in a way that is educational to experienced programmers, too. Although the book is well written, it is no doubt a challenging read if your experience is limited to O1 alone; it is potentially rewarding nonetheless. You might find it a good accompaniment for O1’s follow-on courses, for example.

At the time of writing (mid-2023), a Scala 3 edition of this book is not yet available.


Dean Wampler’s Programming Scala: Scalability = Functional Programming + Objects (Second Edition, 2021) teaches functional programming and how to combine it with object-oriented programming when designing and implementing programs. The book targets professionals and advanced students who want to create scalable, high-quality software.

The book covers many examples, which introduce various design principles, Scala goodies, and professional-grade libraries, such as Akka for distributed computing and Spark for data science and machine learning. This book, too, might be a good accompaniment for O1’s follow-on courses.

The newest edition from 2021 uses Scala 3; earlier editions don’t.

“Recipes” to solve various problems


Alvin Alexander’s Scala Cookbook: Recipes for Object-Oriented and Functional Programming (Second Edition, 2021) provides, like the title suggests, a whole bunch of solutions for specific problems that you may have while programming. These problems might have to do with the Scala language (“How can I create a method that takes in an arbitrary number of arguments?”), with specific application areas or libraries (“How can I connect to a database from my Scala code?”), or general best practices (“How can I rid myself of the nulls in my code?”).

You could read the book from cover to cover, but you may also find it more useful as a reference to consult as needed. Much of the book’s contents are suitable for novices with an introductory course behind them.

The newest edition from 2021 uses Scala 3; the first edition doesn’t.

A demanding book on pure functional programming


Functional Programming In Scala (Second Edition, 2023) by Paul Chiusano and Rúnar Bjarnason not an introductory textbook nor primarily a book about Scala, either. It does contain a compact, quickfire introduction to Scala, but that isn’t its main purpose. The purpose is to teach a particular programming paradigm, pure functional programming and to teach it deeply.

This book is appropriate for only a small number of O1 students: those who have extensive prior programming experience and who wish to challenge themselves to develop a new perspective on programming and find tools for writing high-quality software. The book contains many practice problems, some of which are very hard.

The newest edition from 2023 uses Scala 3; the first edition doesn’t.



Thousands of students have given feedback and so contributed to this ebook’s design. Thank you!

The ebook’s chapters, programming assignments, and weekly bulletins have been written in Finnish and translated into English by Juha Sorva.

The appendices (glossary, Scala reference, FAQ, etc.) are by Juha Sorva unless otherwise specified on the page.

The automatic assessment of the assignments has been developed by: (in alphabetical order) Riku Autio, Nikolas Drosdek, Kaisa Ek, Joonatan Honkamaa, Antti Immonen, Jaakko Kantojärvi, Niklas Kröger, Kalle Laitinen, Teemu Lehtinen, Mikael Lenander, Ilona Ma, Jaakko Nakaza, Strasdosky Otewa, Timi Seppälä, Teemu Sirkiä, Anna Valldeoriola Cardó, and Aleksi Vartiainen.

The illustrations at the top of each chapter, and the similar drawings elsewhere in the ebook, are the work of Christina Lassheikki.

The animations that detail the execution Scala programs have been designed by Juha Sorva and Teemu Sirkiä. Teemu Sirkiä and Riku Autio did the technical implementation, relying on Teemu’s Jsvee and Kelmu toolkits.

The other diagrams and interactive presentations in the ebook are by Juha Sorva.

The O1Library software has been developed by Aleksi Lukkarinen and Juha Sorva. Several of its key components are built upon Aleksi’s SMCL library.

The pedagogy of using O1Library for simple graphical programming (such as Pic) is inspired by the textbooks How to Design Programs by Flatt, Felleisen, Findler, and Krishnamurthi and Picturing Programs by Stephen Bloch.

The course platform A+ was originally created at Aalto’s LeTech research group as a student project. The open-source project is now shepherded by the Computer Science department’s edu-tech team and hosted by the department’s IT services. Markku Riekkinen is the current lead developer; dozens of Aalto students and others have also contributed.

The A+ Courses plugin, which supports A+ and O1 in IntelliJ IDEA, is another open-source project. It has been designed and implemented by various students in collaboration with O1’s teachers.

For O1’s current teaching staff, please see Chapter 1.1.

Additional credits appear at the ends of some chapters.

a drop of ink
Posting submission...