A practical, project-based path from Python fundamentals to professional Python development.
This roadmap is a learning guide, not a certification checklist. Move through the stages in order, build the suggested projects, and revisit topics when a project exposes a gap.
- Pick one stage and work through its topics.
- Build the stage project without copying a complete solution.
- Add tests and document how to run the project.
- Track what you have completed by checking the boxes.
- Publish finished projects in separate repositories or clear folders.
Suggested pace: 4–8 hours per week. The timeline is intentionally flexible; consistency and working software matter more than speed.
Learn the language and the tools used to work with it.
- Install a supported Python 3 version and use the official documentation.
- Variables, built-in types, operators, strings and input/output.
- Conditions, loops, comprehensions and pattern matching.
- Functions, arguments, return values, scope and recursion.
- Collections: lists, tuples, dictionaries and sets.
- Modules, packages, imports and virtual environments.
- Exceptions and basic debugging.
- Read and write text, CSV and JSON files.
- Git fundamentals: commits, branches, merges and pull requests.
Practice projects
- Command-line calculator
- Expense tracker that reads and writes CSV
- File organizer with safe dry-run mode
Build maintainable programs and understand how Python behaves.
- Object-oriented programming: classes, composition and inheritance.
- Iterators, generators, decorators and context managers.
- Type hints, generics and static type checking.
- Dataclasses, enums and useful standard-library modules.
- Logging and configuration through environment variables.
- Dependency management and reproducible environments.
- Code quality: formatting, linting and project structure.
- Unit testing with pytest, fixtures and parametrization.
- Mock external services and test failure paths.
Practice project
Build a small CLI application with a clean package structure, type hints, tests, logging and a documented setup process.
Learn to work on a codebase as part of a team.
- Use a `src/` layout where it makes sense.
- Write useful README files and API documentation.
- Use Git branches and small, focused pull requests.
- Add pre-commit checks for formatting and linting.
- Configure CI to run tests and quality checks.
- Manage secrets safely; never commit credentials.
- Understand semantic versioning and changelogs.
- Review code and respond constructively to review feedback.
Practice project
Package one of your earlier projects, add CI, publish installation instructions and create a tagged release.
Choose a framework and learn HTTP fundamentals before adding complexity.
- HTTP methods, status codes, headers and JSON.
- REST resource design, validation and pagination.
- Build an API with FastAPI or Flask.
- Request/response schemas and dependency injection.
- Authentication and authorization fundamentals.
- SQL fundamentals, schema design and indexes.
- Use SQLAlchemy or another well-supported data-access layer.
- Database migrations and transaction handling.
- Integration tests for routes and persistence.
- API documentation with OpenAPI.
Practice project
Build a task or inventory API with persistence, validation, authentication, migrations, tests and OpenAPI documentation.
Select the branch that best matches your interests.
- NumPy and pandas fundamentals.
- Data cleaning, missing values and validation.
- Visualisation with Matplotlib or another plotting library.
- Reproducible notebooks and clear data provenance.
- HTTP clients, timeouts, retries and rate limits.
- HTML parsing and browser automation when necessary.
- Respect robots policies, terms of service and privacy.
- Store results in a database or structured files.
- Make jobs idempotent and observable.
- Batch processing and file formats such as CSV, JSON and Parquet.
- SQL and data modelling.
- Pipeline orchestration concepts.
- Data quality checks and failure recovery.
- Distributed processing concepts; explore Spark when justified.
Practice project
Create a scheduled data pipeline that ingests a permitted public dataset, validates it, stores clean outputs and documents its failure/retry behaviour.
- Build and run an application with Docker.
- Configure environments and secrets outside source control.
- Deploy a small service to a cloud platform.
- Add health checks and structured logs.
- Understand basic monitoring, metrics and alerting.
- Add dependency and security checks to CI.
- Back up and migrate persistent data safely.
Practice project
Containerize and deploy your API, document its configuration, and add a CI workflow that runs tests before building the image.
- Async programming: `async`/`await`, event loops and concurrency trade-offs.
- Performance profiling before optimizing.
- Caching and background task processing.
- Architecture boundaries and dependency inversion.
- Security fundamentals: input validation, authorization and safe secret handling.
- Packaging and publishing reusable libraries.
- Design for observability and graceful failure.
Do not study every advanced topic up front. Choose based on the requirements of a real project.
A strong portfolio demonstrates complete, usable work rather than a large number of unfinished repositories.
- One well-tested Python package or CLI tool.
- One documented REST API with a database.
- One automation or data pipeline with validation.
- CI checks that run on every pull request.
- Clear READMEs with setup, usage, examples and limitations.
- Meaningful commits and focused pull requests.
Prefer primary documentation and use tutorials to supplement it.
- Python official tutorial
- Python standard library
- Python Packaging User Guide
- pytest documentation
- FastAPI documentation
- Flask documentation
- pandas documentation
- GitHub Actions documentation
Suggestions and corrections are welcome.
- Open an issue describing the proposed change or missing topic.
- Keep additions focused and link to authoritative resources.
- Avoid duplicating topics already covered.
- Use clear language and working links.
- Submit a pull request with a concise explanation.
This repository is distributed under the MIT License. See LICENSE.