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 |
As someone currently in the process of learning programming here are a few thoughts on my attempt at learning two of the bolded languages, Java and Ruby:
I'm currently working through The Odin Project, which has a backend focus on Ruby, and I'd highly recommend it. I'd also recommend Peter's guide to TOP which I've found very useful which includes some time estimates, some additional resources and some things to learn after you complete TOP. Perhaps the biggest plus to TOP for me is giving projects of the correct difficulty at the correct time so that they are challenging but doable. Another of the biggest benefits of TOP is the sheer scope of the resources already collected for you. Also Ruby is far more intuitive than Java.
Before starting TOP I started learning programming by attempting to learn Java on my own without much structure. However, going on my own I'd often spend time attempting to track down a good explanation for topics. There was also the issue of not knowing what was a logical path to take to learning and I think I took some major false steps. The resource I found most beneficial during that time were probably the free courses at Cave of Programming which covered a wide range of topics but had the huge downside of being somewhat dated video tutorials. Other than that I didn't find lots of free resources to help learning Java but there are some pretty cheap stuff on Udemy and a subscription to Lynda could be a good investment as well.
Of course, a huge caveat, I am a sample size of one who had no experience at all with programming before starting with Java. People with different backgrounds may have very different experiences.
Epicodus put their entire Ruby/Rails program online for free here. I don't know enough to judge the quality, but it might be useful.