Coding ain't easy; or at least, learning to code isn't, especially when starting from scratch. It can take years of dedicated work to become a truly good programmer; so is there a way to choose the right language to start from today, in order to get hired in a couple of years?

To find out, I took this question to our panel of resident experts: While we all write, several of us also have coding experience. What ensued was an interesting discussion that you would want to read before embarking on your journey to become a pro coder.

A Method To the Madness?

crazy

This is not the first time we discuss picking a programming language: Back in 2011, we've discussed which programming language you should learn for software development?, as well as which one you should Learn for Web programming.

But this isn't about one piece of advice (such as "go with JavaScript") but a methodology -- something people could use in two years from today, theoretically. How to actually figure out which languages are on the rise? Which code popularity metrics to trust and which to distrust (and why)? What are the best salary projection websites? Is GitHub an indication or not?

For example, you'll find nobody gushing about PHP these days -- but many, many developers are making a good living coding PHP, and it is still the bulk of what's running on the Web. So is learning PHP now a bad idea? (Probably...)

There Is No One Language

choices

This is where James, our resident Web developer and tech guy, stepped in to say this:

Programmers generally don't learn a single language anyway. Anyone who goes the classical CompSci route will end up with a lot of Java, a bit of Haskell, some Prolog if they take a course in AI, some Node if they take a course in start-up engineering, some PHP if they learn traditional CMSes, some .NET if they intern at some worthless corporate office, some JavaScript if they do web design, some C++ if they do game design, and finally some Ruby if they'd like to waste their life away with obscure languages that no one actually uses.

There is no "methodology", and you don't choose a language to learn: it chooses you!

Learning one one language is like eating only digestives for a year when there's a whole aisle of cookies. And seriously, who chooses jobs according to projected salary?

But What if You Don't Learn CompSci?

I replied to James, saying:

Here's the thing: This is not for someone taking the classical CompSci route. Judging by the MOOC explosion and the number of online programming courses, lots of people are picking up coding just from scratch. And when you start like that, you do need one language to start from. Perhaps you'll move away from it later on, but that first language is going to be a critical investment of time and effort -- so it better be worth it.

What resonated most with me is that last little bit he said -- who chooses jobs according to projected salary. I think some people do, but I also think that's not a great way to go about it.

When it comes down to it, people are trying to figure out which language to start with, and the usage that language gets in the real world carries weight in that decision (not just how easy it is to learn - Pascal...).

Pick a Project First, Then a Language

trending-projects

James came back with this:

Alright, perhaps one of the points of this methodology should be: don't have a methodology. When I first came across PHP, it was through WordPress. I had a CompSci background in programming and some web design experience, but I'd never seen PHP before. I learnt it because WordPress looked easy enough, and I wanted to mess with WordPress. Not because I'd looked at a list of trending technologies, or was considering a career move, but because something cool I wanted to know about used it.

If someone was looking to learn programming purely for the purposes of a job, they would fail. If they were looking just because they like the sound of learning how to program something, it wouldn't matter what language they chose as long as it could spark their passion.

Another Reason To Pick a Project First

This is when Simon stepped in with some pragmatic advice:

First and foremost, it depends on whether you want to develop for the Web or "standard" software.

