How to know if you're learning the right programming language

It’s a question more and more people are beginning to ask themselves: Which programming language should I learn first? With hundreds of options to choose from, it is understandably easy for beginners to get overwhelmed. How do you know if you are learning the “right” language? How do you know if you are heading down a path that will give you a foundation to land a great job in the future?

Despite all the noise and nuanced opinions you’ll read about what your first programming language should be, the best answer these days is simple:

I know. I know. I’m supposed to caveat my answer to this question with “If you like X, then try Y” or “If you are thinking about A, then try B.” Those kinds of caveats come later. For now, let me back up and explain why JavaScript is the winner.

I first learned programming in elementary school via a Scratch-like language called Logo. After I was taught algebra in junior high, I learned BASIC, which introduced me to, well, the basics. In high school, in between programming silly games and animations on my TI-83 calculator, I learned Pascal in computer science class.

Even though Pascal was interesting, I was discouraged by its lack of obvious real-world applications. Even though I tried to make a comeback by learning C in college, the biological sciences had already taken a firm hold of my interest. I didn’t come back to programming until grad school, when I learned Ruby as I began building web apps on the side and needed a scripting language to efficiently work with data in my research.

I didn’t fully realize how remarkably important JavaScript was until many years into building web apps. As web browsers became increasingly powerful and users demanded more desktop-like experiences, JavaScript became even more essential for web developers.

These days I recommend that students first learn algebra well (teachers, this is incredibly important!) and then jump straight into JavaScript. This combination allows students to learn the fundamentals of computer science and how to begin writing software, and it helps that JavaScript connects to plenty of real-world applications (web browsers, web servers, robotics, and more).

Ok, What’s Next?

From here, what you should learn depends on what you want to build. If you’re not sure, try experimenting with each category below and find something you enjoy.

If you want to write code for something other than web or mobile applications …

… then your next language should be Java or C. (Java is also used by web and mobile developers, so if you change your mind later, you can easily switch over).

Java, not to be confused with JavaScript, has become the standard programming language in introductory computer science sources in colleges around the world. It is a heavyweight, broadly adopted, object-oriented language that can be used for almost anything. Once you have a foundation in Java, continue forward with Groovy, Scala, and/or Clojure to build out your arsenal with modern-day scripting and concurrency-optimized (i.e. performs well at scale) languages.

C, on the other hand, is one of the most widely adopted languages of all time and is the foundation for most operating systems and higher-level languages used today. You should learn C if you want to be interfacing more with hardware and/or need to be at the cutting edge of computational optimization. After learning C, you should learn C++, which will give you even more appreciation for C, allow you to build even more amazing software, and set you up well to learn other programming languages.

If you want to build mobile apps …

… then, in light of Apple’s latest announcement and especially if you’re just getting started, you should begin learning Swift (within Xcode 6, currently in beta).

If you’d prefer to start with Android development, then you’ll want to dive into Java, described above, which also gives you plenty of options for other types of software development as well.

If you want to build websites …

… then for now you can skip Java, C, and Swift and dive right into HTML and CSS. Learn how to build clean user interfaces (UIs) in a web browser as you continue to write JavaScript to enrich user experiences (UX).

If you absolutely love doing the layout work, and especially if you have strong visual design skills, then you should seriously consider laser-beaming your efforts toward becoming a “Front-End UI/UX Web Developer.” You will need to learn CSS extraordinarily well (including, ideally, a CSS-extension language called Sass). Your JavaScript and HTML will also need to follow suit and be equally as strong. There are shockingly few people who can design fantastic UIs/UX in web browsers, so if you choose this path and do it well, everyone will love you.

However, if you want to dive more into the how-to of bringing lots of data into your website (i.e. you are not satisfied with WISIWIG platforms like Tumblr/SquareSpace, or off-the-shelf Content Management Solutions like WordPress), then you are heading in the direction of becoming a “Web Developer,” and your main options these days are Java, C#, Ruby, Python, and/or sticking with JavaScript. Each language has a variety of web development frameworks built on top of it; which one you use depends on a ton of different factors that I won’t get into here. The language you pick will then teach you how to work properly to store data in databases and use languages such as SQL.

Java has a well-established community and, as I mentioned above, has options to do pretty much everything. It also puts you ahead of the game if you want to eventually write Android apps (which are built using Java).

C# (pronounced “C sharp”) launches you into the Microsoft world, which — as you likely know — is a big world and has plenty of options for web development, especially within the .NET framework.

Ruby is much easier than Java or C# to get into, but it narrows your scope to mainly web apps and miscellaneous scripting tasks (although not exclusively). Ruby is famous for bringing “ease through conceptual elegance” and if you see yourself working for startups, or building one (or five) of your own, Ruby on Rails is a great option. I write with Rails and JavaScript on a daily basis and absolutely love it.

Python gives you everything Ruby does, plus a long-standing set of tools/libraries for more academic and scientific applications. The slight “cost” of this robustness, however, is that it is arguably less easy to learn (which isn’t necessarily a bad thing). Still, the language prides itself on bringing “ease through consistency.” The Python community is undeniably steady, which is extremely important when deciding what programming language to learn.

Finally, sticking with JavaScript to also do your back-end work is growing rapidly in popularity. Web apps are increasingly JavaScript-rich, which means all web developers need to be proficient at it. This is starting to create a natural unity and efficiency in the industry because professionals are able to write “full-stack” in a common language.

Whatever path you choose, start writing your own software as soon as possible

Too many beginners get stuck following (and getting frustrated with) tutorials. It’s easy to copy and paste someone else’s work and not have a clue what is going on under the hood.

The best solution to this problem is to think of an interesting project to work on and get after it. If you want to use an Arduino to build an interesting sensor or robot, go for it (it will force you to learn C/C++). If you want to build an app for your iPhone, then think about exactly how you want it to look and feel, and use tutorials and online resources to help you hook it up (for this, you’ll need to learn Swift). Or if you want to build the next awesome web application, work to make it look exactly how you want it to in the web browser across various devices (which involves HTML and CSS). From there, to bring it alive and give your users the ability to add, modify, and view lots of data, you’ll need to learn a web development framework (which will force you to learn its underlying language).

Finally, writing code is much more of an artistic craft than most people realize. It takes a significant number of years to get to a proficient level and first requires being a good apprentice under a community of developers to ensure you are learning the trade properly. If you are able to earn an advanced degree in computer science, you should. If not, get as far down the road as you possibly can with online resources, and sooner rather than later you should seek to make friends with programmers who can get to know you, evaluate your work, and help guide you in a fulfilling direction.

Will Little is co-founder and CEO of Code Fellows, a Seattle-based digital trade school that guarantees jobs to graduates of its intensive, eight-week Development Accelerator program. Will holds a Ph.D. in Bioengineering from ETH Zurich and has worked professionally as a Web developer and tech entrepreneur since 2005.