(note: inspired by this post at SecretGeek)
(note #2: SecretGeek found this fantastic post by the greatly missed Kathy Sierra)
Anyone who spends 5 minutes reading technology news sites knows that there is FAR too much for any one person to learn (there’s almost too much for one person to be aware of). Between big companies, startups, open source, and research, there are thousands of new products, libraries, languages, technologies, etc every year. Thinking you’ll learn all of them (or even a significant fraction of them) is just madness. So here’s the process I’ve used to evaluate things.
First, I put each thing into three categories:
- Things I’ll definitely learn soon
- Things I might learn later
- Things I’ll probably never get around to learning
These are the criteria I use determine which category something goes in:
- Is this useful to me now? (for day job, startup, side projects, etc)
- How long will it be useful? or When do I expect this to become obsolete?
- How useful is it for the time it takes to learn? or How much bang do I get for my studying buck?
Incidentally, “fun” isn’t on the list, because there are so many options that the ones that look boring to me don’t even register. If they get far enough that I want to evaluate them, they look fun!
So here are some technologies along with the category they fall in and the grades they get on each of the criteria:
- Ruby on Rails – 2 or 3. I don’t use Ruby at work and didn’t choose it for my startup, so it’s not useful now. Despite its current popularity, I don’t think it will be that popular in 5 years and beyond. I think by that point, people will look at it the way RoR fans look at PHP right now. Good bang for the buck though, considering all the resources that have been created around it.
- Python – probably 2. Same as RoR, not used in day job or startup. I do think it will be around and popular longer than Ruby, because it has big, notable corporate users (Google and NASA, among others). I think this is more important to its future than the startups, hobbyists, and consultants that are driving RoR (Python has startups and hobbyists too). Good resources for learning as well.
- Microsoft Robotics Studio – 3. Last year I really wanted to work on Robotics, but I didn’t have any kind of hardware experience, I didn’t have a place to work on it, and I didn’t have extra money to buy parts. While general robotics principles would be useful for a long time, I don’t think MRS will be around by the time I get to work on robots more.
- LINQ – 2. I might end up using it at my day job because we do .Net, but I don’t know when that would be. Lots of people love it but who knows if it will become a big deal in .Net development in general. Also, Microsoft stuff tends to be complex because of the wide range of scenarios it’s engineered for, so I think it would be harder to learn.
- Perl – 3. I’ve head too much about how difficult it is to read and how languages like Ruby and Python are better for scripting. Perl is just something I don’t want to deal with.
Wait a minute, those are all 2 or 3! Where are the 1’s? What do I actually plan on learning?
- SICP – 1. Too many people (really smart people that I respect) have praised this book, with praise of the glowing sort that usually doesn’t come out of their mouths. And it’s almost 30 years old! The top-notch programming techniques
willhave already helped me program better, and the knowledge is so un-specific to any technology that it will be useful for as long as computers need programming. It’s a lot of work to get through a big textbook and 30 hours of videos, but the payoff is huge! - Lisp – 1. Yes, I’ve drunk the Kool-Aid from Paul Graham. Sort of. I’ve read all his stuff saying why Lisp is so great, but I’ve read a lot of other people saying the same things. More importantly, I don’t find the criticisms of Lisp to be that bad. Since I’ve decided to use Lisp for my startup, learning it is of immediate importance to me (although this doesn’t apply to anyone else). I don’t expect it to become obsolete ever because 1) like SICP, the ideas are fundamental to Computer Science and will be around forever, 2) the strengths that other languages have are also strengths in Lisp (meta programming, HOFs, etc), and 3) since Lisp isn’t riding a wave of popularity, its community is sustainable in the very long run
- Artificial Intelligence – 1. Not general intelligence (although On Intelligence is one of the most fascinating books I’ve read, ever), but the kind of smart algorithms for figuring things out about data and inputs. Since the internet gives any program the ability to collect millions or billions of data points, anyone who can make sense of that input stream will have a competitive advantage. On this note, I’ve started working through Paradigms of Artificial Intelligence Programming to get caught up on the last 40 years of work (and improve my Lisp chops), then I’ll move on to Artificial Intelligence: A Modern Approach.
To put this in perspective, this is basically my New Year’s Resolution regarding learning and investment in my skills. It will provide me both immediate and long term benefit, and by studying three inter-related topics, I can probably get as much out of it as I would two unrelated topics. So here’s my reading/working list for the year:
- The Little Schemer
- The Seasoned Schemer
- The Reasoned Schemer
- Structure and Interpretation of Computer Programs
- Practical Common Lisp
- ANSI Common Lisp
- OnLisp
- Paradigms of Artificial Intelligence Programming
- Artificial Intelligence: A Modern Approach
That, my boy, is a mountain of knowledge! Good luck to me in getting through it and making the most of it!
casey says
I did something quite similar starting with the holiday break, when I had a lot of spare time. My list:
1. Haskell. I’ve made several fits and starts in trying to learn it. This time I Got It — I have learned to love the Monad and type system. The libraries seem decent, cross-platform support is good. Its a fun language, and I like the way it makes me think. My first project is a web scraper utility, with other ideas cooking.
2. Scala. This is “Haskell” I can sneak into my day job. I’ve already used it to talk to ActiveMQ, and played a bit with lift & Maven2.
3. Project Euler. I feel the need to get reacquainted with mathematical language and concepts to further my learning in other areas. Some problems have led me to interesting topics on Wolfram & Wikipedia.