Companion file: Python_Projects_and_Interview_Prep.md (200 projects, 100 interview Qs, 100 coding problems, LeetCode/HackerRank/Codewars/Project Euler tracks).
Table legend: ⏱ Time | 🎯 Difficulty | 🔑 Prereq Recurring channel/site links: Corey Schafer · freeCodeCamp · mCoding · ArjanCodes · NeetCode · Real Python · Exercism · Codewars · HackerRank
| Topic | Free Resource | Docs | Practice | ⏱ | 🎯 |
|---|---|---|---|---|---|
| Install + VS Code/PyCharm setup | Corey Schafer – setup | python.org/downloads | Run "Hello World" | 30m | Easy |
| Running programs (REPL vs script) | freeCodeCamp full course | docs.python.org/3/tutorial | — | 30m | Easy |
| Variables & data types | Corey Schafer – Variables | Built-in types | Exercism Python track | 1h | Easy |
| Input/output, f-strings | Corey Schafer – Formatting | PEP 498 | Codewars 8kyu | 1h | Easy |
| Operators & type conversion | freeCodeCamp | Expressions | HackerRank 10 Days of Python | 1h | Easy |
| Strings & string methods | Corey Schafer – Strings | str methods | Codewars string kata | 2h | Easy |
| Comments, basic debugging | freeCodeCamp | pdb docs | Debug 3 broken scripts | 1h | Easy |
| Basic math ops | Corey Schafer channel | math module | Build a calculator | 1h | Easy |
Book: Automate the Boring Stuff (free, Al Sweigart).
Stage total: ~8h | Mini project: BMI/tip calculator | Mistakes: = vs ==, input() returns str, indentation errors.
| Topic | Free Resource | Docs | Practice | ⏱ | 🎯 |
|---|---|---|---|---|---|
| if/elif/else, nesting | Corey Schafer – If Statements | Compound statements | Codewars 8kyu | 1h | Easy |
| match-case (3.10+) | mCoding – match | PEP 636 | Refactor an if-chain to match-case | 1h | Med |
| for/while, range, enumerate | Corey Schafer – Loops | Loop constructs | HackerRank | 2h | Easy |
| break/continue/pass | freeCodeCamp | same | Build FizzBuzz | 1h | Easy |
| Loop patterns | — | — | Print patterns/pyramids | 2h | Med |
Stage total: ~7h | Mini project: Number-guessing game | Challenge: Text hangman | Compare: for (known count) vs while (condition-based).
| Topic | Free Resource | Docs | Practice | ⏱ | 🎯 |
|---|---|---|---|---|---|
| def, parameters, return | Corey Schafer – Functions | Defining functions | Codewars | 2h | Easy |
| Scope (LEGB) | mCoding – scope | Scopes & namespaces | Predict-output quizzes | 1h | Med |
| Default/keyword args, *args/**kwargs | Corey Schafer | More on functions | Build a flexible logger function | 2h | Med |
| Lambda functions | Corey Schafer – Lambda | Lambda expr | Sort dicts using lambda | 1h | Med |
| Recursion | NeetCode – recursion | — | Exercism recursion exercises | 3h | Med-Hard |
| Docstrings & type hints | Real Python – Type Checking | typing, PEP 257 | Add type hints to Stage 1–2 code | 1h | Med |
Stage total: ~10h | Compare: recursion vs iteration | Mini project: temperature converter | Challenge: recursive maze solver.
| Topic | Free Resource | Docs | Practice | ⏱ | 🎯 |
|---|---|---|---|---|---|
| Lists & methods | Corey Schafer – Lists | Lists | HackerRank | 2h | Easy |
| Tuples | Corey Schafer – Tuples | same | — | 1h | Easy |
| Sets | Corey Schafer – Sets | Sets | Dedup problems | 1h | Easy |
| Dictionaries | Corey Schafer – Dicts | Dicts | Word-frequency counter | 2h | Easy-Med |
| Comprehensions | Corey Schafer – Comprehensions | Comprehensions | Rewrite 10 loops as comprehensions | 2h | Med |
| Nested structures, sort/search | Real Python – Sorting | sorted() | Sort dicts, nested JSON | 2h | Med |
collections module |
mCoding – collections | collections | Rebuild script using Counter | 2h | Med |
Compare: List (mutable, ordered) · Tuple (immutable) · Set (unique, unordered) · Dict (key-value). Stage total: ~12h | Mini project: Contact book | Challenge: Word-frequency analyzer.
| Topic | Free Resource | Docs | Practice | ⏱ | 🎯 |
|---|---|---|---|---|---|
Read/write, with |
Corey Schafer – File Objects | File I/O | Log parser | 2h | Easy |
| CSV | Corey Schafer – CSV | csv | Parse a real CSV export | 1h | Easy |
| JSON | Corey Schafer – JSON | json | Save/load app config | 1h | Easy |
| Pickle | Real Python – Pickle | pickle | Serialize a custom object | 1h | Med |
| Pathlib | mCoding – pathlib | pathlib | Rewrite os.path code |
1h | Med |
| Directories, compression | Real Python – zipfile | shutil, zipfile | Batch-rename + zip a folder | 2h | Med |
Stage total: ~8h | Mini project: Bulk file renamer | Challenge: Folder backup + zip automation.
| Topic | Free Resource | Docs | Practice | ⏱ | 🎯 |
|---|---|---|---|---|---|
| try/except/else/finally | Corey Schafer | Errors & exceptions | Handle 5 common errors | 2h | Easy-Med |
| raise, assertions | Real Python – assert | raise | Input validator with asserts | 1h | Med |
| Custom exceptions | mCoding – exceptions | User-defined exceptions | InsufficientFundsError |
1h | Med |
| Logging basics | Corey Schafer – Logging | logging | Replace all prints with logging | 2h | Med |
Mistake: bare except: hides bugs. Stage total: ~6h | Mini project: Robust upload validator | Challenge: Custom exception hierarchy for a bank app.
| Topic | Free Resource | Docs | Practice | ⏱ | 🎯 |
|---|---|---|---|---|---|
Classes, __init__ |
Corey Schafer OOP series | Classes | Build a Car class |
2h | Med |
| Instance vs class vars | Corey Schafer OOP pt.2 | same | — | 1h | Med |
| Methods, encapsulation | Corey Schafer OOP pt.3 | — | Private attrs + properties | 2h | Med |
| Inheritance & polymorphism | Corey Schafer OOP pt.4 | — | Animal → Dog/Cat hierarchy | 2h | Med |
| Abstraction (ABC) | mCoding – ABC | abc module | Abstract Shape class |
1h | Med-Hard |
| Composition vs inheritance | ArjanCodes | — | Refactor inheritance-heavy design | 2h | Hard |
| Magic/dunder methods | Corey Schafer – Magic Methods | Data model | __str__, __eq__, __add__ on Vector |
2h | Hard |
| Dataclasses | mCoding – dataclasses | dataclasses | Convert 3 classes to @dataclass |
1h | Med |
Stage total: ~13h | Compare: inheritance ("is-a") vs composition ("has-a") | Mini project: Library system | Challenge: Bank account system.
| Topic | Free Resource | Docs | Practice | ⏱ | 🎯 |
|---|---|---|---|---|---|
| Import systems | Real Python – Modules | Modules | Split a script into modules | 1h | Easy |
| Creating packages | Real Python – Packages | Packages | Make an installable package | 2h | Med |
| Virtual environments | Corey Schafer – venv | venv | Isolated envs for 2 projects | 1h | Easy |
| pip, requirements.txt | Corey Schafer – pip | pip.pypa.io | Freeze + recreate an environment | 1h | Easy |
| pyproject.toml | Real Python | packaging.python.org | Package a CLI tool | 2h | Med |
Tool tip: uv or poetry over raw pip+venv.
Stage total: ~7h | Mini project: Publish a small internal utility as a package.
| Topic | Free Resource | Docs | Practice | ⏱ | 🎯 |
|---|---|---|---|---|---|
| Iterators & protocol | Corey Schafer – Iterators | Iterators | Custom iterator class | 2h | Med |
Generators & yield |
Corey Schafer – Generators | Generators | Rewrite heavy function as generator | 2h | Med-Hard |
| Decorators & closures | Corey Schafer – Decorators | Closures | Timing/logging decorator | 3h | Hard |
| Context managers | mCoding | Context managers | Custom DB-connection context manager | 2h | Hard |
| Regular expressions | Corey Schafer – Regex | re module | regex101.com testing; validate emails/phone | 2h | Med |
itertools/functools |
mCoding – itertools | itertools, functools | Rewrite loops using chain, groupby |
2h | Hard |
Stage total: ~13h | Compare: generator (lazy) vs list (eager) | Mini project: @retry decorator | Challenge: Lazy data pipeline.
| Topic | Free Resource | Docs | Practice | ⏱ | 🎯 |
|---|---|---|---|---|---|
| asyncio | mCoding – asyncio | asyncio | Concurrent scraper with aiohttp |
4h | Hard |
| Threading | Corey Schafer – Threading | threading | Multi-threaded downloader | 3h | Hard |
| Multiprocessing | Corey Schafer – Multiprocessing | multiprocessing | CPU-bound parallel task | 3h | Hard |
| Memory & GC | mCoding | gc module | Diagnose a memory leak | 2h | Hard |
| Profiling & optimization | mCoding – profiling | cProfile | Profile + speed up a slow script | 2h | Hard |
| Metaclasses & descriptors | ArjanCodes | Metaclasses | ORM-style descriptor | 3h | Very Hard |
Stage total: ~17h | Compare: threading (I/O, GIL-limited) vs multiprocessing (true parallel CPU) vs asyncio (I/O concurrency) | Mini project: Async scraper | Challenge: Thread-pool image resizer.
| Topic | Free Resource | Docs/Ref | Practice | ⏱ | 🎯 |
|---|---|---|---|---|---|
| Arrays, linked lists, stacks, queues | NeetCode | Grokking Algorithms | LeetCode Easy | 6h | Med |
| Trees, heaps | NeetCode – Trees | — | LeetCode tree tag | 6h | Med-Hard |
| Graphs (BFS/DFS, Dijkstra) | NeetCode – Graphs | — | LeetCode graph tag | 8h | Hard |
| Hash tables | NeetCode | — | Two-sum family problems | 2h | Med |
| Sorting/searching | Abdul Bari | — | Implement quicksort/mergesort/binary search | 4h | Med |
| Recursion & backtracking | NeetCode – Backtracking | — | N-Queens, permutations | 4h | Hard |
| Dynamic programming | NeetCode – DP | — | Climbing stairs → knapsack | 8h | Very Hard |
| Greedy algorithms | NeetCode | — | Interval scheduling | 3h | Hard |
| Big-O complexity | NeetCode – Big O | — | Analyze your own solutions | 2h | Med |
Stage total: ~43h — pace over weeks. Curated list: NeetCode 150.
| Topic | Free Resource | Docs | Practice | ⏱ | 🎯 |
|---|---|---|---|---|---|
| unittest | Corey Schafer | unittest | Test a calculator module | 2h | Med |
| pytest (industry standard) | Real Python – pytest | docs.pytest.org | Convert unittest suite to pytest | 2h | Med |
| Mocking | Corey Schafer – Mocking | unittest.mock | Mock an API call in tests | 2h | Med-Hard |
| Coverage | coverage.readthedocs.io | same | Get a project to 90% coverage | 1h | Med |
| Linters/formatters | Ruff docs | PEP 8 | Lint + format 3 old projects | 2h | Easy-Med |
Stage total: ~9h | Mini project: Tested + linted calculator package | Challenge: CI-ready tests for a past project.
| Topic | Free Resource | Docs | Practice | ⏱ | 🎯 |
|---|---|---|---|---|---|
| SQL fundamentals | freeCodeCamp SQL | sqlite.org/docs | SQLZoo · Mode SQL tutorial | 4h | Med |
| SQLite | Corey Schafer – SQLite3 | sqlite3 | Build a CRUD CLI app | 3h | Med |
| MySQL / PostgreSQL | freeCodeCamp PostgreSQL | psycopg.org | Connect Python to Postgres | 3h | Med-Hard |
| SQLAlchemy / ORM | Real Python – SQLAlchemy | docs.sqlalchemy.org | Rebuild CRUD app with ORM | 4h | Hard |
| Database design | freeCodeCamp DB design | — | Schema for a bookstore app | 3h | Med |
Stage total: ~17h | Mini project: Todo-app with SQLite | Challenge: Full CRUD API + PostgreSQL + SQLAlchemy.
| Topic | Free Resource | Docs | Practice | ⏱ | 🎯 |
|---|---|---|---|---|---|
| HTTP, REST principles | freeCodeCamp – APIs | MDN HTTP | — | 2h | Med |
requests library |
Corey Schafer – requests | requests.readthedocs.io | Consume a public API | 2h | Med |
| JSON handling | Real Python (Stage 5 link) | json | Parse nested API responses | 1h | Easy |
| Auth: OAuth, JWT | freeCodeCamp – JWT | jwt.io/introduction | Token-based auth flow | 3h | Hard |
| FastAPI | Official tutorial | fastapi.tiangolo.com | Build a CRUD API | 5h | Med-Hard |
| WebSockets | FastAPI WS guide | same | Live chat backend | 4h | Hard |
Stage total: ~17h | Mini project: Weather CLI | Challenge: JWT-authenticated FastAPI + WebSocket feed.
| Topic | Free Resource | Docs | Practice | ⏱ | 🎯 |
|---|---|---|---|---|---|
| Flask | Corey Schafer Flask series | flask.palletsprojects.com | Build a blog app | 8h | Med |
| Django | freeCodeCamp Django | djangoproject.com | Full CRUD site w/ auth | 12h | Med-Hard |
| FastAPI (web angle) | Official tutorial | same as Stage 14 | API-first web app | 6h | Med-Hard |
| Templates (Jinja2) | Corey Schafer (same channel) | jinja.palletsprojects.com | Template a multi-page site | 2h | Easy-Med |
| Auth & sessions | Corey Schafer Flask-Login series | Flask-Login | Add login/signup to blog | 4h | Hard |
Stage total: ~32h | Compare: Flask (minimal) vs Django (batteries-included) vs FastAPI (async/API-centric) | Mini project: Personal blog | Challenge: Django e-commerce site.
| Topic | Free Resource | Docs | Practice | ⏱ | 🎯 |
|---|---|---|---|---|---|
| Selenium | Corey Schafer – Selenium | selenium.dev/documentation | Automate login + form fill | 3h | Med |
| BeautifulSoup | Corey Schafer – Scraping | crummy.com/BeautifulSoup | Scrape a news site | 2h | Med |
| OpenPyXL, pandas automation | Corey Schafer – OpenPyXL | openpyxl.readthedocs.io | Auto-generate Excel reports | 3h | Med |
| Email automation | Real Python – smtplib | smtplib | Auto-send a report via email | 1h | Med |
| PDF automation | pypdf.readthedocs.io | same | Merge/split/extract PDFs | 2h | Med |
| Task scheduling | schedule.readthedocs.io | same | Schedule report script daily | 1h | Easy-Med |
Stage total: ~12h | Mini project: Automated Excel report emailer | Challenge: Scrape → clean → email pipeline, scheduled.
| Topic | Free Resource | Docs | Practice | ⏱ | 🎯 |
|---|---|---|---|---|---|
| NumPy | Keith Galli | numpy.org/doc | Kaggle Learn | 4h | Med |
| Pandas | Corey Schafer Pandas series | pandas.pydata.org/docs | Clean a Kaggle dataset | 8h | Med |
| Matplotlib/Seaborn/Plotly | Corey Schafer Matplotlib series | matplotlib.org/stable | Visualize a dataset 5 ways | 4h | Med |
| Data cleaning & EDA | Kaggle – Data Cleaning | — | Full EDA on a messy CSV | 5h | Med-Hard |
Stage total: ~21h | Mini project: EDA + visualization | Challenge: Cleaning pipeline for 100K-row dataset.
| Topic | Free Resource | Docs | Practice | ⏱ | 🎯 |
|---|---|---|---|---|---|
| Scikit-learn fundamentals | freeCodeCamp – ML | scikit-learn.org/stable | Kaggle Titanic | 8h | Hard |
| Regression, classification, clustering | StatQuest | same | Kaggle competitions | 10h | Hard |
| Model evaluation, feature engineering | Kaggle – Intermediate ML | — | Improve a baseline model | 6h | Hard |
| TensorFlow / PyTorch intro | PyTorch tutorials · TensorFlow tutorials | same | Simple image classifier | 10h | Very Hard |
Stage total: ~34h | Mini project: Titanic predictor | Challenge: CNN image classifier.
| Topic | Free Resource | Docs | Practice | ⏱ | 🎯 |
|---|---|---|---|---|---|
| Git & GitHub | freeCodeCamp Git | git-scm.com/doc | Contribute to your own past projects | 4h | Easy-Med |
| Linux basics | freeCodeCamp Linux | — | Basic shell scripting | 3h | Med |
| Docker | freeCodeCamp Docker | docs.docker.com | Containerize a Flask/FastAPI app | 4h | Med-Hard |
| CI/CD | GitHub Actions docs | same | Test-on-push pipeline | 3h | Hard |
| Deployment | Render docs · Railway docs | respective docs | Deploy 2 different apps | 4h | Med |
| Env vars, logging, monitoring | python-dotenv | os.environ | Externalize secrets | 1h | Easy |
Stage total: ~19h | Mini project: Deploy Flask app to Render with CI | Challenge: Dockerized app + CI/CD to a cloud host.
| Topic | Free Resource | Docs | Practice | ⏱ | 🎯 |
|---|---|---|---|---|---|
| Design patterns | ArjanCodes – Design Patterns | — | Refactor using Factory/Strategy pattern | 6h | Hard |
| SOLID principles | ArjanCodes – SOLID | — | Refactor a God-class | 4h | Hard |
| Clean code & architecture | ArjanCodes – Clean Code | Clean Code (book) | Review your own Stage 7 project | 4h | Hard |
| System design basics | ByteByteGo | — | Design a URL shortener on paper | 4h | Hard |
| Security best practices | OWASP Top 10 | same | Audit a past web project | 3h | Hard |
| Packaging & PyPI | Official PyPA guide | same | Publish a small utility package | 2h | Med |
| Code reviews & Agile | — | — | Peer-review a PR (great GSoC practice) | 2h | Med |
Stage total: ~25h
30-Day Beginner: Wk1 Fundamentals → Wk2 Control Flow + Functions → Wk3 Data Structures → Wk4 File/Exception Handling + capstone (CLI contact book). 90-Day Intermediate: Days 1–30 above → 31–50 OOP + Modules → 51–70 Intermediate Python → 71–90 Testing + start Databases; capstone: tested, packaged CLI + SQLite. 180-Day Professional: 1–90 above → 91–120 Advanced Python + start DSA → 121–150 APIs + Web Dev → 151–180 Deploy full app w/ CI/CD; start applying to internships. 1-Year Mastery: Months 1–6 above → 7–8 finish DSA → 9–10 specialize (Data Science/ML or backend/DevOps) → 11–12 portfolio polish, open-source, mock interviews, applications.
Daily schedules: 30min = 15 concept+15 practice | 1hr = 20 concept+30 practice+10 review | 2hr = 30 concept+60 coding+30 DSA | 4hr = 45 concept+90 project+60 DSA+45 review. At 8–10 hr/week: ~1.5hr/day, 6 days/week — use the 1–2hr split, biased toward 2hr on weekends.
Automation → St.16 | Web Dev → St.15 | Data Science → St.17 | ML/AI → St.18 | Cybersecurity → St.20 + scapy/cryptography | DevOps/Cloud → St.19 | Finance → pandas + yfinance | Game Dev → pygame | Desktop → tkinter/PySide
| Category | Recommendation |
|---|---|
| IDE | VS Code or PyCharm |
| Debugger | Built-in VS Code debugger; pdb |
| Linter/Formatter | Ruff + Black |
| Type checker | mypy |
| Package manager | uv or poetry |
| Must-know stdlib | os,sys,json,re,datetime,collections,itertools,functools,pathlib,logging,argparse,unittest |
| Must-know 3rd-party | requests,pandas,numpy,pytest,SQLAlchemy,FastAPI/Flask |
PCEP — entry point, endorsed by Cisco/Stanford/WGU, ~$59, free prep via Python Essentials 1 on Edube. PCAP — ~$295, for moving past junior roles, best paired with a portfolio. Google/IBM Professional Certificates — ~$49/month, broader data/ML-adjacent credential. Reality check: a cert complements experience, doesn't replace it — projects matter more.
- GitHub: pin 4–6 best projects with real READMEs.
- Resume: lead with impact, not a syntax list.
- Freelancing: 3 portfolio pieces → Upwork/Fiverr targeting "Python automation" → recurring clients.
- Remote jobs: target automation/backend roles → 6 months consistent GitHub activity → apply broadly.
- Open source: goodfirstissue.dev → docs/tests before code → overlaps with GSoC prep.
- Salaries: check Levels.fyi or Glassdoor for your region — figures shift too often to fix here.