A former colleague pinged me today, asking how do I go about learning new technologies...here's the slightly edited version of the response that I wrote:
Depending on the specific technology, and whether you are going for
depth or breadth, might well change how I would answer that
Here's my general approach though:
1) I usually first read the formal specification, the relevant RFCs, standards
2) I often assemble a Twitter List of the noteworthy companies and
individuals that are contributing or are the thought leaders in that
3) I create a github project as my laboratory for experimenting with
the technology (showing your work, and making it visible helps to
motivate me to keep plugging away). Within the github project - usually
using a naming convention of "Lab.xxxxxx..." I create a README file with links to references, tutorials, interesting articles, blogs, etc.
4) I usually attend 1-2 conferences per year (https://qconsf.com/
is one of my favorites - it gives me the greatest opportunity to hear
about a wide diversity of technologies - from a globally represented
attendee roster. http://thestrangeloop.com/
in St. Louis is another good conf. for leading edge technology trends
that may not be widely adopted yet - but are going to be very popular in
3-5 years - but some sessions can be a bit esoteric.
5) I spend quite a bit of money every year buying books - and not
just on the specific thing I'm learning - but on peripheral areas as
well. My Kindle probably has over 100+ technical books on it - as well
as whitepapers, references, etc.
6) If a technology has a special niche in the area of algorithms, I
usually read 4-6 academic research papers on the relevant current
research for that area.
7) I've found membership in the IEEE and ACM to be very useful to stay abreast of leading edge research and trends.
8) I'm constantly downloading and experimenting with new Open Source software
9) I read a lot of source code for Open Source software projects
10) I usually attend 3-5 tech meetups in the Seattle area per month
11) I have a few small personal software development projects that I
continue to nurture privately, as a test bed for my experimentation
with new technologies - for example, one is a code generation tool that
can be pointed at a database schema and it will generate all of the SQL
stored procedures, base object classes, etc. for over a dozen languages
(~650K+ lines of code generated in less than 90 seconds)
12) Using Coding Exercises, for example, 99 Scala Problems