There is no escaping the fact that computer programs are complicated. In fact, as the requirements for a package changes, this complexity only seems to increase over time—programs rarely become simpler as you go along. Modular programming techniques are an excellent way of dealing with this complexity. Through the application of modular techniques and technologies, you can:
Use modules and packages to keep your code well organized no matter how complicated it becomes
Use the standard patterns for modular design, including the divide-and-conquer technique, abstraction, and encapsulation, to keep this complexity to a minimum
Apply unit testing techniques to ensure that your code continues to work as it should as you change and expand the scope of your module or package
Write module- and function-level docstrings to clearly describe what each part of your code does so that you can keep track of everything as your program grows and changes.
To get a sense of just how vital...