Last week, The Pragmatic Bookshelf started the sales of Learn Functional Programming with Elixir written by me, now in beta. After one year of hard work, we are finally publishing the beta version of the book. In this blog post, I’ll tell you about the motivation for writing a book, its contents and its future.
Why Writing a Book?
Last year, we were, company-wise, looking for different ways to contribute to the Elixir community. At some point, Hugo Barauna reached out to me and said: “Why don’t you write a book?”. I must tell you: I wasn’t ready.
I’m Brazilian and Portuguese is my native language. Writing a book in English is a great challenge. I thought about everything that I would have to give up to write a book (goodbye, video game nights) and then… I accepted it.
Once Hugo told me The Pragmatic Bookshelf was behind it, I felt motivated. I had a big challenge in front of me, but I knew I wouldn’t be alone. But most of all, what made me most excited about the book was the opportunity to present a different way of learning Elixir that might help people that are stuck in their journey.
Why Functional Programming with Elixir?
After accepting the challenge, I had to write a book proposal. It’s a document outlining the book topics. The Pragmatic Bookshelf is one of the most important technical publishers. Your proposal must stand out if you want to be accepted. One of the ways to stand out is to figure out exactly what the other books are missing.
We have great Elixir books. Some of them are for expert programmers, others are for beginners. These books usually focus on Elixir features and OTP. But they don’t slow down and explain functional programming. Then, observing that functional programming was missing in these books, I came up with an idea of a book that has a balanced level of Functional Programming and Elixir.
I had to do my homework in order to explain why teaching functional programming and Elixir together is a good idea. To write a book, you need to read books. I had to read beyond all of the Elixir books out there. I used dynamic reading, looking for content that authors weren’t talking about.
What’s in the Book?
You’ll find a beginner’s guide to functional programming concepts, at the same time, you’ll be introduced to Elixir. You’ll learn:
- Immutability,
- Declarative coding,
- Impure and pure functions,
- Anonymous and named functions,
- Closures,
- Pattern matching,
- Recursion,
- High-order functions,
- Behaviours,
- and Protocols.
The book introduces functional programming while teaching Elixir in the proper pace. For example, in other books, the recursion concepts are presented fast in two or three pages. Meanwhile, in Learn Functional Programming with Elixir, you’ll have an entire chapter with more than twenty pages explaining many concepts, like unbounded and bounded recursion, divide and conquer, and tail call optimization.
The Next Months
Before the release of the book’s final version, we’ll release two more chapters. We’ll refine the book with all suggestions and errata from readers during this beta phase. Soon, the book will reach its final stage and it’ll also have a printed version.
Thanks to Jackie Carter and Bruce Tate from The Pragmatic Bookshelf, Plataformatec, technical reviewers, beta readers, and friends, we’re building a great book.
If you bought it and you are reading it, I’m counting on your feedback. For now I have to go, I have a lot of work to do! XD
This is great!
Congrats!
This must be great book, I, currently employed as Java developer, ask if
you can recommend this book as a guide for people like me who’d like to dive
into functional programming? Or if more specific, I’d like to know if
this book contains practices, tips, tricks of solving problems which
would be easily solved in OOP paradigm but not in functional? Or can you
recommend one?
Thanks! o/
If you are a programmer beginner, I would recommend Learn Functional Programming With Elixir.
If you are expert programmer, I think Programming Elixir by Dave Thomas Or Elixir in Action by Saša Jurić will suit better for your needs.