Great job! Thanks for writing up and creating the book to share with the community. Is it alright if I post some feedback here? Tip #7 On Tip #7 you may want to include some other common "type checking" guards related to strings like is_binary and is_bitstring ? The Kernel section of the Elixir docs should have a more complete list of guards: https://hexdocs.pm/elixir/Kernel.html#summary Tip #11 You may want to consider including List.first() in addition to hd() ? The key difference is how they handle an empty list. List.first([]) will return nil hd([]) will raise an ArgumentError Tip #56 Another great tip. Have you considering including Enum.into/2 as well? It's handy to convert things between lists of tuples, keyword lists, and maps: [{:a, "Jane" }, {:b, "John" }, {:z, "Peter" }] | > Enum.into( % {}) It also works the for converting maps into keyword lists using |> Enum.into([]) Tip 87 Appears to be a minor typo, scape should probably be escape ? Tip Suggestions Two of my favorite standard library functions are Kernel.get_in/2 and Kernel.put_in/2 . When I was new to Elixir I remember writing my own recursive get and put functions until someone pointed out these built-ins. Summary Great work and a great read! Thanks for putting this together. I definitely learned some new things along the way. Hope the feedback I posted above comes across as intended - supportive with positive intent. You and this work is appreciated 🎉