Part 4 Problem avoidance
In the last part of the book, we focus less on which patterns to use and more on which patterns to avoid. Sometimes, it’s worth sacrificing a little performance or memory use to build software that optimizes correctness, maintainability, and readability.
Fortunately, with Rust we don’t have to sacrifice performance in most cases. Some people may argue that Rust has no real competitors in terms of safety and performance, so we’re rarely sacrificing much when we dial down the speed a little in favor of correctness.
You may have found that the most challenging code to debug (and often the source of bugs) is code that is too clever for its own good. For this reason, this part focuses on avoiding patterns that are too clever, complex, or difficult to understand.