My advice is always to start simple. Work on a simple requirement first and work out how to do it. Then move on to the next.
As far as Theme-ing goes, I would say that most of that will be modifications to CSS. Use the usual resources. Where it’s not you will need to consider modifying templates with jQuery, or at a push overriding templates. Build your own components or widgets for novel use cases and attach them.
The source code is always your friend, look through the GitHub directory structure for discourse/discourse and you will find the different bits of the app laid out. The templates are the easier side to understand I think. If you are not familiar with the Ember directory structure, now is the time to get familiar.