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 |
Less Wrong thread. I still advocate learning Python; it's an OK or good choice for almost anything you'd want to program, and I think its simplicity and readability mean that it will give you the best conceptual foundation out of anything out there. I listed a bunch of resources on learning Python in this post. They're a bit deeper and more conceptual than the resources you'll see on learning Ruby, which is a good thing because it will differentiate you from all the Ruby web development types and give you the opportunity of becoming a backend developer, which has higher salaries and barriers to entry (and is a better fit for someone who has more of a traditional math/engineering mind since it's less forgiving of mistakes and has more challenging mathy engineering problems). If you're sure frontend web development is all you want to do or you have some cool frontend thing you're inspired to make, I guess JavaScript is fine.
I have also found Python to be very useful. I learned through Udacity's Intro to Computer Science course, which was really user friendly.