The famous quote wasn't a license to ignore performance. It was a corrective for 1970s programmers who over-indexed on low-level tricks, neglecting the growing need for maintainability and structured design during the era's "software crisis."
Computer science history is filled with human drama. Edsger Dijkstra, for example, wrote his seminal "Notes on Structured Programming" during a period of deep professional depression, highlighting that personal struggles often fuel foundational technical work.
Edsger Dijkstra's paper was originally titled "A Case Against the GOTO Statement." Editor Niklaus Wirth changed it to the more inflammatory "Go-To Statement Considered Harmful" and published it as a letter to the editor to bypass formal review, creating a flashpoint.
Ivan Sutherland's 1960s Sketchpad used an architecture akin to modern Entity-Component-Systems. Instead of adopting this flexible model, early OOP proponents focused on its hierarchical aspects, leading to decades of rigid domain modeling that struggled with problems Sketchpad had already solved.
Following "Clean Code" advice for very small functions combined with dynamic dispatch can severely degrade performance. The real cost isn't the virtual function call itself, but the fact that this pattern prevents the compiler from inlining code and performing other crucial optimizations.
The worst code often stems from detailed upfront design. Architects simply cannot hold all the system's complexities in their heads, leading to designs that are disconnected from the practical realities discovered only during implementation. This results in convoluted and inefficient code.
Instead of designing an abstract API first, build the core, functional code (e.g., a rasterizer). Then, create the API by abstracting the patterns from that working implementation. This bottom-up approach ensures the final API is practical and well-suited to the actual problem.
Conway's Law, which states that software architecture mirrors team structure, is essentially unbreakable. This is because communication bandwidth between teams is inherently lower than the "computation" speed within a single team, embedding those communication boundaries into the final product.
Forbidding recursion is a sensible precaution for safety-critical software. Recursive calls make it difficult to precisely calculate maximum stack depth, creating a risk of catastrophic overflow. NASA requires iterative solutions with explicit data structures, which allows for predictable and verifiable memory usage.
The classic domain-model hierarchy in OOP is architecturally weak because many essential features, like multi-selecting and editing a common property (e.g., color), are cross-cutting. This forces developers to pollute the base class with accessors, breaking the encapsulation the hierarchy was meant to provide.
Rather than reading books, which offer distilled knowledge, engineers gain more by learning to read technical papers directly. This skill, though challenging at first, provides access to both foundational historical documents and the latest research, fostering a deeper, more current understanding of the field.
Reflecting on his choice to enter gaming instead of staying at Microsoft, Casey Muratori concludes it wasn't a strategic decision about industries. It was simply about following the specific, impressive people he met who were leaving to start their own company. Your career trajectory is often defined by who you choose to work with.
