Learning programming is a lot like dumpster diving. You feel rock bottom, desperately searching for a smelly nugget of direction. All the flies around you seem to know a lot more about it than you do, but ironically can’t even agree on whether the banana peel or the squirrel carcass is better. By the end of it all, you’re still just as hungry and can’t help but feel a little dirty.

In the end, language wars are a distraction from what actually matters: creativity and problem solving. What problem do you want to begin solving?

0. I want to make games

You want C#. C# is Unity’s language of choice, which is a good start for game development. C# has a lot of resources available, and using it with Unity also introduces you to the concept of object oriented programming.

1. I'm interested in website backends, machine learning, data science or I want to script things to automate stuff in my actual job

You want Python. Congrats. I don’t need to defend it, because there’s a million fanboys on the internet who already do. Go now. Leave.

2. I want to make entire websites

As well as Python, you’ll need HTML, CSS and Javascript. You probably won’t be anywhere as near as good as Wordpress, but at least you won’t be… you know, Wordpress. Even if you want to be purely frontend, check out Python to get a glimpse of what goes on in the back.

3. I want to be a hacker, I'm interested in operating systems, or I want to understand computers from the bottom up

So you watched Mr. Robot and now you want to be one of the cool kids. Great. You should probably check out C. “But Kat, the internet says not to start with-“ shut up, the internet is wrong. C is the first language taught in a lot of university computer science degrees, because it’s one of the closest languages to Assembly and prepares you for learning how operating systems and hardware really work. Yes, it’s difficult, but it’s a strong foundation.

4. I want to be a hacker, but C frightens me

Understandable. Learn everything in #2 to get the foundations you need for web application penetration testing. You can learn XSS, SQLi and all that fancy stuff later: if you learn how to make it, you’re halfway there to knowing how to break it.

4. I'm a masochist but chains and whips just aren't doing it for me anymore, or I want to get into hardware engineering and learn how logic boards work

You want to get into VHDL. Godspeed.

5. I want to make Android applications (but not games)

Java, I guess.

6. I have a white shirt and tie, mildly receding hairline, my favorite place to be is the water cooler, and my hobbies are watching TV when I'm not doing crossword puzzles in the newspaper


7. I want to make terrible insecure websites

PHP. Web application testers will thank you for justifying their salaries.