Glad to hear. This is just a reflexion of how awesome this book has been at teaching the fundamentals.
Great job Sasa.
I am new to Elixir, so any clarifications would be greatly appreciated.

For section 3.4.2, in the "Practicing" section, the range/2 example, wouldn't it be better to do a recursive tail from the 'to' to the 'from' value, as opposed to what was posted on that relies at the end on 'Enum.reverse'? Here is what a potential solution would look like:

def range(from, to) do
  generate_from_range(from, to, [])

defp generate_from_range(from, to, list) where from > to do

defp generate_from_range(n, n, list) do
  [n | list]

defp generate_from_range(from, to, list) do
  generate_from_range(from, to - 1, [to | list])