A question that I frequently see in technical forums and other places that programmers congregate asks for guidance regarding which programming language that someone just starting out in software development should learn first, or specialize in. Although it is asked in earnest by novice programmers hoping to mine the collective experience of the veterans, such subjective questions on religious issues are not likely to garner useful or consistent answers.
It’s like asking a group of people about their opinions on abortion. The issue is so polarized that you are likely to get a fairly dogmatic answer that reflects the worldview of the person answering without much context, at least not any context that integrates more than one ideological view.
How NOT to select a programming language
First, let’s get some of the WRONG reasons out of the way for choosing a language to specialize in. Almost every time this question comes up, the person asking either implies or explicitly specifies that the criteria they are most interested in are (A) earning potential; and (B) employment trends that indicate the marketability of the skill.
Don’t select a language based on earning potential
It is true there exists disparity in the average salaries of programmers based on the language they use. Aside from the ~$20K disparity for VB.NET, that I think has more to do with the baggage of the Visual Basic name than the real comparative value of those programmers, most of the popular languages are averaging within $5K/year of each other according to the numbers I found on indeed.com (click image for more detail) and there have been several lead changes over the last few years.
It is also important to consider that salaries tend to spike for technologies as they near obsolescence because it gets harder to find candidates with experience in those technologies and are willing to risk sitting in the COBOL chair when the music stops. I think the next major victim of this will be C++, but not for at least another decade or two.
A more important consideration is that these salary numbers are just averages and should only be used to get a general picture of the market for various skills. In my experience, the level of experience and competence in a particular language is more deterministic on salary than the choice of language itself.
The premium for a programmer in their first job out of college in C++ might be tempting, but I have observed that discrepancies based on specific languages tend to converge over the course of a career and are much less pronounced for veteran developers. As such, it is probably more useful to focus on mastering a language than picking the right one.
Don’t select a language based on marketability
Looking at the number of available jobs is perhaps the worst way to pick a programming language. This field changes too quickly for it to be wise to make long term decisions on short term trends. There are numerous examples of labor markets glutted with people who embarked on a career path because of a shortage was that drove up salaries when they started college. By the time those people graduate along with the 75% of their class who got the same diploma, the market once strapped for talent became excedingly competitive and consequently less desirable.
How to select a programming language
This is the easy part. Pick the one you like best! You are far more likely to invest the effort required to master a language that you pick by preference than one selected for purely monetary or competitive reasons. That said, the language you select shouldn’t win by default, but rather should be selected from a pool of at least 3 languages for which you have had some exposure:
- Still in school? Try to select courses that give you exposure to several programming languages and at least two platforms (Windows, Apple, Unix, etc.) You can hedge your bet by learning C++ which is extremely similar several other languages and will reduce your learning curve, but don’t use that as an excuse to learn just one language.
- Early Career Programmer? At this stage of your career, it is fairly safe to make a major platform shift when taking a new job. Employers tend to be more forgiving on lack of experience for a specific language on entry level positions if the candidate can demonstrate competency at programming in general.
- Tenured Developer? This is a much tougher situation. At this stage of your career, a lot of your value is often built upon experience in your primary language. Making a jump, for example from Java to C#, is likely to set you back a few notches on salary because of your relative inexperience in the specific language.
What types of projects do you want to work on?
Another factor you should be aware of, is that your choice of language is going to play a big role in the types of software development projects you will work on. The following are gross over-generalizations, but should give you a rough idea of the most common projects associated with each language:
C++: System Programming, device drivers, computer science-y projects.
Java: Commercial Software targeted for Linux and Windows as an afterthought, Web development.
C#: Commercial software targeted exclusively to windows, Web development.
VB.NET: Internal Development, Systems Integration, Web development.
Visual Basic 6: More likely to involve commercial software development than VB.NET, but mostly maintenance work on legacy/cash-cow systems.
Ruby/Perl/Python: Scripting, Web development.
Although Hollywood likes to lump us into broad stereo-types of nerd or hacker, depending on which way the pendulum is swinging about how hip it is to be a computer guy, we know that there is a rich diversity of subculture among us that don’t automatically co-exist peaceably.
The choice of a programming language is a lot like picking a table in the high school cafeteria. It will label you and go a long way towards determining what type of people you will have to put up with all day. I’d suggest familiarizing yourself with the culture of the language(s) you are considering through newsgroups and user groups before making a decision on a language.
Still can’t decide?
Is it all the same to you? This isn’t a good sign. If you don’t have a strong opinion about such a critical aspect of what you intend to do for a living, I’d question whether you made the right career choice to go into this business in the first place. Don’t you know there is a platform war going on out there soldier? Pick a side, get out there, and fight!
You really can’t go too horribly wrong on picking a language unless you select one on the verge of extinction. It may be slightly easier to make a little more money or find a job more quickly with some languages, but no matter which you chose, you will eventually find work and at a good wage if you invest the time to master your craft.
The bottom line is that you should follow your bliss when making any career decision. You are simply going to spend too much of the prime years of your life at work to do something you that don’t enjoy.