Cover of Code Complete by Steve McConnell - Business and Economics Book

From "Code Complete"

Author: Steve McConnell
Publisher: Pearson Education
Year: 2004
Category: Computers

🎧 Free Preview Complete

You've listened to your free 10-minute preview.
Sign up free to continue listening to the full summary.

🎧 Listen to Summary

Free 10-min Preview
0:00
Speed:
10:00 free remaining
Chapter 2: Creating High-Quality Code
Key Insight 2 from this chapter

Managing Complexity as Software's Primary Technical Imperative

Key Insight

Managing complexity is identified as the paramount technical objective in software development, superseding other technical goals. Software's inherent difficulty stems from both essential problems, which are intrinsic to the nature of software itself (e.g., intricate, interlocking concepts, exact correctness), and accidental problems, which are related to the tools and methods used. While accidental difficulties, such as clumsy language syntaxes or noninteractive computing, have largely been addressed by advancements like third-generation languages and integrated development environments, progress on essential difficulties remains slower due to the deep challenge of accurately modeling the complex, disorderly real world. As software tackles larger real-world problems, the interactions intensify, amplifying the essential complexity.

Uncontrolled complexity is a leading technical cause of project failure, often resulting in projects becoming so intricate that no single individual fully comprehends their operation. This leads to stagnation when developers cannot predict the impact of changes across different system areas. Computing pioneers noted the unique challenge in computing of spanning a vast conceptual distance, from a bit to hundreds of megabytes, representing a ratio of 1 to 10^9 or even 1 to 10^15 today, far exceeding the depth of average mathematical theories. This scale implies that no human mind can entirely grasp a modern program simultaneously, necessitating design strategies that minimize the amount of a program one must consider at any given moment.

Effectively attacking complexity requires a two-pronged strategy: first, minimizing the essential complexity that any individual's brain must process concurrently, and second, preventing accidental complexity from proliferating unnecessarily. This involves designing systems to break down complicated problems into simpler, manageable pieces. Techniques include dividing systems into independent subsystems, designing well-defined objects to separate concerns, keeping routines concise, and writing programs using problem-domain terminology at higher levels of abstraction. Programmers who acknowledge human cognitive limits and design to compensate for them produce code that is easier to understand, maintain, and less prone to errors.

📚 Continue Your Learning Journey — No Payment Required

Access the complete Code Complete summary with audio narration, key takeaways, and actionable insights from Steve McConnell.