Neal is really good at explaining functional concepts, but I think he exaggerated exploring 4 programming languages in just 157 pages. The book’s cover uses the expression “Paradigm over syntax” to sustain the thesis that learning a new programming language is easy, but learning a new paradigm is difficult. I have the impression Neal spent more time explaining the syntax of those languages than the paradigm itself. Their differences are so accentuated that I felt easier to learn the functional concepts than all the syntax differences to implement them among all those languages. In my opinion, programming languages are difficult by nature, otherwise I would learn Haskell in no time, with all the functional concepts I already know, but it doesn’t seen to help. According to Peter Norvig, we may take years to master a programming language as well as its ecosystem.
I think the book would be more effective if it consistently followed the pattern:
- explore a problem in an imperative way
- refactor it to a hybrid solution, still imperative but using functional tools (optional)
- refactor to a pure functional solution
Actually, the author followed this pattern at the beginning, but I don’t know why he didn’t continue like that.
Anyway, I have learned a lot reading this book and I do recommend it for those who are trying to become polyglot programmers, like myself. If you’re a passionate Java programmer, be careful! This book will motivate you to move forward and learn other languages because you will feel stuck with Java. Whatever action you take to make it look more functional will result in more verbose code (e.g. declare every final). High-order functions, streams, laziness are a good start, but not enough.
I was happy to see Clojure in the book, mainly used to illustrate the purely functional solution and how elegant it is to follow the functional paradigm in comparison to the other multi-functional languages.
Neal’s new book, “Building Evolutionary Architectures: Support Constant Change”, is already in my the backlog.