I'm often asked: How do you pick which programming language to use in your development work? It's a fair question, particularly for people with little or no experience in the development field. The great temptation is for me to just say, "use XYZ language." Instead, I think it is better to explain how to think about choosing the language with which to work.
When you're thinking about which programming language to learn, you need to ask yourself the following five questions in order to come up with the right decision for your needs.
Why am I learning a programming language?
If your goal is to learn to program, look for languages that teach basic principles such as Lisp (or Scheme) or possibly Ruby or Smalltalk. There are a number of excellent languages that are specifically designed to teach programming at a fundamental language. You'll want to bypass most of the mainstream development languages in favor of one of these educational languages, and look for one with an associated workbook, textbook, or other training materials that will effectively tutor you.
If you're trying to become a better programmer, one of these educational languages will greatly benefit you as well. Alternatively, you can try one of the nonmainstream languages, especially if it uses a different paradigm than what you're using now.
If you're building a career, then you need to base your decision on market forces. Look at job ads that appeal to you (the type of work, the location, the pay, the experience level needed, etc.). Keep track of what languages (and other skills) those ads mention as the primary skill(s) and that is what you need to learn. If you think that you'll be miserable in that language or environment, then you might need to reevaluate your career goals.
If you just want to have fun or build personal apps, then learn whatever you want!
How do I plan to learn the programming language?
Your plan of attack and style of learning will affect your programming language choices. For instance, if you learn best in a face-to-face classroom setting, you need to make sure that classes exist for what you want to learn. For many nonmainstream languages, even the book choices are poor.
No matter what, you'll want to make sure that you feel comfortable in the online communities for that language. Consider these questions: How do they treat newcomers? Do a lot of questions go unanswered? Is there a good mechanism for turning questions into better documentation?
On that note, is the documentation any good? A poorly documented programming language will force you to count on the community, and an unhelpful community can sink you pretty quickly.
What toolset, libraries, and frameworks support the programming language?
Some people really like working in a specialized IDE; others are perfectly happy in a basic text editor. Whatever your style is, make sure that the tools are available to support it. Even if you like a plain text editor, for example, you'll probably want to make sure that it supports formatting and coloring for your language. Along the same lines, you'll want to make sure that the language's libraries and frameworks support your intended applications. As an example, if you plan on working on scientific applications, you'll want to check out the math libraries to ensure that you won't spend a lot of time implementing the basics of your math routines.
What do I plan on building?
If you have a particular kind of application in mind, it will influence what kind of programming language you choose to learn. Some programming languages are better suited for some applications than others. For example, if you're working on a Web application, you'll want to make sure that your language of choice has the capability to be used in those applications and is designed for that scenario. On a server using the CGI model, virtually any language can be used for development, but you'll quickly discover that some languages are better than others.
Part of this comes down to toolsets, frameworks, and libraries (having to handle HTTP connections by hand is a chore regardless of the language you're using), but the programming language plays a large role in things as well; many development languages have succeeded because of one small feature or a few features that made a particular type of development much easier.
Look at applications that are similar to what you're building, and try to find out what language those developers are using and why they chose those languages. This will give you insight into what programming languages you should learn.
Am I willing to take the road less travelled?
There is the possibility of using a less mainstream programming language. For personal development, this is not a problem, but many development environments view nonmainstream languages as a risk; specializing in one of these languages can restrict your job choices, or your boss may not be willing to allow you to work on a project in that language.
All the same, there is a great deal of value in learning programming languages that aren't as popular. For one thing, you may find yourself on the path to becoming a highly paid specialist consultant. In addition, every language you learn will teach you new things about programming, even if you don't use the language in your day-to-day work.
Learning a new programming language can be a very rewarding experience, but it is important to not waste your time, either. Picking the right programming language for your needs is not always easy, and chances are, any language you learn will have some things that you dislike about it. But with these tips, you should make better decisions about which programming language will meet your needs and goals.
What criteria would you give to a new programmer to help them pick out a language?
Additional TechRepublic resources
- Poll: How did you learn to program?
- Strategies for learning programming languages - what works and what doesn't
- What is your preferred approach to learning programming skills?
- 10 tips to go from a beginner to an intermediate developer
J.JaDisclosure of Justin's industry affiliations: Justin James has a contract with Spiceworks to write product buying guides. He is also under contract to OpenAmplify, which is owned by Hapax, to write a series of blogs, tutorials, and other articles.
---------------------------------------------------------------------------------------Get weekly development tips in your inbox Keep your developer skills sharp by signing up for TechRepublic's free Web Developer newsletter, delivered each Tuesday. Automatically subscribe today!
Justin James is the Lead Architect for Conigent.