Learn Python.
Ship something real.
Python is the cleanest first language — no semicolons, no curly braces, no type declarations required. This page is the map: what to learn, in what order, how long each phase takes, and the exact project to build at the end. Follow it in order and you'll be dangerous in 8 weeks.
Learning Python free in 2026 means three things: (1) a single structured path — not scattered tutorials, (2) a project after every phase, and (3) 1 hour a day for 8 weeks. Syntax alone takes 2 weeks. Data structures and functions take 2 more. The final 4 weeks are projects — and that's where real understanding happens.
Skip this page if: you already know another language and just need syntax. Read this page if: you're starting from zero and want to know exactly what comes next instead of guessing.
Why Python first
Most beginners start with JavaScript because it's "the language of the web." That's the wrong call. JavaScript has async, the DOM, closures, and a thousand frameworks — all of which are confusing before you understand variables and loops. Python lets you focus entirely on programming concepts without fighting the language.
Python reads like pseudocode. if user.is_active and user.age >= 18: is exactly what you think it is. The syntax disappears, and what's left is the logic — which is the thing you're actually trying to learn.
Python is also genuinely useful outside of web development. Data analysis, automation, scripting, machine learning, DevOps, science — all run on Python. Learning it first opens more doors than learning JavaScript first, even if JavaScript is more searchable.
🗺️ The 8-week path
Follow these in order. Do not skip ahead — each phase depends on the one before it.
Setup & first script
Don't install anything yet. Run Python in the browser for the first 3 days — get the feel for print(), variables, and basic math without fighting your machine. Then install Python locally on day 4.
Data structures
Lists, dictionaries, and tuples are the three containers you'll use every single day. If you understand these deeply, Python becomes easy. If you skip them, everything after feels like memorization.
Control flow
If/elif/else and loops are where the program starts to "think." This is also where beginners first experience the frustration of logic bugs — which is normal. The debugging is the learning.
Functions
Functions are the single biggest productivity jump in any language. Instead of 40-line scripts, you start writing 5-line functions that call each other. Once this clicks, you stop being a beginner.
Files & errors
The first time your program reads a file, saves something, or catches an error, it stops being a toy. This phase turns scripts into tools.
Modules & packages
Python's real power is its ecosystem. Learning to import standard library modules and install third-party packages with pip is the difference between "I wrote a Python script" and "I built a Python tool."
Build a real project
Pick one project from the list below. Build it. Break it. Rebuild it. This is the phase that separates people who "learned Python" from people who can actually write Python.
What comes next
After 8 weeks you have enough Python to be useful. The question is which direction to go: web, data, automation, or AI. Each has a different learning path from here.
🎯 The 5 concepts that matter most
If you only truly understand five things in Python, make it these.
1. Lists are ordered, mutable containers
Access by index, add with .append(), iterate with for. The single most-used data structure in Python.
2. Dictionaries map keys to values
O(1) lookup by key. Use .get() to avoid KeyError. Every JSON API returns dictionaries.
3. Functions take arguments and return values
No return = returns None. Default parameters prevent boilerplate. Pure functions are easier to debug.
4. Loops + conditionals = programs
Every program is a loop reading data, an if deciding something, and a result. Master these two and you can build anything.
5. Errors are information, not failure
Read the traceback from the bottom up. The last line is the error type. The line above tells you where. try/except is for expected failures.
💻 A working example
This uses every concept from phases 1–4. Read it, run it, then change it.
# word_frequency.py — the 5 core concepts in 20 lines
def count_words(text):
words = text.lower().split()
counts = {}
for word in words:
if word in counts:
counts[word] += 1
else:
counts[word] = 1
return counts
def top_words(counts, n=3):
sorted_words = sorted(counts.items(), key=lambda x: x[1], reverse=True)
return sorted_words[:n]
text = "the cat sat on the mat the cat was happy"
counts = count_words(text)
top = top_words(counts, 3)
for word, count in top:
print(f"{word}: {count}")
# Output: the: 3, cat: 2, sat: 1
Change it: remove the .lower() call. What happens to "The" vs "the"? Now add a stopword filter so "the" doesn't count. Now read from a file instead of a string. Every change is a mini-project.
⚠️ Common mistakes (from real beginners)
Each of these will cost you hours if you don't know it.
if x = 5: is a syntax error. if x == 5: is what you meant. Python fails loudly — but only if you know what to look for.
for item in mylist: mylist.remove(item) skips elements. Iterate over a copy (mylist[:]) or build a new list. This bug is silent — the wrong answer, no error.
def greet(): inside a class won't receive the instance. def greet(self): will. If you get "takes 0 arguments but 1 was given," this is why.
def add(item, items=[]): — the list is shared across all calls. Use items=None and set if items is None: items = []. Classic Python trap.
is checks identity. checks equality. Use is only with None, True, False. For everything else, use ==.
Mixed tabs and spaces cause IndentationError. Pick 4 spaces, configure your editor to convert tabs to spaces, never mix them.
Python's errors tell you exactly what went wrong and where. Read the last line first. Read the second-to-last line for the location. This is 80% of debugging.
If you're in week 2, classes will confuse you. Learn lists, dicts, loops, and functions first. Classes make sense once you've written 500 lines of procedural Python.
🔨 Projects by difficulty
Build these in order. Each one uses only concepts from the phases before it.
Number guessing game
A random number, a loop, user input, and if. Uses phase 1 + 3.
Password generator
String concatenation, random.choice(), and user-set length. Uses phase 1 + 2 + 6.
To-do list (terminal)
Add, list, mark done, delete. Stored in a list. Uses phase 2 + 3 + 4.
Word frequency counter
Read a file, split into words, count with a dict, show the top 10. Uses phase 2 + 4 + 5.
Expense tracker (JSON)
Log expenses to a JSON file, load on startup, print a summary. Uses phase 2 + 5 + 6.
Web scraper
Fetch a page with requests, parse with BeautifulSoup, save to CSV. Uses phase 5 + 6 + 7.
❓ Frequently asked questions
How long does it take to learn Python?
For basic syntax and simple scripts: 2–4 weeks at 1 hour a day. To build useful projects independently: 2–3 months. To be job-ready for a junior role: 6–12 months of consistent practice with real projects.
Do I need to install Python to learn it?
No. Start with an online editor that runs Python in the browser. Install Python locally once you're past the basics — usually around week 2 — for file handling, packages, and venvs.
What should I learn first in Python?
Variables, data types (strings, numbers, booleans), then lists and dictionaries, then if/else, then loops, then functions. Do not start with classes, decorators, or async — those are week 6+.
Is Python good for beginners?
Yes — Python has the cleanest syntax of any mainstream language. It reads almost like English, has no semicolons, no curly braces, and no type declarations required.
Should I learn Python 2 or Python 3?
Python 3. Always. Python 2 reached end-of-life in January 2020. Any tutorial teaching Python 2 is outdated — skip it.
What is the difference between a list and a tuple?
Lists are mutable; tuples are immutable. Use lists for collections that grow or shrink, tuples for fixed data, dictionary keys, and returning multiple values.