numbers
4 Automating computation
4.1.1 Processors and working memory
4.1.2 Processor instruction sets
4.1.3 Special-purpose processors
4.2.2 Social and psychological aspects
4.3 Observing program execution
4.3.1 Debuggers: watching execution unfold
4.3.2 Profilers: measuring execution time
5 Taming complexity
5.1 Chaos and complexity in computation
5.2 Verification, validation, and testing
5.2.1 Verification versus validation
5.2.5 Proving the correctness of software
5.2.6 The pitfalls of numerical computation
5.3.3 Object-oriented programming
5.4.1 Identifying state in a program
5.5 Incidental complexity and technical debt
6 Computational reproducibility
6.1 Reproducibility: a core value of science
6.2 Repeating, reproducing, replicating
6.3 The role of computation in the reproducibility crisis
6.4 Non-reproducible determinism
6.5.1 Preserving compiled code
6.5.3 Preserving or rebuilding?
6.6 Replicability, robustness, and reuse
6.7 Managing software evolution
6.8 Best practices for reproducible and replicable computational science
7 Outlook: scientific knowledge in the digital age
7.1 The scientific record goes digital
7.2 Procedural knowledge turns into software
7.3 Machine learning: the fusion of factual and procedural knowledge