
Expectations for the course.
Install Visual Studio Code as the standard editor for a professional Python workflow and enable the code command in your path across Windows, Linux, and Mac.
You can open VS Code using the `code` command in the terminal. It will be more difficult to follow along if you do not have the `code` command working on your machine. This assignment will help you install the `code` command.
If you are a Mac user, please complete this assignment to (1) Install Homebrew, which we will be using frequently to install commands needed for the course. (2) Install a iTerm2 or another Terminal application alternative.
Install the Windows Subsystem for Linux (WSL2) to get a true Linux terminal on Windows, and install Ubuntu 20.04 via official docs to start using Linux tools for Python development.
Learn to integrate Visual Studio Code with Windows Subsystem for Linux using the official WSL extension, open an Ubuntu 20.04 session, and edit WSL workspaces from Windows.
Install and upgrade the git cli across Windows Subsystem for Linux, mac, and Ubuntu by adding the git-core PPA, updating apt, and verifying the latest version (2.39.1).
Master the terminal essentials for Python development, demystifying shells like Bash, and setting up intuitive terminal features to streamline coding, file management, and running programs.
Switch from bash to the z shell and install oh my zsh to customize and streamline your terminal, using curl or wget with macOS or Ubuntu, while noting security considerations.
Navigate with zsh and oh my zsh, explore the plugins directory, and leverage auto-completion and a git-aware prompt to boost terminal productivity for Python development.
Configure the xshell dot zshrc to set the zsh environment and themes, switching from Robbie Russell to Bira Bira and exploring Power Level themes with vscode.
Learn to enable and disable zsh plugins via the zshrc, explore the all-in-one markdown extension, and use the web search plugin, plus basic python tooling like virtualenv and pip.
Install and enable the zsh-autosuggestions plugin to enable typeahead auto-completion in the terminal, using oh my zsh or alternative plugin managers, and test by typing commands to see suggestions.
Install the zsh-syntax-highlighting plugin via oh my zsh instructions, add it to the plugins array, restart the shell, and verify colors: commands green, strings yellow, not a command red.
Master semantic versioning to communicate API changes, distinguish major, minor, and patch updates, and understand version pinning for backwards-compatible, faster, and secure Python libraries.
Explore semantic versioning, including zero major versions as alpha, how deprecations and breaking changes are signaled, and strategies to pin version ranges while managing dependencies and warnings.
Learn why developers must manage multiple Python versions, navigate package compatibility with tools like PyTorch and deployment limits such as AWS Lambda, and prepare to switch versions during development.
Learn to install and manage multiple python versions with pyenv, including mac brew installation, linux ubuntu setup, shell configuration, and switching versions across projects.
Explore how Python evolves through major and minor releases, and summarize milestones like type hints, data classes, and pattern matching while noting the steering council and PEP proposals.
Resources for the next video.
Discover VS Code's layout and essential keyboard shortcuts, including tab management, the command palette, zen mode, and multi-cursor editing, with practical tips for Python file editing.
Configure vscode for python development with the python extension and pylance to improve autocompletion, syntax highlighting, and IntelliSense, then use rename symbol and smart find/replace for safer refactoring.
Master step debugging in VS Code by setting breakpoints, running with the debug launcher, and watching locals, globals, and the call stack to troubleshoot Python code.
Master setting up Python virtual environments and the PATH to enable reliable autocompletion for third-party packages in VS Code with Pylance.
Introduce git as a version control system, using Google Docs as an analogy to explain version history, tracking changes, restoring versions, and merging divergent work for collaboration.
Discover how git integrates with VS Code and use the git lens extension to view commits, file history, and contributor metadata, like Google Docs version history.
Explore the git cli and commits by creating repositories, understanding the dot git folder, and inspecting commit changes across files with cli and graphical tools.
Learn to commit changes in a git repository using VS Code and the command line, including staging, reviewing diffs, and writing descriptive commit messages.
Explore time traveling through git commits using the CLI and GitLens, learn to create small, descriptive commits, and understand best practices for identifying bugs and returning to the present.
Learn how to manage uncommitted changes with git stash, temporarily saving work to switch commits or review history, and reapply changes with stash pop, while learning about potential merge conflicts.
Learn how small, well-described commits enable time travel and easy bug detection, then use branches—master, docs, security, performance—to isolate work, switch contexts, and merge changes.
Master git branching in VS Code by creating and switching branches like feature docs and fix performance, including adding a doc string and summing numbers, committing changes and using stash.
Learn how to merge git branches, including fast-forward and merge commits, safely integrate docs and performance branches into master, handle conflicts, and clean up branches.
Resolve merge conflicts in git by merging master into performance, choosing between a docstring and a return, and completing a fast-forward merge into master.
Explore Git fundamentals and essential workflows with practical examples, and use Learn Git Branching's interactive puzzles to reinforce branching concepts.
Master how git tags label commits to enable semantic versioning, stable and latest releases, and easy navigation after merges, boosting release clarity for customers.
Learn to collaborate on large software projects via code review and GitHub workflows. Explore contributing to open source, enforcing quality with automated scanning, from continuous integration to continuous delivery.
Discover how git enables collaboration via a cloud-based central repository, using commits and branches, and how GitHub as a hosted service supports production-ready workflows with automation.
Create a git repository on GitHub via the UI, select public or private visibility, optionally add a readme and license, and explore repository metadata and branches for remote collaboration.
Learn to clone a repository, manage git remotes, create and switch branches, and push, pull, fetch, and merge changes between your local machine and GitHub.
Explore how code review works through pull requests in a GitHub workflow, from creating feature branches and committing changes to merging into main after reviewer feedback.
Learn to create and review pull requests on GitHub, basing branches on the latest main and resolving conflicts. Master inline comments, draft reviews, and merge checks for quality code review.
Learn how clean code is easy to maintain, understand, and change, and see how meaningful names, modular functions, and idiomatic Python support readable, extensible software.
Explore how Python style guides like PEP 8 and the Google Python style guide improve readability and consistency by prescribing naming conventions, indentation, imports, and code layout.
Refactor Python code to improve readability by applying pep8 and google python style guidelines, reducing global state, and using pure functions with well-named abstractions.
Introduce continuous integration and pull request best practices, emphasizing small, frequent commits, code review for quality and safety, and integrating changes into main often.
Speed up development by using continuous integration and automated code quality checks, keeping pull requests small to accelerate reviews and prevent stale pull requests.
Learn how auto formatting with Black and VS Code settings standardizes code style, reduces holy wars over formatting, and accelerates code reviews and continuous integration.
Explore Pylint, a static code analyzer that detects pep8 deviations and code smells, suggests refactoring, and helps enforce code quality in continuous integration and review.
Learn how to integrate pylint with VS Code for real-time linting, configure via settings.json or the pylint extension, and use virtual environments with the VS Code problems tab.
Configure Pylint with a config file and CLI arguments to tailor lint rules, disable certain messages, and generate a Pylint rc file, balancing consistency with practical exceptions.
Explore how flake8 fits into python linting alongside pylint, highlight its plugin ecosystem, and guide installation, VS Code integration, and a dot flake8 config to ignore codes.
Explore how flake8 plugins extend linting, using darglint as an example to lint docstrings and signature consistency, with config in flake8 and VS Code integration.
Learn to organize and sort Python import statements using eishort, covering typing imports, from __future__ imports, and top of file positioning, with multiline output options and VS Code integration.
Explore code metrics for readability and maintainability by using Radon to measure cyclomatic complexity, and learn how Xenon and McCabe integrate with Flake8 to enforce limits.
Explore how Python type hints and type annotations boost readability, maintainability, and editor autocompletion, by contrasting static and dynamic typing and showing how typing enables scalable, production-ready code.
Explore typing in Python with type hints and static analysis using mypy, install it in a virtual environment, and enable VS Code integration to catch typing inconsistencies.
Explore Python type hints and Mypy to craft robust interfaces with auto completion, covering built-in types, any pitfalls, and generics like list, tuple, dict, iterable, and literal.
Explore Python typing basics, including union and optional types, explicit versus implicit types, and the pipe syntax for unions, with practical examples using the typing module.
Explore typed dicts, named tuples, and self-referential types in Python. Learn to use data classes, forward references with future annotations, and autocompletion for robust type-safe code.
Explore advanced Python typing with generics and type variables to improve autocompletion and type safety in real-world code.
Explore how type stubs enable autocompletion and incremental typing for legacy Python codebases, patching interfaces without refactoring, and using Boto3 stubs and type hints to improve API clarity.
Apply incremental linting to legacy python code using darker, focusing on the diff to avoid blocking progress while improving code quality.
Explore Ruff, a fast rust-based Python linter that unifies Flake8 and Pylint rules. Learn its pyproject.toml config, --fix capabilities, and Python bindings via Pi three.
Integrate linting, type checking, and formatting with automated checks into a trunk-based continuous integration workflow that streamlines feature branches, reviews, and merges into main.
Build a bash script that runs code quality tools—black, pylint, flake8, rough, and eishort—against your codebase, using dot black dot toml and dot pylint rc for a unified workflow.
Enforce code quality with git hooks by running linting tools like Black, Pylint, and Flake8 in a pre-commit script, blocking commits on failures and enabling automation via GitHub actions.
Explore how the pre-commit framework manages Git pre-commit hooks and Python linting tools, configures checks, and automates commit-time code quality in a production workflow.
Explore the pre-commit framework and its hooks, including pylint, nbca, isort, eishort, and black, and configure them with pyproject.toml and repos for consistent code quality.
Explore an advanced pre-commit config featuring isolated hooks for flake8, mypy, and pylint, with additional dependencies, and learn how to prevent merge conflicts, large files, and secrets.
Configure a GitHub Actions workflow to run pre-commit and pylint on a Python project, including checkout, setup Python, install pylint, and execute lint checks on a runner.
Master how to create and run a GitHub Actions workflow that uses pylint to analyze Python code, with push triggers, checkout, setup Python 3.8, and handle non-zero exit statuses.
Fixing the build by resolving pylint errors and demonstrating pre-commit and GitHub Actions in CI.
Configure branch permissions and merge checks on GitHub to prevent direct pushes to main, require pull requests, and enforce pre-commit and status checks before merging.
Explore how GitHub actions use a pre-commit cli tool to enforce code quality, require pull requests for main merges, and manage build minutes and plans to reduce costs.
Save build minutes by configuring GitHub Actions to trigger only on branches with open pull requests, using pull request events such as opened or reopened.
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