New programmer here. What is the best Elixir codebase to study?

One of the tips I got from a programmer I look up to is that they studied a codebase and reverse-engineered how they made each decision.

In your opinion, what is the best Elixir codebase to study and why?

2 Likes

For the essentials you can take a look in to the Elixir Github Repo.

Or take a look here: Elixir Examples - Feedback Wanted

Or, if you also interested in Phoenix:
Are Hex.pm and Constable code bases considered good practice examples for building applications? .
Phoenix (wiki) section “Example Applications”

Good example project using Ecto.

6 Likes

Take a look at Captain Fact which is an elixir umbrella app in production.

3 Likes

For a full featured app there’s ExVenture - Text based MMORPG I just heard about it thanks to the Elixir Wizards - Betweenisode.

4 Likes

Thank you all! The ExVenture was more what I was thinking off… I’m trying to study good patterns for building Elixir Phoenix apps.

Please keep your suggestions coming!

2 Likes

I will go slightly out of topic here. If you’re just starting out I would suggest that you go for the documentation; Elixir docs work like a really well explained guide from which then you can branch your own patterns.

The Docs

Just in case you haven’t tried the “embedded docs” try to use the h function in iex you can “query” any module or function in your project:

shell$ iex

Interactive Elixir (1.10.2) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> h Enum

                                      Enum                                      

Provides a set of algorithms to work with enumerables.

Supervision Trees

To understand how a Phoenix (or any) application is structured I would suggest that you understand how “Supervised Applications” work. You can quickly create one with:

$ mix new game_of_life --sup

The --sup option will generate an additional application.ex file. Then go and read the docs for GenServer, Supervisor, Application (which you can also check with h Genserver at iex).

Phoenix Generators

These generators are really well thought, for a very classic MVC style try:

shell$ mix help phx.gen.html
shell$ mix help phx.gen.json

Run a generator and try to follow how all your web directory is intertwined; you can start with the the endpoint.ex or your router.ex then go to specific views or controllers; a lot might seem hidden or “magical” because Phoenix leans a lot of boilerplate into macros, but the project structure gets to become very simple with the pass of time :slight_smile:

Be sure to check the docs on Phoenix and Plug.

2 Likes