Dev

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

Image Credit: Photobank gallery/Shutterstock

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:

Learn JavaScript.

If you don’t know algebra yet, then start with Scratch.

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.

30 comments
Evan Zamir
Evan Zamir

Honestly, I think it's the wrong question. To me the question should be which language paradigm should you learn first. To me, going forward, the answer is functional programming. And if you buy that, then the first programming language you should learn is Lisp (not kidding). Then move on to a more "practical" language...Clojure.


Maybe I'm crazy. But that's what I'm feeling these days. Maybe I watched one too many Rich Hickey videos (YouTube him). I say this as a mostly Ruby/JavaScript guy.

Adedeji Adedoyin
Adedeji Adedoyin

Just wondering what happened to PHP that powers a huge chunk of the web. Whether you like it or not ( quite funny you did not even bother to mention it), you can't deny its success and popularity. Great article but quite inaccurate and somehow misleading.

Mads Brix
Mads Brix

Lasse Meldgaard Casper Slynge kom i gang!

Alfredo Luque
Alfredo Luque

As a beginner, finding 'the right first programming language' is not going to be a worthwhile exercise. At the end of the day, it's like trying out a bunch of high end tennis rackets. They each have their strengths, but you need to know how to play tennis to actually use them to their potential. Instead, learning fundamentals of algorithms and data structures will serve a beginner better than trying to learn a bunch of syntax. This is certainly the case if you want to make something more than a silly web-app. That said, encouraging people to begin with javascript is absurd. Javascript is a language primarily meant to run in-browser and is not a general purpose programming language. I find that although the learning curve is high, starting with C is a great choice because it forces the user to think about what the computer is actually doing. Moving from C to Python, Go, Java, Javascript. is then pretty straightforward (the functionality is a subset of C). Definitely not the case the other way around.

Jonas Windey
Jonas Windey

You're right, but it should have been mentioned on that part.

Cacau Al-Meida
Cacau Al-Meida

You are awesome! I am pretty sure I am On the right path because it's the easier path hahah

Deniz Opal
Deniz Opal

I use C# in Mono. Article claims I don't exist.

Julian Alden-Salter
Julian Alden-Salter

Learn how to learn programming languages. A good engineer can get up and running in a new language in hours, have something functional in days and be proficient in weeks. Give me google a good IDE and a definite target in a new language and it's simple.

Brandon Jepson
Brandon Jepson

This is great stuff! I've been studying for a while now to get into the progamming business but I haven't been too sure about what path to go. This makes it clearer.

Jorge Mesa
Jorge Mesa

I like how the article helps direct a beginner's interest (web, mobile, etc) to where they should go first. Money is great but love what you do. For example, don't code for hardware if it's not what you're passionate about.

Jonas Windey
Jonas Windey

So much focus on Javascript but not mentioning NodeJS once is a mistake. Should be added to the last paragraph where you mention JS for back-ends.

Anton Yakushin
Anton Yakushin

I don't think the solution for everybody is to start with JavaScript (unless you're just "trying programming out"). Each language has its own patterns and paradigms and I think it's most important to pick a language that gets you where you ultimately want to go. Understanding where each language you're learning is used and what to expect from an entry-level employment perspective is in my opinion most important. For example, JavaScript is essential for today's web developer and could be a stepping stone to PHP, but expect to be very confused if your next language is Objective-C for mobile apps.

Ron Hunter
Ron Hunter

I noticed you left out PHP and therefore very popular and growing CMS like Joomla and Drupal.  Are they dead and not worth learning and building in?  They seem to have huge communities and open source support.

Tom Hubina
Tom Hubina

Which programming language to learn first? Doesn't matter. Figure out what you want to build first, then find out what language others are using to build it. There are likely multiple choices - see if you know anyone that knows one of the languages and will chat with you from time to time about it. Learn that one and build your first thing. Wash, rinse, repeat. (Note - when you can appreciate the programming implications of that, pat yourself on the back)