Learning outcomes
Know about pure functions (functions without side effects, functions which given same input always return same output).
Learn why and how to limit side effects of functions.
Discuss why and how to limit side effects of data. Also discuss when mutable data may be preferable.
Discuss why single-purpose functions are often preferred over multi-purpose functions.
Split-apply-combine, which lets you more easily parallelize. Make your code modular in a way that lets you split the steps and parallelize.
Think about global vs local data structures. It is not easy to separate them right.
Understand how a command line interface to a code can improve usability and also make the code more versatile (to be combined with workflow management tools).
Connect modular code development to the remaining lessons (version control, testing, documentation, reusability).