Thursday, October 3, 2013

What's the Best Way to Learn a New Domain?

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" :-)