For the latter, Java is pretty good:

  • Simple OO
  • Multi-platform (Linux, Windows, Mac, Android)
  • Similar syntax to a lot of other programming languages (JS, C#).

Can't say much about Web development, although HTML/JS/CSS/PHP/MySQL seems to work for a lot of people. Python, too.

But yeah, the "to get you a great job in 2 years" bit irks me too. Stresses the wrong aspect of learning how to program. Once you can program, it's pretty easy to get the hang of another language.

Getting hired for knowing a specific language is similar to getting hired as a PA for knowing how to handle MS Excel. If that's the main qualification, it's probably going to be a bad job.

Don't Learn a Language: Learn Software Design

software-design

A consensus was beginning to form. Bruce Epper, of MakeUseOf Answers fame, had this to say:

The language itself doesn't really matter. When it comes to programming jobs the most important aspects tend to be understanding basic software design and architecture, the coding process in general, knowing about design patterns, knowing when to use them, and how to apply a specific pattern to the task at hand -- all of which are language-independent. Once a coder knows these, picking up a completely new language is a breeze.

There are even project management, documentation and writing skills that are more important to a programmer than knowing any specific language.

The Base Upon Which You're Building Matters: English or Latin?

This was when Guy stepped in to remind us all that the language does matter, to an extent:

latin

The language itself isn't the most important thing in getting a job, I agree. However, the base upon which you are building does. Since I've done both routes, I'm going to compare programming languages to human languages.

Python appears to be the English of today. More and more, I'm seeing Intro CompSci and programming courses start you out with Python instead of Java, which seemed to be most popular for about 10 years. You can do a lot of what you want to do with Python.

C++ is the Latin of the programming world. If you learn it, you can learn the underlying principals of a multitude of languages and learn them more easily. Python would be a cakewalk if you're well founded in C++.

What's a "Programming Job," Anyway?

It was Matthew's turn now, to remind us all that being a coder can mean very different things for different people:

suit

One thing that hasn't been talked about in any great length is what kind of programming job you'd want.

Are you not too fussed about the perks thrown at Startup employees? Want stability and a decent pay packet, but no equity? Do you like wearing business formalwear? Learn C#, Java or COBOL. COBOL also has the advantage of having every single banking application ever conceived (hyperbole, but you get the idea) having been written in it. With most COBOL developers either retired or dead, there's a lot of demand for COBOL developers with some earning six figure salaries! However, you'll be working on huge, badly-written codebases created over multiple decades. That's not fun.

But what if job security isn't your thing? Want to work on interesting products, but are you willing to chance being out of a job when the business model doesn't work out? I've found that going on (Hacker News) is a surefire way to find out the languages being used by startups. When I interned at an early job, we used a mix of Go, Python and CoffeeScript. Other startups use Rails and Groovy and all sorts of obscure frameworks and languages. Just pick one and you'll find an interesting job somewhere.

New Code, or Old?

Writing new code is a very different experience from maintaining an existing application, as Bruce added:

With your comments on COBOL, you kind of hit on another consideration: do you want to work on new code or maintain someone else's code? This can be a huge item when deciding what direction to move. For smaller projects, maintaining a codebase written by someone else may not be that bad, but I have seen some sections of code where you have several people staring at it for hours asking, "What was this guy thinking?", or where the original programmer was taking advantage of a specific feature or bug in the compiler (that may have been fixed in the current compiler) to accomplish something.

What If You Don't Have a Choice?

Guy came back to remind us all that not everyone has a wide array of choices:

choice

Matthew raises a good question with, "What kind of programming job do you want?"

Oddly, I never really thought that I'd have much of a choice in the matter. I knew I wanted to do web development when I started, having done other programming recreationally. But I figured I better be prepared to take any job I could get, and be willing to learn as I went. Now I'm a jack of all trades, proficient in several technologies -- master of none.

As for figuring out where you want to work, determining the type of lifestyle you want is important. Then look at postings from those businesses that appear to meet your criteria and see what they're looking for in general. Putting together a portfolio of things similar to what they do can be very helpful as well, especially if you don't have formal training in the technologies that they use. Maybe you learned Java in school, but they use C#. So you teach yourself C# and do a few programs with it as proof that you know what you're doing and that you have fluid intelligence.

No One Simple Answer

If there's anything this discussion shows, it's that simple questions don't always have simple answers. And yet, after reading everyone's opinions, I felt much more informed -- they changed my mind.

I'm sure we didn't capture all possible viewpoints here -- that's what the comment section is for. I would be very interested in hearing your take on this question, whether you're a pro coder or not. How would you pick a programming language to get a good job in two years? Is that even a good way to pick a language? Share your thoughts below.