Wednesday, May 18, 2016

2016-05-18 Wednesday - My Protocol for Learning New Technologies

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 question. 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 given technology 

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
http://aperiodic.net/phil/scala/s-99/

No comments: