One of the worst things that can happen to you professionally is stagnation. You know what you are doing, you know how it works, and you can coast along very easily. Unfortunately, there is the old adage, "it isn’t what we know, but what we don’t know that is going to hurt us. It is what we don’t know that we don’t know that is going to bite us in the end."
One of the reasons that I have routinely been going out and searching for difficult code bases to read has been to avoid that. I know that I don’t know a lot, I just don’t know what I don’t know. So I go into an unfamiliar code base and try to figure out how things work over there.
I have been doing that for quite some time now. And I am not talking about looking at some sample project a poor schlump put out to show how you can do CQRS with 17 projects to create a ToDo app. I am talking about production code, and usually in areas or languages that I am not familiar with.
A short list of the stuff that I have been going over:
- CouchDB (to learn Erlang, actually, but that got me to do DB stuff)
- Mass Transit
- Hibernate Search
Those are code bases that do interesting things that I wanted to learn from. Indeed, I have learned from each of them.
Some people can learn by reading academic papers, I find that I learn best from having a vague idea about what is going on, then diving into the implementation details and seeing how it all fits together.
But the entire post so far was a preface to the question I wanted to ask. If you are reading this post, I am pretty sure that you are a professional developer. Doctors, lawyers and engineers (to name a few) have to recertify every so often, to make sure that they are current. But I have seen all too many developers stagnate to the point where they are very effective in their chosen field (building web apps with jQuery Mobile on ASP.Net WebForms 3.5) and nearly useless otherwise.
So, how are you keeping your skills sharp and your knowledge current? What have you been learning lately? It can be a course, or a book or a side project or just reading code. But, in my opinion, it cannot be something passive. If you were going to answer: “I read your blog” as the answer to that question, that is not sufficient, flatterer. Although, you might want to go a bit further and consider that imitation is the sincerest form of flattery, so go ahead and do something.