Goals, Part 2: Concrete (Measurable) Goals
After I released Version 0.1.2 of this book, I realized that I should state my goals for it more clearly. I don’t want you to buy or read a book that doesn’t match what you’re looking for. More accurately, I don’t want you to be disappointed in the book because your expectations are different than what I deliver. Therefore, I want to state some very clear and measurable goals by which you can judge whether or not you want to buy this book.
A first concrete goal is this: If you have a hard time understanding the book, Functional Programming in Scala, I want to provide the background material that can help make that book easier to understand. That book is very good, but it’s also a thin, densely-packed book, so if there are a few Scala features you don’t know, it can be hard to keep up with it at times.
Second, the Introduction to Functional Game Programming talk at the 2014 LambdaConf was a big influence on me. I remember going to that talk and thinking, “Wow, I thought I knew Scala and a little bit about functional programming, but I have no idea what this guy is talking about.” Therefore, a second concrete goal is to make all of that talk and its associated code understandable to someone who has zero to little background in functional programming. (That talk covers the
StateT monads, and other FP features like lenses, so this is actually a pretty big goal.)
A third, slightly-less concrete goal is that if you have no background in FP, I want to make Scala/FP libraries like Cats and Scalaz more understandable. That is, if you were to look at those libraries without any sort of FP background, I suspect you’d be as lost as I was at that 2014 LambdaConf talk. But if you read this book, I think you’ll understand enough Scala/FP concepts that you’ll be able to further understand what those libraries are trying to achieve.
A fourth concrete goal is to provide you with all of the background knowledge you need — anonymous functions, type signatures,
for expressions, classes that implement
flatMap, etc. — so you can better understand the 128,000 monad tutorials that Google currently lists in their search results.
As one more point to further understand my goals, please read the “disclaimer” in the next chapter.