8th June 2023
If you already mastered programming in Scala, you might want to explore more advanced concepts and techniques to enhance your skills.
The journey towards becoming an exceptional Scala developer is one that requires continuous learning and a thirst for knowledge. As the saying goes, 'Success is not the key to happiness. Happiness is the key to success. If you love what you are doing, you will be successful.' So, if you have a passion for Scala and a desire to excel, it's time to take your skills to new heights.
To help you on this exciting path, we have curated a list of five books that will serve as invaluable resources in your quest for Scala mastery. These books have been carefully selected to provide insights, techniques, and best practices that will enhance your existing skills and equip you with the tools needed to tackle complex problems with confidence. So, without further ado, let's dive into this handpicked collection of literature that will elevate your expertise and set you on a trajectory towards unparalleled success in your Scala journey.
Commonly known as the "red book" it serves as an extensive manual for functional programming in Scala. The book covers a wide range of topics, including purely functional data structures, error handling without exceptions, creation of streaming I/O libraries, Monads, and related concepts. The recently released second edition of the book incorporates exercises using Scala 3 and includes examples from the fs2 streaming library. The book presents a challenge with its numerous exercises, but it is also enlightening, rewarding, and highly valuable. Many experts consider it a "must-read" that can significantly impact your career as a Scala developer. However, I should caution junior developers that this book may be overwhelming if you haven't mastered Scala's fundamentals or lack sufficient experience in other programming languages. Nonetheless, the book is written so that even programmers from different language backgrounds can grasp and acquire knowledge of Scala in the process.
You can think of PFP as a valuable companion to the "red book" on Typelevel stack. It not only builds upon the foundation set by the "red book," but also delves into advanced patterns employed in purely functional code bases for real-world applications. It is an essential reading for functional programmers looking to enhance their skills in creating practical FP applications.
The book thoroughly explores the key aspects of developing production-grade FP applications. It covers various topics, including FP best practices, tagless final, constructing business logic, implementing HTTP and persistence layers, testing and integration, and finally, deploying the service. Practical FP in Scala employs clear and straightforward language and provides extensive notes and a supplementary GitHub project for further support.
I enjoyed reading this book, and I’m keeping it close when writing pure FP in Scala, so it could be a great cook book as well.
While not specifically focused on any programming language, this book is an absolute gem that takes you on a captivating journey into the realms of databases and distributed systems. Don't be misled by its title; it's not just valuable for those working with big data. In fact, this book deserves a place in every university's computer science curriculum. It strikes a perfect balance between theory and practice, steering clear of the mundane academic approach. The book covers in great detail such topics as types of data models and storages, data encoding formats, replication and partitioning, transactions, consensus, batching and streaming, etc. Even the most experienced engineers will surely find something new for them in this book.
DDIA delivers an in-depth understanding of the inner workings of the systems that form the foundation of modern applications. I consider this book, along with the "red book," as the two most influential works in my career. They are truly remarkable.
I find myself revisiting its pages on multiple occasions, whether to refresh my knowledge before interviews or tackle substantial design challenges.
The previous book (DDIA) is truly excellent and highly valuable. However, it does have one drawback: the concepts it presents may seem distant from the day-to-day work of a software engineer, especially if one is not directly involved in designing databases, message brokers, and stream processing systems. In modern production systems, the prevalent focus tends to be on a different type of distributed systems - microservices. That's precisely why it becomes crucial to comprehend and navigate the intricate amalgamation of concepts, patterns, techniques, and more that are associated with microservices. This knowledge has become essential for senior-level positions and beyond in today's landscape.
Fortunately, "Building Microservices" comes to the rescue by offering a comprehensive guide to the design of such systems. The author skillfully captures the essence of this topic, presenting it in a super clear and easily understandable manner.
It is a great summary of the latest microservices trends too, and it helped me crystallise all of my knowledge on the topic while also being fun to read with cool stories from production.
While the initial two books offer a purely practical perspective, delving into the subsequent two may leave you wondering, "What's next? How do I actually implement these concepts?" This is precisely where "System Design Interview" comes to your aid. Not only is it beneficial for acing actual interviews, but it also provides you with a thought framework that you can immediately put into practice. If you find yourself struggling with the approach to system design, this book may very well be the ideal starting point.
Essentially, "System Design Interview" is a compilation of interview examples that effectively demonstrate the application of design knowledge to real-world tasks using a straightforward methodology. Moreover, it offers explanations of fundamental concepts in distributed systems and architecture. The book is engaging and enjoyable to read, often making you feel as if you're collaboratively going through the system design process alongside the author.
I recently asked the Scala community on Reddit about the books they think are the most influential in their career. Here are some of the most popular choices, together with honourable mentions:
I think the first two are suitable even for beginners, while the third one is worth reading after finishing the PFP first.
That is it. Hopefully, those recommendations will be helpful for you and your career. If you have any books that you wish were included in this article, please share them with me on twitter (@kopaniev) or in the reddit post.
Follow Vlad on social media to stay up to date with his latest content!