Metaprogramming in Elixir
I think that the metaprogramming situation is a little problematic in Elixir. Elixir makes heavy use of macros in basic libraries like the Phoenix or Ecto frameworks that are used by more or less everybody.<p>I understand that macros are useful to build a DSL for a specific project but using macros in basic libraries like this leads to &quot;way too much magic&quot;: Trying to understand (or somehow extend) Ecto is not really possible for all practical purposes and following the control flow in Phoenix is like a maze because of all the macro substitutions. This also leads to cryptic errors where you get an error in non existant lines of code.<p>This heavy of macros is my main complain about Elixir and I think it&#x27;s one of the main problems that new people 
 face when trying the language resulting in either not using it at all (or if they start it they will abandon it).<p>Finally, I understand that using macros in these libs allows for much more compact (and maybe beautiful) code, however I will always pick a more verbose (but less magic) version of this if I had the choice. I think this is the case for most programmers that want to use a language as a tool to do their job.