You should specialize in application development. A couple of weeks ago, we looked at the pros and cons of specializing as a consultant and how can hurt you long term (see Consulting Consultants: Why Specialization Can Hurt). But after I wrote that I began thinking about my own skill sets and how I can greatly improve my abilities and make myself a better consultant. My conclusion is what we will be looking at today.
In the article I linked above I touch on something. That something was the idea of specializing in a programming language. Because learning one can help you easily learn many and it can keep you billable and relevant as a consultant. There is more to specializing in a programming language than learning more than one. There is the logic that comes with learning how to develop and program applications that can be transferred to other areas and other platforms, services, and architectures.
You see there is a theory (or theories) and practice behind application development that will pretty much never change on a grand scale. The idea of “Object Oriented Programming” and the theories and “best practices” behind it have not really changed over 20-25 years. The concept of requirements building, architect-ing an application, and coding have pretty much stayed the same over the last few decades. Sure there are new theories and ideas but the general rules stay the same. There are different methodologies, concepts, and paths one can take in doing development. Many of these are transferable across languages and remain extremely similar regardless if it is C++, C#, Java, or even Python.
This is why specializing in a language and and application development can give you that specialization “credit” but keep you transferable between technologies. Programming is an incredibly logical process and that process can be applied to anything that requires problem solving abilities. Then on top of that if you understand, lets pick Java, if you need to learn C#, the overall concepts behind application development do not change, just the syntax for developing the logic and algorithms.
I am definitely still of the opinion that you should not specialize too much on one technology and platform because that causes you to (in many cases) want to use that technology/platform to solve all the problems you encounter. I think that a good consultant understands several tools (even if they are not experts on those tools) and can determine the best solution for the problem at hand.
However, I do think there is some value in specializing in a particular programming language (with the intent to learn others) and understanding development concepts, theories, and methodologies. You start with one a single language and then move through the others as you need to. The .Net platform is not always the best solution (neither is Java, Python, or C) but a solid understand of a single language can help you move across others with ease.