If you try a simple keyword search in the books department on Amazon, you will see that there are quite a few books available. The existing reviews suggest that many if not most of them are well-written and do a good job explaining what Scala is and why everyone should learn it. Another quick glance at Indeed.com Trends shows that Scala is indeed the most popular FP language on the market and gets a lot of attention from different companies.
I decided to write a book about the Scala ecosystem that can be read by beginners or those who are only interested in Scala. The book starts with a quick overview of the language syntax and proceeds to examining functional programming features which are widely used by developers in the wild. Then, the book continues with the explanation of the build process and shows how to use Gradle and SBT. The main part of the book concentrates on using Play and puts a great emphasis on the integration aspect.
In particular, it includes information about using Play with modern frontend tools such as Webpack, React and Sass, wiring dependencies with MacWire, accessing database with ScalikeJDBC and implementing a simple authenticating mechanism using jBCrypt and standard Play API. It also shows how to write automated tests in Scala using ScalaTest and Mockito. If this sounds interesting to you, definitely take a look at the book's Leanpub page
Practical Event Sourcing with Scala
The second book of the Scala bundle picks up where "Modern Web Development with Scala" leaves of. Since my first book was published, I received a lot of requests to extend it and provide more real-world examples. In the end, I decided to write up a new book covering typical Scala usage. The unusual part of the book is that it shows how to apply Scala to a relatively complicated problem - implementing a Web application based on event sourcing.
When developers first ecounter event sourcing, they always face a number of challenges: how to implement server-side validation, how to communicate with the frontend, how to represent the current state of the app and so on. Surprisingly, existing Internet resources usually address these issues only superficially. In this book, however, we will do a lot more and deal with most of the challenges using modern technologies. In particular, we will use Play and Scala (of course!), React and Redux, Kafka, PostgreSQL, Websockets and even Neo4J. You can learn more about this book on its Leanpub page
Mastering Advanced Scala
With my third Scala book, I go a bit deeper. Basically, "Mastering Advanced Scala" is a book that covers advanced topics and techniques in a very approachable and practical way.
Since everything in the world of advanced Scala is based on type classes, the book starts with covering some important language constructs that make the type class pattern in Scala possible. For the most part, though, it concentrates on real libraries, discusses the principles they are written on and how you can apply them in real projects.
In particular, the book covers things like monoids, applicatives, free monads, optics, iteratees. It also discusses how these and many other techniques are used in existing libraries such as ScalaZ, Cats, Monocle, Circe, Monix, doobie, http4s, Finch. An entire chapter is devoted to generic programming and Shapeless. You can learn more about this book on its Leanpub page
Modern Web Development with Kotlin
After publishing my first book, I looked at Kotlin and realized that similar reasoning could be applied to learning Kotlin. Kotlin tries to fit into the exisitng Java ecosystem, so it doesn't come with its own alternatives to SBT or Play.
On the other hand, modern Java tools and frameworks such as Gradle or Vert.x provide decent developer experience and can actually be used for building efficient workflows. In the end, I published my second book - "Modern Web Development with Kotlin". As always, you can find more about it on Leanpub .