With a title like “Programmers should strive to Expand their Knowledge Bases” you’d think I was referring to things like OOP, DRY, and other acronyms. However, I am not. I’m not referring to learning additional programming languages or algorithms. I’m talking about learning things from other domains entirely. For example: science, knitting, cat photography, cat photograph captioning and so on. Honestly it’s a little bit of a weak point for me as well. My grammar is a sore example. Of course, I’m a mediocre-self-taught-programmer, so that is to be expected anyway. First off there’s knowledge you can apply directly to programming problems.
Having knowledge about other fields allows you to more readily solve programming problems that involve those fields. There’s even a term for this: domain knowledge or domain-specific knowledge. You don’t necessarily need to be an expert either. For example, with a base level of knowledge it become easier to get input from experts in a particular domain This is because you already have a base understanding. There are two less-obvious benefits though, and I think they are more important.
First, having a broad base of knowledge to pull from enhances problem solving skills. I don’t have solid numbers to back this statement up though. (This is a blog, not a peer-reviewed paper.) Usually, when confronted with a problem in different domains the manner in which you come to a solution differs based on the domain at hand. More specifically: you think differently. Being able to solve problems in programming often requires you to shift your way of thinking and having more experience approaching problems from different angles can be very beneficial. It can even apply to learning new programming paradigms. I didn’t fully grasp OOP until I considered things in terms of chemistry.
Second, having a broad knowledge base can make it easier to communicate with people of different backgrounds. Much like dealing with experts above, but often a little more general. This is also somewhat tied to the problem solving mentioned previously. When you can shift thinking readily, it becomes far easier to think like the person you are communicating with and explain things with terms or analogies that that person can understand. As a personal example of this: I’ve explained the Linux boot process almost entirely with car analogies to a car guy. I’m pretty certain that had i never taken auto shop, this would have been impossible.
tl;dr version: Learn stuff. It makes you a better problem solver and communicator. Soft skills for the win.