
Expectations for the course.
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.
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.
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.
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.
Resources for the next video.
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.
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.
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.
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.
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.
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.
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 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 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 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.
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