Programming is a hugely useful skill...and it's frustratingly hard to learn, especially on your own.
Audience: People new to programming. No experience with either programming or Python is required.
Length: 2-5 days, depending on options chosen. Where possible, doing them in half-day segments tends to work best for new programmers, keeping them from being overwhelmed and giving them time to absorb things. The two-day option will introduce people to programming and is useful in time-constrained circumstances, but in my experience if you actually want to turn a student into a real programmer, they need more time and practice. So I recommend a minimum of three days.
Approach: Each topic starts with a very interactive, discussion-based lecture where I do live coding to explain concepts, punctuated by short student exercises to help students absorb the mechanics. These are followed by more challenging team-based exercise projects that combine two or three concepts to accomplish a realistic programming task. We regularly review the concepts learned so far and students have plenty of opportunity to ask about anything that needs more discussion. Students receive book-length HTML and Jupyter Notebook files of the entire class content.
Part 1: Programming
Part 2: Scripting
Part 3: Parsing
Part 4: Reporting
You can pick and choose among these based on your needs.
Regular Expressions
Unicode
Students are always surprised at how interesting this topic is (hey, I even discuss Klingon!), and they find that handling Unicode is actually quite easy if you understand what it's about.
Data Science
Automation and Workflow
Object-Oriented Programming
This is a relatively basic overview of Object-Oriented Programming, which is all that 99% of students usually need. We don't cover more advanced topics like Properties, Decorators, and static methods, unless the students have a particular need for more extended coverage.