First of all, I'd opine there is no "one best way"
because the learning experience is very personal. However, I can tell what
works for me and hopefully for many others.
I do three distinct
activities when starting to learn a domain. These are not sequential but rather
intermingled.
First, I give a novel
read to the archetypal "The XYZ Domain" book. (Each domain has one,
which shouldn't be hard to find.) By "novel read" I mean a
cover-to-cover sequential pass (the same way one would read a novel) with no
attempts to use a computer, take notes, read out of sequence, or do exercises.
I just read the book to get a level of understanding of domain's overall look
and feel, overall model, and important concepts. The novel read helps actual activities
by imbuing the reader with the general mood of the domain and a passing
familiarity with the main notions involved.
Second, I practice about
the domain. This is the one step that really has no substitute. Hopefully
within the confines of an interesting small area, getting some work done in the
domain is at the same time rewarding and instructive.
Third, I read application
of the domain - ideally good quality application composed by the most prominent
proponents of the domain, such as the implementation of the standards of
popular applications. While doing so, I pay attention to the idioms and good
styles that the domain espouses.
That should cover it.
One wonderful thing about learning a new domain is seeing how classical,
immutable good-to-have principles (such as modularity, separation of concerns,
information boundaries) get reflected in that particular domain; the learner
gets good reinforcement and further understanding of these principles (or
sometimes, sadly, an equally informative negative nudge when the domain is
lacking). Another thing, even more inspiring, is to discover how the particular
ethos of a domain creates its own ecosystem - good idioms, best uses,
expressive constructs.
Once you are over the initial hump, the best way to continue
to learn is to find someone to pay you to create solutions in that domain. The
final step to mastering a Domain? Teach someone else how to be effective with
that Domain.
Write a blog article (and don't hesitate to delete it if you
don't think it rises beyond what has been written before). Give presentations
in some organization. Maybe even write a book. But don't call it
"Mastering Domain X in 3 Years" :-)
