Learning Elixir Phoenix and Ash

Any recommendations on good resources for learning Elixir, Phoenix, and Ash?

3 Likes

Hey, man! I’m studying Elixir in Grox.io (https://grox.io). I think it’s helping me a lot since I have no background in programming.

2 Likes

I have gone through/am going through this. To be honest, it isn’t easy. The Ash documentation can be a bit spotty, although the Phoenix integration stuff is pretty good.

One thing I found helpful (if a bit intimidating) is the source for the AshHQ site. Reading it is eye opening, because it illustrates how the creators intended things to be used.

I keep thinking we need a book on the subject, but things are changing so quickly it would be difficult… :frowning:

4 Likes

Ash 3.0 will mark a significant shift towards DX and documentation :slight_smile: We’re going to be reexamining the onboarding, documentation, all kinds of things. We have a lot in the works on this front, just a small bit of work left to do to finalize the feature-set of 3.0, then we can refocus.

4 Likes

Thank You for the work on Ash… definitively something I need to use more

2 Likes

Thanks for the reply, @zachdaniel I really appreciate all your work and I think Ash is really cool.
If I may be so bold, I think part of the struggle is that the descriptions of Ash and its features feel super abstract, so it’s kind of hard to even try to describe it in terms that are easy to relate to. I recommend trying to give more concrete examples of some practical use-cases.

I really understand why you might want to keep things higher level because a huge part of the draw is the broad versatility of the tool, but without some concrete examples to grab onto it becomes really hard to understand the advantages it brings and that makes it really hard to form a mental model that makes using it feel approachable. I think some story telling around some times where the advantages of Ash over “not ash” really reveal themselves would be really fantastic and would help craft a narrative that can be understood.

1 Like

Absolutely, great points :slight_smile: I think the number one thing we’re missing is a “cook book”. i.e: “use an input parameter to make a call to an external service and use the result as part of your action”, or “methods of tracking versions over time”, things like that. As for expressing the “how would it work without Ash”, I think that has to have its own place, lest the documentation starts feeling like a sales pitch. Ideally we’d “sell” people on the framework separately. Something like articles on “how ash saves you time” and “Doing X with or without Ash”.

Great feedback, definitely the kind of thing we want to incorporate into the new documentation. We also have some other things in store along those veins that we can’t quite talk about yet :slight_smile:

2 Likes

I reckon @zachdaniel would make a great PragProg author Dave - he spends quite a bit of time helping people with their Ash questions on the Elixir Forum and is great at articulating his answers in an easy to understand way :smiley:

With regards to learning Elixir and Phoenix, check out the learning resources tab in our portals:

And forum:

PragProg books (24 so far!)

https://forum.devtalk.com/search?q=%40PragmaticBookshelf%20tags%3Aelixir

Manning (currently just 1 has been added to the forum)

https://forum.devtalk.com/search?q=%40manningbooks%20tags%3Aelixir

1 Like

Thanks for the recommendations, @AstonJ
I guess, to be more specific, I’m really looking for opinionated guidance on how to integrate Ash with Phoenix from the start of a project to maximize on the benefits it brings from the get-go. I’d love to have my hand held through the creation of a project with this kind of structure, so I have a “typical” web app at the end that was built with Ash as sort of a first-class citizen, so that not only do I have a web app, but I get a the admin interface, and all the other Ash goodies like filtering, sorting, pagination, calculations, aggregations, authentication, authorization, GraphQL and JSON apis, multi-tenancy, etc. done the Ash way.

The thing is that I want my cake and to eat it too. Meaning, I want all the great things that come with Elixir, Phoenix, and Ash and their incredible versatility, but I also want a tight opinionated structure that I can lean on to walk me through how to get from point A to point B for so many of these common features. I want to follow a “way” to do things so I can focus on building product instead of making decisions about how I should construct the product, but I still want the flexibility to go my own way when I need/want to.

I think these tools are totally capable of providing me with what I want, but I need someone with the confidence to say “if you are going to use these 3 tools together, here’s the best way to go about structuring your code and here’s the best mental model to get things done for around 80% of your project”.

tagging @zachdaniel since I’m hoping he is the hero I want if not the hero I deserve

2 Likes

Honestly, there isn’t any comprehensive hand holding guide out there that I know of. There are some materials here https://elixir-phoenix-ash.com, and we have various tutorials for setting up individual components. There are some example apps linked from Ash Framework as well. However, the lack of this kind of documentation has been expressed by many as the biggest issue with using Ash, and we’re actively taking steps to address it currently :slight_smile: But nothing that you could use right now or in the next few weeks. My best advice would be to participate with the community, either in our discord server Ash Elixir or in the elixir forum Ash Forum - Elixir Programming Language Forum.

2 Likes

This is not what you were asking, but it might help in your situation since you did not get the answer you wanted.

There are two things you want to learn about Ash and Phoenix:

  1. How to use it.
  2. How it so well that you can write ideomatic, maintainable code that you can build on for many years without having to heavily refactor or re-write it.

These are two separate things. I would first tackle the first one. Build something to the point where it works, if it’s worth doing, it’s worth doing poorly. And then get better at it. This is how we all learned to walk, talk, read, write, code.

Also, if you want to get in this early on technology, be willing to learn slower than you would have if you were learning an older thing with more resources available.

1 Like