The honest answer: pick Python or JavaScript, start today, and stop researching. Everything below is for people who want a reason rather than an instruction.
Work backwards from what you want to make#
| You want to build | Start with |
|---|---|
| Websites, anything visible in a browser | HTML, CSS, then JavaScript |
| Automating boring tasks, files, spreadsheets | Python |
| Data analysis, charts, machine learning | Python |
| Android apps | Kotlin |
| iPhone apps | Swift |
| Games | C# with Unity |
| You genuinely do not know | Python |
The two default choices#
Python#
Choose it if: you want the gentlest syntax, or you are drawn to automation and data.
Good: reads almost like English; no braces or semicolons to get wrong; a package for nearly everything; excellent beginner error messages.
Less good: you need to install it; it cannot run in a browser; indentation errors annoy beginners.
JavaScript#
Choose it if: you want to see results on a screen quickly, or you are heading for web work.
Good: already installed in every browser; instant visual feedback; works for front end and back end; enormous ecosystem.
Less good: converts types silently, so mistakes hide instead of erroring; the ecosystem is large enough to be overwhelming; a lot of outdated tutorials.
Why it matters less than it feels#
The hard parts of programming are the same everywhere: breaking a problem into steps, spotting your own mistakes, reading errors, knowing what to build next. None of that is language-specific.
The language-specific part — punctuation and standard library — is the part you can pick up in a fortnight. Your second language will take a small fraction of the time your first one did.
What about the “in demand” argument?#
Demand shifts every few years and varies wildly by city and industry. Learning a language because a chart says it is popular, when you have no interest in what it is used for, is a reliable way to lose motivation by week three.
Interest beats market data at this stage. You cannot get good at something you avoid doing.
Languages to avoid first#
Not bad languages — just harder starting points:
- C and C++ — you manage memory yourself, and small mistakes produce baffling crashes
- Java — a lot of ceremony before your first useful program
- Rust — excellent, and its strictness is a lot to meet on day one
- Assembly — fascinating, and not a first language
When to consider switching#
Two good reasons and one bad one.
Good: what you want to build genuinely needs a different language, or you have finished a few projects and want to broaden.
Bad: you are stuck and a different language feels like a fresh start. It is not — you will get stuck at the same point, having lost the progress you had.
Questions people ask#
Should I learn HTML and CSS first?
If you are heading for web development, yes — they are quick and everything else builds on them. They are not programming languages though, so plan for JavaScript after.
Is Python too slow to be worth learning?
For anything you build in your first year, the difference is invisible. Speed matters in a narrow set of situations, and those situations are not where you are.
Can I learn two at once?
It mostly teaches you to confuse their syntax. One until you can build something end to end, then add the second.
What about TypeScript?
It is JavaScript with type checking added. Learn JavaScript first; TypeScript makes far more sense once you have felt the problems it solves.