Every year, I become a bit more accepting of my own ignorance.
I decided a long time ago that I wanted a career in which I could continue to learn and to expand my knowledge. Software development affords me that opportunity because it is such a large field and because it changes so rapidly.
It is conceivable (though extremely unlikely) I could learn everything there is to know about software development and find myself completely caught up with learning for one day. If that miracle were to occur however, I would go to bed that night and awaken to discover that things had been invented while I slept. And I would once again be ignorant about some things.
But that day will never come. There is an infinite amount of knowledge to be acquired and a finite amount of time in which to learn it. The ratio of what I know to what I don't know is likely to remain small.
Yesterday, I had lunch with a guy who knows a great deal about Windows Presentation Framework (WPF). Since I am extremely ignorant about WPF, it was a good opportunity to learn some new things. But WPF contains so much that we could probably have lunch every day for months and I would still only scratch the surface of this framework.
I want to know everything but I realize and accept that I cannot. So what's the answer?
The answer is in learning how to find the answers. "I don't know" is an acceptable answer to any question, but "I can't do it" is not. As new challenges and problems arise, we need to be able to figure them out - to find the answer. Usually our experiences only get us so far. We need help finding answers.
Certainly the World Wide Web helps. Many times, when faced with a problem, I've discovered an article or blog post written by a developer who faced and conquered a similar problem. Search engines such as Google allow us to find these solutions more quickly.
Books and magazines help as well. They provide knowledge based on the experiences of the authors. So do Classes and conferences.
I've found one of the best ways to improve my knowledge base is to build a network of smart people on whom I can call for tough questions. I try to reciprocate as much as I can, but luckily software developers tend to be very generous with their ideas.
So the conclusion I've come to after all this introspection is that what we know is not nearly as important as what we are capable of finding out.
And that's encouraging for a guy like me who will never know it all.