What to learn first
Tags: beginners
Published: 2019-02-13 17:58:00

---
title: What to learn first
published: true
description: A guide for new developers
tags: beginners
cover_image: https://thepracticaldev.s3.amazonaws.com/i/wn2i2b4j4eizsl48ol6g.PNG
canonical_url: http://isaaclyman.com/blog/posts/what-to-learn-first/
---

_This is an early version of a chapter from_ [Your First Year in Code](https://leanpub.com/firstyearincode), _a book of practical how-to and advice for new developers. If you're considering a career in software, check it out at_ https://leanpub.com/firstyearincode.

-----

I occasionally get a message from a brand-new developer who's overwhelmed by all the technologies and choices that exist in the world of software development. Where do you even start? Some of these devs have seen job advertisements like the following:

![A job ad listing several technologies](https://thepracticaldev.s3.amazonaws.com/i/hkjjyup3i6c2idm5j4li.png)

This is for a standard, mid-level web development position. It lists 14 specific technologies, alludes to many more, and if that weren't enough, it has an "etc." Even as a senior software engineer at a billion-dollar company, I'm not sure what that "etc." refers to. Maybe I could Google it:

![A Google search showing 16 alternatives to three.js](https://thepracticaldev.s3.amazonaws.com/i/l5d9mr23h53iv56lcngj.PNG)

Oh, great. 16 more technologies. If I were brand-new to this, I'd be thinking, "you mean I have to learn 30 different programming languages just to get a mid-level job?" And then I'd throw up my hands and apply for a job in something less demanding, like brain surgery.

Let's put that fear to bed: no, you don't have to learn 30 different programming languages, now or ever. You need to learn one. Then you need to learn a few tools that are commonly used with that language. That will get you a junior position. Afterward, you've got options: get better and better with the languages and tools you already know (you might call this the "expert in the room" route), or learn several more (the "startup engineer" route). Either route will let you advance your career and make more money, and neither is necessarily better than the other, but you'll probably find that you strongly prefer one of them.

So where should you start?

Make a list of technologies you're considering. Then pick one. If there's a company you want to work for and they recruit heavily for one of them, pick that one. Or if you know *what* you want to build, pick the tech that goes with it (Java for Android apps, Swift for iOS apps, JavaScript for the web, and so on). Alternately, go with your gut. Or flip a coin, or roll a d20, or pick one out of a hat. There's no "best" technology. What's important here is that you *commit*. Spend time getting to know the technology, building simple projects with it, reading articles about it, finding GitHub projects that use it.

Some people start second-guessing themselves after a day or two with a new technology, so they switch to a different one, and then another one, and then another. This is like learning to say "Good morning" in 50 different languages. It's a party trick, not a marketable skill. Don't let yourself do this. Even if you spend five years with something and decide it's not for you, it's not a total loss; 80% or more of the skills you've learned will transfer neatly to your next technology. The consequences of choosing the "wrong" technology are tiny.

If you don't know a programming language yet, I recommend starting with JavaScript, Python or C#. All of these are extremely popular and in high demand. If you already know JavaScript, learn a utility tool like Lodash and a web framework like React or Vue, or learn Node.js and a server-side framework like Express or Hapi. If you know Python, learn a data science library like NumPy or Pandas, or a web framework like Django or Flask. If you know C#, learn ASP.NET MVC to build web applications, Xamarin to build native apps, or Unity to build video games.

Once you've picked a technology, the best thing you can do is start a project. Think up something simple you want to build, then work toward it a step at a time, learning what you need to learn as you go along. Once you finish it you'll have a nice portfolio piece, along with the confidence of knowing you can see a project through from start to finish.

I promise, as long as you don't go out of your way to choose strange and obscure technologies, anything you choose can lead to a successful career. There are plenty of jobs out there.

If you need any extra validation or help deciding what to learn, you can always reach out to me via Twitter ([@isaacandsuch](https://twitter.com/isaacandsuch)) or email (mentoring@isaaclyman.com). Good luck!