A few weeks ago, I posted about my experience attempting to learn JavaScript, C#, Python, and more from Codecademy, Udemy, and freeCodeCamp, along with escaping from tutorial purgatory and actually making progress as a developer.

Deciding on a programming language can be extremely challenging and time-consuming as there are dozens of options out there, with a lot of conflicting information.  In this article, I'll share some options based on my own experience learning to code, with suggestions for how to choose a programming language, escape tutorial purgatory, and make progress as a developer.

Here's a video version of this post if you'd prefer (11 minute watch):

Scenario #1: You Know What You Want to Build

Often, in articles such as these (or in the "What Coding Language Should I Learn?" infographics with which you're probably intimately familiar), you're asked to think critically about what you want to build after you've learned to code.

This approach is useful if you have some idea about what it is that you want to do with a programming language after learning it, but not so much if you just want to learn to code, as was my experience.  I'll cover both scenarios in this article.

If you do know what direction you want to take your coding career after learning a programming language, you'll most likely have an easier time figuring out which language to learn first.  Here are some suggestions in that case.

Front End Development: JavaScript (and HTML/CSS)

If you already know that you want to work on the "front end" of websites - meaning, anything the user sees when they come to a website - you should begin your coding journey with learning JavaScript.  You'll probably start out by learning HTML and CSS, which form the backbone of just about every website, and then begin adding JavaScript to enhance functionality and interactivity to your sites.

JavaScript is fairly ubiquitous as a programming language, and has an easier on-ramp than other, lower level languages like C++.  It's a great jumping-off point if you don't know what you want to learn...but more on that later.

Back End Development: Python, C#, or JavaScript (and SQL)

Let's say you're more interested in learning about the guts of websites, managing the "back end" and trying your hand at database administration.  You've got a lot of options here, and the most straightforward path is Python, which is a beginner-friendly language that has mature frameworks (e.g. Django and Flask) for back end development.

You also can't go wrong with C#, which will expose you to Microsoft's .NET ecosystem and a programming language that, once you get into the weeds with it, is a pleasure with which to work.  And if you're thinking of going "full stack" - meaning, you want to do front end and back end development - you might consider learning JavaScript, which has younger but highly prized back end frameworks like Express and Koa.  Doing so will also ease your learning process as you'll be using the same language to code both stacks.

Whichever language you choose for back end development, you'll most likely also wind up adding SQL to your toolbox for database management, so put that on your radar.

2D Game Development: JavaScript or C#

I've written elsewhere about what engine you should use to make 2D games, but here's the skinny.

There are a lot of 2D game engines, many of which may or may not suit your fancy as a game developer, and each with their own benefits, idiosyncrasies, and learning curve.  Some of them, like Game Maker Studio 2, for example, utilize their own proprietary languages to run scripts, but I'd actually recommend you first learn JavaScript or C#, even if you're considering using a different game engine in the long run.

With JavaScript, you can use frameworks like Phaser to make 2D games, or fully-featured engines like Construct 3 (which actually uses drag-and-drop development with room for custom scripts).  If you choose to learn C# instead, you'll work with Unity 2D, or perhaps MonoGame - but I'd actually recommend starting with non-engine tutorials (e.g. .NET)to get a good handle on the language first.

Learning JavaScript or C# will give you the foundational coding knowledge you'll need to tackle another game engine, like Game Maker, while also providing you with things like programming best practices and clean code organization.

3D Game Development: C# or C++

There are a lot of options for learning to code for 3D game development, and I'd suggest you start with C# or C++.  In fact, unless you're super tech savvy or already have a background in programming, I'd recommend for you to start with C# and work your way down to C++.  You'll have an easier learning curve and will learn fundamental programming concepts without having to deal with things like memory management and lower-level code.

You'll probably wind up learning both in any case, but if you start with C#, you can tinker around with Unity 3D, and then make your way to C++ with Unreal Engine 4.

Data Science/Machine Learning: Python

Although there are options in other languages for learning data science/analysis and machine learning, Python is currently the gold standard for this realm of coding.  It's a fairly straightforward language to learn and will expose you to good programming habits and widely-used frameworks, so you can't go wrong here.

Scenario #2: You Don't Know What You Want to Build

There's the distinct possibility that you've spent days, weeks, or even months searching through articles, videos, reddit posts, and Stack Overflow questions reading about programming languages, and still have no idea where to invest your time because you don't know what you want to build.

I've been there.  It's annoying.

My recommendation to you, trite as it may seem, is to just pick one.  Literally any one of them, even if they're not listed here.  Go learn JavaScript.  Or Python.  Or Rust.  Or Haskell.

OK, maybe not Haskell.  But pick something, and stick with it long enough to learn the basics and see if there's a possibility that you might like using that language to build with it.  And keep in mind two things as you do so:

  1. Set a time limit for yourself.  Like, "I'm going to take the next three months to learn JavaScript using freeCodeCamp tutorials." If, at the end of that period, you feel like you're making progress and it's interesting to you, keep going!  If not, it may be time to reconsider your choice of language and see if there's something out there that might be a better fit for you.
  2. Build something that's not in your tutorials. This is a crucial step in your growth as a developer.  I'll cover it in the next section.

Scenario #3: You're Stuck in Tutorial Purgatory

If you've found yourself doing tutorial after tutorial, on the same or different websites, without ever actually feeling like you're making progress, you may be really frustrated with the experience of learning to code.  I've been there, and can help.

The first step is to consider what programming tutorials are good for, and what they are not.  Most online tutorials - particularly ones that allow you to code right in the browser - are excellent for teaching you how to program.

They are not, on the other hand, good for teaching you how to be a programmer.

The best tutorials will expose you to fundamental coding concepts and require you to apply that knowledge to solve puzzles and projects.  They're wonderful learning tools that can, if used beyond their scope, become crutches that will stifle your learning.

A programmer, for example, doesn't sit around all day doing tutorials.  A programmer programs, and that's precisely what you need to do to make progress after you've mastered the basics.

The best way to make progress as a developer is to pick a project in your language of choice and set out to do it.  If you're learning JavaScript, for example, you might choose to build a simple website with HTML/CSS and add some interactivity with jQuery.  You'll probably start out by setting up an integrated development environment, immediately forgetting how to do something that you learned in your tutorials, get frustrated, head to Google, find the answer, and keep going.  Then you'll make progress, get stuck, search Stack Overflow, scratch your head at the official documentation, maybe share your code with someone, and repeat the whole process.

And you'll be doing exactly what programmers do when building a new project.

Finally, you really can't go wrong with what programming language you choose, even if it's not on this list.  If you wind up picking one, learning the basics, making a project, and deciding it's not for you, that experience will actually still help you in the long run.  The information you'll learn in the process will be useful, irrespective of whatever language you end up using for your projects.

You can do it!

If you enjoyed this article, please consider checking out my games and books, subscribing to my YouTube channel, or joining the Entromancy Discord.

M. S. Farzan, Ph.D. has written and worked for high-profile video game companies and editorial websites such as Electronic Arts, Perfect World Entertainment, Modus Games, and MMORPG.com, and has served as the Community Manager for games like Dungeons & Dragons Neverwinter and Mass Effect: Andromeda. He is the Creative Director and Lead Game Designer of Entromancy: A Cyberpunk Fantasy RPG and author of The Nightpath Trilogy. Find M. S. Farzan on Twitter @sominator.