Advanced Programming with Python

Upcoming Course Dates:

  • June 17-21, 2024 (online) (Sold out)
  • August 12-16, 2024 (online) (New!)

Course Hours:


  • $1500

Registration (no payment required now):

Instructor: David Beazley

Other Courses | FAQ

News: From September 1 - December 6, 2024, the Advanced Programming course will be on vacation while I am teaching Programming Languages at Brown with Shriram Krishnamurthi. Look for a return in early December. -- Dave


I've been programming for more than 30 years and naturally that might give you the impression that I've figured everything out--you would be mistaken. This course is a pragmatic journey into interesting and useful things I've learned about problem solving, programming, testing, and design. It's also a course about current programming topics I am still learning about in relation to all of those things. Ultimately, it's a course about making better software, but also embracing the idea of being flexible and writing code for the future.

Major subjects include data abstraction, layering, object-orientation, functional programming, event-driven systems, problem modeling, testing, and lightweight program verification techniques. However, a greater theme of the course concerns the idea of "composibility." Much of what we do in modern programming isn't driven by the need to code low-level algorithms. Instead, we often need to pull existing components together to form greater systems. When doing this, it's useful to think about how the parts interact and how our design choices might have a far-reaching impact on the whole. Ultimately, the goal is to manage software complexity and to make informed choices in your own projects.

Why Would I Take This Course?

There are many books, courses, and tutorials that focus on "Advanced Looking" programming. These are typically focused on understanding isolated (and often esoteric) programming language features, libraries, and frameworks. That is NOT the focus of this course. Instead, our focus is on advanced programming concepts and asking deeper questions about the practice of programming itself. The ultimate goal is to write software that looks simple because some thought has been put into it.

Target Audience and Prerequisites

This course is aimed at programmers who want to improve their coding of larger libraries and applications. Much of this involves thinking about "big picture" issues about how the parts of such systems are put together, how they can be tested, and more. Because the course is taught in Python, you should be comfortable using Python's builtin types, writing functions, and defining simple classes. It is not necessary to have deep knowledge of "advanced" Python features. I also assume general knowledge of common data structures and algorithms as might be covered in a typical "algorithms" course.

Instruction Format

This course is heavily focused on hands-on programming and group discussion. The course consists of approximately 10 coding projects that explore different facets of programming, problem solving, and design.

Topic Overview

The course aims to cover the following core topics:

It's important to note that the main focus of this course is on programming. Although the course is taught in Python and various Python language features will be covered by neccessity, the course is not organized around learning every detail of the Python language. Also, this is not a course on software project management--it does not cover tooling, teamwork, packaging, deployment, agile, and other related topics. Instead, it's about useful things that you could be doing in your code regardless of how you choose to manage it.

How Does This Compare to Your Earlier Python Courses?

For more than a decade, I taught two Python courses, Practical Python Programming and Advanced Python Mastery. Those courses were strongly focused on the Python language itself. This is a new course with a completely different emphasis on programming practice and design. There is no overlap in course materials, exercises, or presentation format.

About the Instructor

The course is taught by David Beazley, author of the Python Distilled (Addison-Wesley) and Python Cookbook, 3rd Edition (O'Reilly Media). David has been actively involved with the Python community since 1996 and was one of the early adopters of Python with scientific software. From 1998-2005, he was an assistant professor in the Department of Computer Science at the University of Chicago. In 2023 and 2024, he's been teaching the Programming Language Design and Implementation course with Shriram Krishnamurthi at Brown University. You might also know Dave from this somewhat infamous bit of live coding. Most relevant to this course might be this talk at PyCon Sri Lanka 2022.

Copyright (C) 2005-2024, David Beazley