Several people have asked me recently about what language they should learn first. This article is intended to be a single point of reference for all those conversations, as well as sparking input from other people who know about the subject.
My answer is usually:
- Salary differences between languages are small enough that you should care more about other aspects of the process (e.g. if the boot camp makes guarantees about you getting a job) more than the specific language, but
- Front-end (developing things that the user sees) pays less than backend
- Keep standard 80,000 Hours advice in mind, like that it's better to explore many options in the beginning of your career than optimize for just one
More Detail
Below is a table of programming language popularity (taken from TIOBE) along with data from two salary surveys. You can see that the variance within one language across the different surveys is about the same as the difference across languages within one survey (119 vs. 131/76), which indicates that geographic factors, company size/type, years of experience etc. are probably more of a concern than the specific language. This fits with my anecdotal experience.
The argument for backend development is mostly due to oversupply of front-end developers: there are a lot of graphic designers, artists etc. who learn a little bit of HTML and JavaScript so that they can get a job doing front-end. There’s also some evidence that backend developers get paid more.
The second programming language you learn will be vastly easier than the first, and most developers will switch between languages throughout their career, so you should not feel that this first choice is locking you in.
I've bolded the ones which are most commonly taught as a "first language".
Popularity Rank | Programming Language | Relative popularity | Average salary (Compass survey) (in $thousands) | Average salary (Quartz survey) (in $thousands) |
1 | C | 16.64% | 100 | 90 |
2 | Java | 15.58% | 90 | 95 |
3 | Objective-C | 6.69% | 108 | |
4 | C++ | 6.64% | 110 | 94 |
5 | C# | 4.92% | 92 | 89 |
6 | PHP | 4.00% | 76 | |
7 | JavaScript | 3.63% | 78 | 91 |
8 | Python | 2.61% | 102 | 101 |
9 | Visual Basic .NET | 2.33% | ||
10 | Visual Basic | 1.95% | 86 | |
11 | F# | 1.51% | ||
12 | Perl | 1.33% | 82 | |
13 | Delphi/Object Pascal | 1.15% | ||
14 | Transact-SQL | 1.15% | 80 | 86 |
15 | Pascal | 1.09% | ||
16 | ABAP | 1.08% | ||
17 | PL/SQL | 1.03% | 80 | 86 |
18 | Ruby | 1.03% | 90 | 109 |
19 | MATLAB | 1.00% | ||
20 | R | 0.95% | 90 |
I'd like to add some more information to this.
As mentioned, front-end coders are in less demand and are paid less. There's a very good reason for this... it is MUCH easier to learn. It's best to pick up design ability as well as coding ability if you want to earn-to-give through front-end.
Some of the last languages on the list are for data science programming. While there's crossover applicability of these to regular programming, they are, for the most part, easier to learn and with some great salaries themselves. There's also great demand for data scientists. So don't dismiss R because it's 20th most popular... that also means that there isn't enough supply, and it has the benefit of being relatively easy to learn.
I recommend looking at the momentum of languages as well. One example of positive momentum is Javascript; a number of JS-based frameworks are becoming popular, and it is becoming more and more used for front-end, back-end, and all other aspects of web dev. Python is one that's becoming learned initially more because of its versatility; it's used for web dev as well as data science.