Deep vs. Shallow Modules
Ousterhout introduces the concept of 'deep' and 'shallow' modules. Deep modules provide powerful functionality through simple interfaces, effectively hiding significant implementation complexity. For example, the Unix file I/O system, with its five basic system calls, is a deep module because it offers extensive functionality while keeping the interface simple. In contrast, shallow modules have complex interfaces relative to the functionality they provide, adding little value in managing complexity. Ousterhout criticizes the tendency to create numerous small, shallow classes and methods, a practice he terms 'classitis.' This approach increases overall system complexity by introducing many interfaces that developers must learn and manage.