Taking Python to Production: A Professional Onboarding Guide
Data scientists, analysts, and beginner devs: transition from "coder" to "software engineer" and learn to ship code
Lo que serás capaz de hacer
This is a course about transitioning from a "coder" to a "software engineer". It specifically covers the tools needed to develop and "ship" production-ready software with Python. As an MLOps engineer, my role is to help enable data scientists, analysts, and junior engineers become more self-sufficient at bringing products to production. This course covers a mix of foundational tools, engineering practices, and career advice that new engineers should be given during the onboarding process when they join a team (but they often don't get guidance!). By the end of this course, you should feel confident contributing to complex software projects in a team setting, whether open-source or at a company (or please request a refund within 30 days!). You will understand how closed- and open-source projects are run and how to run your own. In the course, we write very little code and instead focus on the non-coding aspects of software engineering that make you an effective member of the software engineering community. That said, you should have a solid grasp of Python fundamentals (loops, functions, classes, etc.) before taking this course. Expect to learn how to set up a professional Python development environment how to set up a professional workflow for Python development with Visual Studio Code ; extra emphasis on autocompletion how to use git, GitHub, "branching strategies" , and their integrations with VS Code and the terminal how to write clean, maintainable code and ensure that all code contributed to your projects is good quality (testing, linting, formatting, type checking, documentation, etc.) how to publish production-quality software for a wide audience with packaging, versioning, continuous integration, and continuous delivery (pre-commit, GitHub Actions, PyPI) how to templatize all of the above points, so you can create new, high-quality projects in seconds Before paying for this course, please sample the preview lectures so you can get a sense of whether it's right for you. See you in the course! - Eric
- Set up a professional Python development environment - Visual Studio Code, pyenv, git, autocompletion
- Learn the professional git workflow with GitHub and CI/CD with GitHub Actions
- Make the terminal more intuitive with ZSH and plugins
- Version and package Python software and publish it for the community
- Setup automated code quality checks (testing, linting, documentation, type checking, etc.)
Temario
UNIDAD 1 - Introduction · 4 leccionesUNIDAD 1 - Introduction
UNIDAD 1 - Introduction
- Course introduction
- NEW - Join Discord
- IMPORTANT! Course Notes and Course Website
- Linux and terminal crash course
UNIDAD 2 - Environment Setup · 7 leccionesUNIDAD 2 - Environment Setup
UNIDAD 2 - Environment Setup
- Install VS Code
- Make sure you have the `code` command
- Mac users only: Install Homebrew, Xcode, and iTerm2
- Windows users only: Install the Windows Subsystem for Linux (WSL2)
- Windows users only: Integrate VS Code with the WSL2
- Resources: Installing git
- Installing the git CLI tool
UNIDAD 3 - Improving the terminal with ZSH · 8 leccionesUNIDAD 3 - Improving the terminal with ZSH
UNIDAD 3 - Improving the terminal with ZSH
- Introduction
- Installing OhMyZSH
- Navigating using ZSH and installing ZSH plugins
- The ~/.zshrc file and ZSH themes
- Disabling/enabling ZSH plugins; All-in-one Markdown extension; web-search plugin
- Typeahead auto-completion with zsh-autosuggestions
- Syntax highlighting with zsh-syntax-highlighting
- Cheat sheet: quick ZSH setup
UNIDAD 4 - Managing multiple Python versions · 7 leccionesUNIDAD 4 - Managing multiple Python versions
UNIDAD 4 - Managing multiple Python versions
- Introduction to Semantic Versioning (semver)
- Semantic Versioning (continued)
- Semantic Versioning
- Why developers need to be able to switch between multiple Python versions
- Resources for installing pyenv
- Installation and overview of pyenv for managing multiple Python versions
- History of Python changes; Overview of how Python evolves
UNIDAD 5 - VS Code: shortcuts, auto-completion, and virtual environments · 6 leccionesUNIDAD 5 - VS Code: shortcuts, auto-completion, and virtual environments
UNIDAD 5 - VS Code: shortcuts, auto-completion, and virtual environments
- VS Code keyboard shortcut reference
- VS Code: layout and key shortcuts
- Python/Pylance: improve refactoring and syntax highlighting support
- Step debugging in VS Code
- Preview of virtual environments
- Python virtual environments and the PATH variable
UNIDAD 6 - Git and VS Code · 14 leccionesUNIDAD 6 - Git and VS Code
UNIDAD 6 - Git and VS Code
- Introducing git by comparing it to Google Docs
- Git lens extension
- Git command reference
- git CLI and commits
- Making a commit
- Time traveling and best practices for making commits
- git stash
- (Part 1) git branching - visual intuition
- (Part 2) git branching - hands-on in VS Code
- Merging git branches
- Resolving merge conflicts
- [Extra] git branching game
- git tags
- Recap: the local git workflow
UNIDAD 7 - GitHub and Code Review · 7 leccionesUNIDAD 7 - GitHub and Code Review
UNIDAD 7 - GitHub and Code Review
- Preview of the rest of the course
- What is GitHub?
- Creating a repository in GitHub
- Cloning and git remotes
- Pull Requests and Code Review
- Conducting Code Review with a Pull Request
- Recap: the remote git workflow
UNIDAD 8 - Continuous Integration: clean code, formatters, linters and VS Code integrations · 23 leccionesUNIDAD 8 - Continuous Integration: clean code, formatters, linters and VS Code integrations
UNIDAD 8 - Continuous Integration: clean code, formatters, linters and VS Code integrations
- Section guide: resources, links, assignments, summary notes, etc.
- Clean code and why it's important
- Python style guides: Google and PEP 8
- Refactoring for better readability
- Introduction to Continuous Integration and best practices for PRs
- "PR hell" and more discussion of Continuous Integration
- Autoformatting with Black, VS Code's settings system, and "Holy Wars"
- Pylint Part 1 - Introducing Linters
- Pylint Part 2 - Integrating with VS Code
- Pylint Part 3 - Configuring Pylint w/ a config file and CLI arguments
- Flake8 Part 1 - Usage and background
- Flake8 Part 2 - Flake8 plugins w/ Darglint as an example
- isort: sorting import statements
- "Code metrics" like "cyclomatic complexity" with Radon, Xenon, and McCabe
- Typing Part 1 - type hints, autocompletion, static vs dynamic type checking
- Typing Part 2 - Mypy and basic typing
- Typing Part 3 - Simple and Complex Types
- Typing Part 4 - Union and Optional
- Typing Part 5 - TypedDict, dataclasses, NamedTuple, self-referential types
- Typing Part 6 - Generic Types
- Typing Part 7 - Type Stubs and incrementally adding types to existing codebases
- Darker: incrementally lint legacy projects
- Ruff: the last Python linter ever?
UNIDAD 9 - Continuous Integration - The pre-commit framework · 6 leccionesUNIDAD 9 - Continuous Integration - The pre-commit framework
UNIDAD 9 - Continuous Integration - The pre-commit framework
- A Continuous Integration workflow with code quality tools
- CI Approach 1 - Writing a script that calls each tool
- Git pre-commit hooks
- CI Approach 2 - The pre-commit framework
- Pre-commit hook roundup
- Tour of an advanced pre-commit config file
UNIDAD 10 - GitHub Actions · 6 leccionesUNIDAD 10 - GitHub Actions
UNIDAD 10 - GitHub Actions
- Our first GitHub Actions "workflow"
- GitHub Actions: running a workflow
- Fixing the build and using pre-commit
- Branch permissions, merge checks, and pull requests
- Understanding GitHub Actions Pricing
- Optimizing for cost by using GitHub Actions Triggers
UNIDAD 11 - Python Packaging · 21 leccionesUNIDAD 11 - Python Packaging
UNIDAD 11 - Python Packaging
- Section Intro - Python Packaging
- PYTHONPATH and imports in Python
- PYTHONPATH hacking (continued)
- Our first setup.py file
- setuptools docs; find_packages
- pip install --editable
- install_requires and reproducibility
- Shortcomings of sdist format
- Wheels
- pyproject.toml origin story; Build dependencies explained
- Escaping config file hell; setup.cfg
- Removing setup.cfg thanks to PEP 621
- Removing setup.py; PEP 517; Build backends
- Data files - part 1; example use case for including data files in a package
- Data files - Part 2; MANIFEST.in and build-backend-specific alternatives
- Dependency management; Dependency graphs and locking dependencies
- Dependency graphs
- Constraint trees and "dependency hell"
- Constraint trees are unstable across package versions
- Optional dependencies AKA "extras"
- Shopping for dependencies with the Snyk Python package index
UNIDAD 12 - Intro to Continuous Delivery: Publishing to PyPI · 10 leccionesUNIDAD 12 - Intro to Continuous Delivery: Publishing to PyPI
UNIDAD 12 - Intro to Continuous Delivery: Publishing to PyPI
- Section Introduction
- DevOps and Waterfall vs Agile
- Publishing to PyPI; Test vs Prod PyPI
- Generating API tokens for PyPI
- Running `twine upload`
- Task runners - part 1 - CMake and Makefile
- Task runners - part 2 - Alternatives to CMake (Just, PyInvoke, Bash)
- Task runners - part 3 - Bash as a task runner
- Publishing to Test PyPI
- Publishing to Prod PyPI; Why we should move deployment to GitHub Actions
UNIDAD 13 - Automating Continuous Delivery of Python Packages with GitHub Actions · 10 leccionesUNIDAD 13 - Automating Continuous Delivery of Python Packages with GitHub Actions
UNIDAD 13 - Automating Continuous Delivery of Python Packages with GitHub Actions
- Introduction to the section
- What and why of "delivery environments"
- Workflow for Python packages
- Setting up trigger listeners for the GitHub Actions workflow
- Pushing to Test PyPI from CI; Contexts and secrets management part 1
- Contexts and secrets management part 2
- A few minor improvements to the pre-merge pipeline
- Enabling linting in the pipeline
- Writing the post-merge pipeline
- Adding git tags and avoiding duplicate releases
UNIDAD 14 - Advanced GitHub Actions Optimization Techniques · 4 leccionesUNIDAD 14 - Advanced GitHub Actions Optimization Techniques
UNIDAD 14 - Advanced GitHub Actions Optimization Techniques
- Locking requirements
- Dependency Caching
- Parallelization
- Passing artifacts (files) between jobs
UNIDAD 15 - Software Testing and Pytest · 10 leccionesUNIDAD 15 - Software Testing and Pytest
UNIDAD 15 - Software Testing and Pytest
- Introducing software testing
- Intro to pytest
- Setting up pytest (basic)
- Test case universe
- Parameterized test cases and the test case universe
- Pytest markers to skip slow tests; passing arguments to run.sh
- Test coverage part 1 - coverage on src/ folder
- Test coverage part 2
- Testing in GitHub Actions, Testing the Wheel file
- Pytest VS Code Integration
UNIDAD 16 - [No Articles Yet] Course project: Advanced Python package and repo template · 34 leccionesUNIDAD 16 - [No Articles Yet] Course project: Advanced Python package and repo template
UNIDAD 16 - [No Articles Yet] Course project: Advanced Python package and repo template
- Project overview and demo
- Architecture of Final Project
- Aside: Jinja2 Templated Strings
- Introducing Cookiecutter
- Starting the final project - making a trivial Cookiecutter template
- There is an answer key! Reference repo in GitHub
- Starting the final project: forking the starter repo
- Templatizing the starter project with Cookiecutter
- Tour of the final project starter files
- Operating a generated project (install deps, run tests, lint, etc.)
- Fixing an issue with pre-commit in the template
- What could/should we test about our template?
- Writing our first template test
- Troubleshooting black (and other extensions) in VS Code
- Introducing Pytest Fixtures
- Writing a Pytest fixture for generating a project
- Part 1 - conftest.py - Extract helper functions and consts into separate files
- Part 2 - conftest.py - Extracting Pytest fixtures to dedicated files
- Writing a test for "make lint"
- Writing a test for "make test"
- Parallelizing tests with pytest-xdist
- Finishing tests; improving the tests/ dir layout in the template project
- Challenge: Enable CI/CD for the course project repository
- Solution: Enable CI/CD for the course project repository
- Challenge: add a "package_import_name" parameter to the Cookiecutter template
- Solution: add a "package_import_name" parameter to the Cookiecutter template
- Installing the GitHub CLI (not the same thing as the git CLI!)
- Planning the create-or-update-repo form
- Part 1 - Script - create-repo-if-not-exists
- Script Part 2 - open-pr-with-generated-project
- Script Part 3 - configure-repo
- Bringing it all together in a GitHub Actions workflow
- Fixing auth for the GitHub CLI using a personal token in the workflow
- Demo the final project (again, except this time it's yours!)
UNIDAD 17 - Bonus · 1 leccionesUNIDAD 17 - Bonus
UNIDAD 17 - Bonus
- Bonus
Tu certificado lo emite la SEP, no solo una plataforma
Al demostrar la competencia recibes un certificado emitido por la Secretaría de Educación Pública a través del Gobierno del Estado de México: un documento oficial que puedes presentar con confianza ante cualquier empleador o institución.
Tu certificado con INEC
- Lo emite la Secretaría de Educación Pública (SEP), a través del Gobierno del Estado de México
- Documento oficial con folio verificable en línea
- Lo otorga la Universidad Tecnológica Fidel Velázquez
Otras plataformas en línea
- Constancia privada emitida por la misma plataforma
- Solo acredita horas cursadas o asistencia
- Sin respaldo de una autoridad educativa
Tu itinerario, de la inscripción al certificado
- 1
Inscripción con pago único
Pagas $2,800 MXN una sola vez y entras de inmediato al curso.
- 2
Estudias a tu ritmo
17 unidades con videos, lecturas y actividades, disponibles 24/7 durante 12 meses.
- 3
Cuestionarios por unidad
1 cuestionarios para comprobar lo aprendido.
- 4
Certificado
Emitido por la SEP a través del Gobierno del Estado de México, con folio verificable.
Un certificado oficial de la SEP
- Emitido por la Secretaría de Educación Pública (SEP), a través del Gobierno del Estado de México. No es una constancia privada: es un documento oficial, y ese respaldo marca la diferencia frente a otras plataformas en línea.
- Contenido impartido por Eric Riddoch.
- Folio y QR verificables para compartirlo con quien te contrate.
Empieza hoy, a tu ritmo
Un solo pago y acceso inmediato al curso completo durante 12 meses.
- 17 unidades · 178 lecciones · 60 h
- 12 meses de acceso
- 1 cuestionarios de evaluación
- Certificado emitido por la SEP (Gob. del Estado de México) con folio verificable
Sobre tu inscripción
¿Cómo es el pago?
Un solo pago de $2,800 MXN. No hay mensualidades ni cargos recurrentes.
¿Cuánto tiempo tengo acceso?
12 meses desde tu inscripción, 24/7, para avanzar a tu ritmo.
¿Quién imparte el contenido?
El curso es impartido por Eric Riddoch; INEC gestiona tu inscripción, evaluación y certificado.
¿Qué pasa cuando vence mi acceso?
Puedes renovar tu cuenta tú mismo desde la plataforma, sin trámites ni esperas.


