The greatest thing about software development (and possibly the scariest) is that it is impossible to learn everything. If you are passionate about this industry, you will never be lacking. However, many developers look at all of the possibilities before them and feel totally overwhelmed, paralyzed even, by all of the choices available to them. Where do I even start? I have heard this sentiment many times. It is quite common, which is good in a a way, I think. Commonality tells me I am not alone, and perhaps some people have done some thinking around this topic.
Yes, software development is a vast, almost infinite sea of technologies and ideas. There is so much coming out at an ever increasing rate, just trying to keep track of what is out there, let alone learning these things, can seem like a daunting task. It seems that by the time we learn something really well, the world has already moved on. In order to deal with this information onslaught, I have developed my own strategies. The process of developing these strategies, I refer to as learning how to learn. And that is what I want to talk about now.
Keeping with the vast, infinite sea analogy, I would say that everyone needs an anchor. My anchor is focusing on principles, not specific technologies. Principles are portable between technologies and form the bedrock of my thinking around software development. Better yet, they don’t change at an alarming rate of speed. They, along with my understanding of them, seems to grow over a considerable amount of time. Rarely, do principles become obsolete. If anything, I see new ideas that build upon, rather than replace, older ideas. If you are looking for a good foundation, here are some great books that can get you started.
Once you do need to focus on specific technologies, however, it becomes important to develop and refine your filters. If you learn to ignore the fluff and just focus on the stuff, you will be halfway there. My rule is learn the general first, ignore the specific until needed.
For instance, I was able to get my first WPF app up and running pretty quickly. Within a few days, I knew most of the major concepts of building a WPF application using Prism. But I didn’t need 3D graphics or animation. That’s a lot of book/blog I didn’t have to read. If I need it, I’ll read it. Otherwise, I usually have better things to do.
I think that having a domain for training is important. Many people write something on top of Northwind…yawn. Or they write a blog engine. I prefer crime analysis and personal training. Pick something that is challenging and will keep you interested as you learn. The important take away is that training needs a context.
Finally, I like to look for places where I can kill two birds with one stone. For instance, take a look at one of my to-do lists. I am about to write a personal training application using NHibernate, ASP.NET MVC, and StructureMap. Of course, this will give me a chance to practice Rhino Mocks new AAA syntax (which I don’t get to do in my current day job). While I am doing that, I will read the StructureMap source. That covers a lot of ground. Instead of approaching my training discretely, I look for finishing moves like this whenever I can.
That’s all I can think of right now. But, before I go, I will say that learning how to learn is a continual process and I am always searching for ways to improve. Also, I don’t think my strategy is necessarily a good fit for everyone - only you know what’s best for you. With that said, I would like to hear back from you regarding your own strategies.