
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.
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.
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 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.
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.
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.
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.
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.
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.
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.
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 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 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.
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 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.
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