Hope I am not too late here. Note that I am not only talking about learning resources here but possible BEAM / library improvements.
Two general points that I can’t help but notice:
Deployment, as already mentioned. We either need a de-facto singular solution with configuration options to satisfy the different needs the various projects have, or we need complete step-by-step tutorials that are kept up-to-date.
We need some form of strong static typing contracts. I am not saying it has to be included in the languages – it already has been proven impossible by the process inbox mechanism – but some sort of contracts (textual, or Erlang / Elixir DSL terms). They can be reused for a number of purposes:
dialyzer checks with contracts.
Ecto schemas and validator functions (including for required fields).
ExUnitProperties property tests.
Absinthe types (which in turn can reuse the produced
defguard definitions as well?).
- …And maybe some sort of a generic validation mechanism. What I find particularly worrying is that many people seem to roll their own validation libraries – this to me indicates that the community is clearly divided on this topic and will hugely benefit from some standardization. (I quite like
Ecto's way of doing things though; I do not see the benefit in further fragmentation in this area.)
I am currently toying with the strong typing contracts for a few hobby projects of mine and already have preliminary successful results. So far what I do is very crude and dumb but it seems to produce
Ecto schemas and
ExUnitProperties property tests just fine.
Nobody is asking for the BEAM to become strongly statically typed (at least not until future improvements move this idea back into the realm of possibility). I do believe that some sort of strong static typing contracts are necessary for the future of the BEAM however – especially having in mind that they can be reused for a number of purposes which will hugely benefit a lot of projects where programmers have to manually keep Dialyzer checks /
Ecto schemas /
defguards in sync.