@badlydrawnrob I feel your pain.
A few high-level thoughts based on your question:
- It’s probably better to attack your problem head on rather than indirectly. For e.g. don’t read “Functional Programming Made Easier” and then try to transfer that knowledge to Elm, instead try to learn from Elm specific resources. Try one of these Learn Elm.
- Don’t try to know or understand everything before starting to build. Learn a little, build a little, repeat. For e.g. I started by reading https://guide.elm-lang.org/. Then, I picked a project that wasn’t too much of a stretch for me to build and tried to apply the knowledge. One of my very first projects in Elm was GitHub - dwayne/elm-todos: An Elm implementation of the TodoMVC's to-do list web application.. Why? There were already a lot of existing implementations I could learn from after trying to build it myself.
- If you’re trying to learn to do specific things in Elm then you don’t need a real-life problem you just need a contrived problem that allows you to practice those skills. Only build out as much as you need to understand how to solve the specific thing you’re trying to solve with Elm.
- Your HTML/CSS background will help you tremendously when it comes to building Elm views. That’s something you can lean into to start reaping the benefits of Elm early on. Here’s a short preview of my process for building Elm web apps: design, prototype in HTML/CSS, translate to Elm views, add business logic. For the design part, I usually don’t do that myself. When learning I use existing designs and for work I use a designer. For e.g. when I wanted to learn about handling animations in Elm I used the existing design for 2048 so I could focus on the other parts of my process: prototype in HTML/CSS, translate to Elm views, add business logic.
Here’s how I did it. Be forewarned, my process requires patience.
- As I said, I started by reading https://guide.elm-lang.org/.
- Then, I built a few projects to practice what I had learned.
- Todo MVC
- freeCodeCamp’s Front End Development Libraries Projects
- A non-animated version of 2048 which I talked about here.
- My initial implementations of those projects above were nowhere near the latest polished versions you see when you go to those links. I had more learning to do. So I read Elm in Action and I started reading other people’s Elm code to see what improvements I could make to my now growing collection of web apps.
- At this point I started getting more confident in my ability to use Elm to build small web apps. I didn’t know how to build reusable views and SPAs.
- For the reusable views I studied the work Evan did here: GitHub - evancz/elm-sortable-table: Sortable tables for whatever data you want to display and applied it to GitHub - dwayne/elm-rater: A reusable rater for Elm..
- For SPAs I built GitHub - dwayne/elm-conduit: Conduit, an Elm SPA for RealWorld's Medium.com clone..
- I think you’re getting the point. If you’re willing to put in the work and understand that learning something new takes time to get highly skilled then you should be fine.
In conclusion, if I were starting to learn Elm now I’d do pretty much the same thing. There are newer better resources, for e.g. Frontend Mentor, comes to mind but the approach would remain the same, i.e. learn, build, repeat.
P.S. As for getting a mentor. I think the Elm community consists of really thoughtful and helpful people that the #beginner channel on Slack is all you’d really need. Start working on something and when you hit a dead end reach out for help. If after a few tries you’re not getting the help you need then reconsider.