Teaching and software development have more in common than one might think. Agile development, a popular methodology in software engineering, corresponds to good teaching practice: both teaching and software development involve building and changing knowledge in a system, and both require simultaneous awareness of the present state and the long-term goals. Good practice, in both contexts, acknowledge human limitations so we can work gracefully and efficiently.
As in a ship navigating across the ocean, in both software development and teaching, small increments of change get magnified over time, and constant small course corrections are less costly and worrisome than finding ourselves far off course after a period of inattention.
The human factors in play are similar:
- Programmers, clients, end users, and students all bring their own experiences, motivations, and challenges that affect our work with them.
- As programmers and as students, we function better when motivated, enthusiastic, and given all the tools and support we need.
- Face-to-face communication permits quicker clarification and correction of misunderstandings than written exchanges (albeit at the cost of some precision and detail).
- The product — software, or student work and words and test performance — is the primary measure of progress.
- Excellence and good design require constant nurturing and attention to detail.
- Eliminating all distractions and needless (busy) work keeps activity focused and morale high.
- When teams or classes are organized around the abilities and needs of the people in them, the people are happier and the resulting work better.
- Reflection is an excellent tool for correcting course and improving efficiency.
I’ve prepared a table summarizing the correspondence.