Recent analysis and introspection regarding Software Carpentry's Python lesson has led us to conclude that the lesson would benefit from a complete rewrite. The subcommittee on lesson development met twice to plan much about the new lessons (yes, that's plural). This post will describe our plans for the new lessons.
We're going to write two new Python lessons, one intended for students who are completely new to programming (the "novice" lesson), and another for students with some programming experience in any language (the "intermediate" lesson). Data Carpentry also targets new programmers so we'll be developing the new novice lesson in collaboration with DC, and both DC and SWC will use the lesson. We decided to use Gapminder data for both the novice and intermediate lessons in order to have a consistent experience and approachable, meaningful data (and because some lessons are already using it).
The overarching goal of the novice lesson is to convince students to adopt programming in their everyday work flow. To do that we want to both teach practical data tools and demonstrate the power of writing code (instead of using Excel). Our lesson will include using Pandas to work with data and using Python's control flow features to really make the computer work.
Greg Wilson will be leading the development of the new novice lesson. He'll be looking for help writing, editing, and reviewing the lesson, so keep an eye out for future announcements about that.
The goal of the intermediate lesson is to get students thinking about programming itself: What are effective ways for organizing code? What does it mean to refactor and abstract code? Along the way we'll teach much of the same Python syntax and data tooling from the novice lesson, but we want students to leave applying a more critical mind to the structure of their code and having a vocabulary for talking about code.
Daisie Huang will be leading the development of the intermediate Python lesson and has already started a discussion in the new python-intermediate repo. Your input would be welcome there (look at the issues).
A Third Lesson?
In our discussion of the Python lessons we identified some additional topics that we think students could benefit from. These won't fit into either the novice or intermediate novice lessons, but maybe a third lesson could pick up some of these:
Using external packages
- The idea that you can search for packages that already do your thing
- Learning how to read documentation
- Writing importable, documented modules
- Doing code review
- Making CLI scripts