I was able to participate on Proofpoint’s Summer Intern panel discussion today and wanted to share my answer to one of the questions: how do you keep learning. When this question came up, I had the luxury of listening to a few of the other panelists before responding with my own answer which consisted of the following four steps.
(1) Reading Online Community Discussions to Survey Information
At the broadest level, I like to stay abreast of new technologies and events by following topics of discussion. For technology, this tends to focus around sites like Hacker News or HN. HN is especially useful due to the start up company participants on the site because (a) there are so many start ups, (b) they don’t have legacy technolgy stacks to work with and (c) they have to iterate fast and try different things before finding a product market fit or raising their next funding round. These things lead to discussion of many technologies and how successful they are.
(2) Reading Case Studies to Understand Specific Experiences
Once I have an idea of a topic I want to learn, then I start reading articles on it including blog articles for open source projects and reviews for commercial projects. Quantity wise, I spend more time reading about open source projects but there are some commercial projects that I want to get up to speed on.
One recent example is my desire to learn more about organizations using Go in production. After reading around I found the following blog articles of interest:
- The March Towards Go
- Sendgrid: How to Convince Your Company to Go With Golang
- Iron.io: How We Went from 30 Servers to 2: Go
(3) Using Free Trial Software to Evaluate Solutions
After deciding an area of interest and researching it, if there is an interest to learn more, then I start to use the software. For FOSS software, this is as simple as downloading it and installing it. For commercial software, it may mean using trial software or taking classes.
For languages, it is useful to get a proof of concept script running with enough functionality to try out different aspects of the language. As an example, I recently ported a Ruby script of my to Go and got to use many different, but commonly used (for me) aspects of the language. That’s not nearly enough to become proficient, but enough to get a feel for whether to move forward or not.
(4) Taking Classes to Gain Foundation Knowledge
Often times, it’s acceptable to just take a software library or piece of software and use it, but sometimes there is a substantial benefit to understanding the theory behind a solution. Learning the theory behind solutions has been made much easier in recent years by a growing amount of free training that is available from sites such as Coursera and Udacity as well as software and hardware vendors. I do sometimes pay for classes but I do try to limit that given the good options available. Some free classes I’ve taken recently include.
- Coursera Machine Learning Class by Andrew Ng, Stanford: This is one of the most popular MOOC classes for machine learning and I found it provided a worthwhile introduction to the math behind some of the machine learning libraries I’ve been using.
- IBM Netezza Technical Mastery Test v1 (M87): This is a free class offered to IBM partners on using the Netezza data warehouse system. This was a great class that taught the fundamentals of Netezza and how the Postgres database was finetuned to support the Netezza hardware configuration of snippet arrays and FPGAs. A wonderful surprise (for the Sales Engineer and business person in me), was that these free classes are for business partners so they also include training on the benefits of the solution and how to sell it.
This is my system for learning and I hope it was useful for you, but most of all, I found it to remember that most successful people have systems and use those systems to make decisions and prioritize their time. So feel free to use and adapt the above for yourself or create your own system to learn effectively with limited time.