Upcoming Course Dates:
Due to COVID-19, courses are being offered online only. Click here for more information.
|• In-person ($2500)||-- Unavailable|
|• Online ($1250)|
This course is also offered for teams. Contact Dave for details.
Instructor: David Beazley
Location: 5412 N Clark Street #218, Chicago, IL 60640
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, concurrency, and linguistic abstraction. 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 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 prior 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 advanced Python language features will be covered by neccessity, the course is not organized around learning language features. Also, this is not a course on software engineering--it does not cover tooling, testing, 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 many years, I've taught two Python courses, Practical Python Programming and Advanced Python Mastery. Those courses are 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 or exercises.
The course is taught by David Beazley, author of the Python Essential Reference, 4th Edition (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 pioneers of using 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. More recently, he gave a tutorial on lambda calculus at PyCon 2019.