This is an intense hands-on course that focuses on problem solving, design, abstraction, and advanced programming topics. Major subjects include data abstraction, object-orientation, functional programming, event-driven systems, problem modeling, and testing. 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 with each other and how our design choices might have a far-reaching impact. Ultimately, the goal is to manage software complexity and to make informed choices in your own projects.
This course is aimed at experienced Python programmers who want to move beyond the writing of scripts that glue together existing libraries into the land of creating custom libraries, frameworks, and larger 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. You should already 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. However, a wide variety of advanced Python topics will naturally arise as we proceed through the course.
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.
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 a wide range of Python language features will be covered by neccessity, the course is not organized around learning Python language features. Also, this is not a course on software project management--it does not cover tooling, teamwork, packaging, deployment, agile, and other related topics. It's about problem solving and creating well organized software that ultimately makes all of those things much easier.
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.
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. 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