(Although I would personally recommend VSCode now)
One way in is to start helping with supporting an existing plugin by submitting PRs (that’s how I began), starting simple with minor problems and then move on to solving bigger issues and maybe adding new features.
If you have an idea for a plugin or Theme Component that’s reasonably simple then start with that. Personal creative goals can be very motivating.
Don’t bite off more than you can chew at the beginning and start simple as the last thing you want to do is lose motivation: this stuff can be hard especially when you want to make fundamental changes.
Be patient. EmberJS is a particularly tricky animal to get your head around.
My advice would be to start with Theme Components and move on to Plugins a little later.
Always use the huge library of existing plugins and TCs as a help. Perhaps someone has solved something similar previously? How did they do it? Take a look at the code. Always use the standards Discourse core sets. Discourse source is also an invaluable resource.
Perhaps the best advice is: just do it! The only way of learning is to get dirty, really. Don’t be afraid of making mistakes and don’t ever let frustration stop you. Keep on going at it and things will eventually work. Try to work things out on your own as much as possible but you can always reach out to others when you absolutely need to.
My best recommendation in addition to the great ones already noted in this topic is to read through the many themes/components code on https://github.com/discourse and try to understand what’s going on. Clone them, break them, figure out what’s going on. That’s mostly how I learned along with working on little projects here and there.
I see what you are doing there, @pfaffman. That being said, I don’t think you want me cleaning up your code just yet, but I agree that submitting PRs could be a great place to start. First, I need to dig into some of the resources already shared in this thread.
My biggest challenge right now is going to be shifting from my LAMP background to whatever the Discourse stack is referred to. LNPR (Linux, Nginx, Postgres, Ruby/Rails)? Haha.