📖 Overview
On the Criteria To Be Used in Decomposing Systems into Modules presents a foundational approach to software design and system modularization. The paper examines two contrasting methods for decomposing a system into modules through a case study of a KWIC index production system.
Parnas demonstrates specific modularization techniques through detailed technical examples and comparisons. The work walks through implementation decisions, interface designs, and the rationale behind different structural choices.
The text includes concrete code examples and design specifications to illustrate the practical application of the concepts. Special attention is paid to how different modularization approaches affect system maintenance and modification.
This influential work challenges conventional wisdom about system decomposition and establishes enduring principles about information hiding and module independence. The concepts presented continue to influence modern software engineering practices and architectural design patterns.
👀 Reviews
Readers praise the paper's clear explanation of information hiding and modular design principles. Software engineers note it remains relevant decades later, with practical examples that translate to modern development. Multiple readers highlighted how the KWIC example demonstrates the advantages of encapsulation.
Liked:
- Concise, focused presentation
- Real-world programming examples
- Step-by-step comparison of different modularization approaches
- Mathematical precision without excessive formality
Disliked:
- Some terminology and examples feel dated
- Paper assumes familiarity with 1970s computing concepts
- Limited discussion of object-oriented connections
- Original typesetting and formatting issues in some versions
No ratings available on Goodreads or Amazon as this is an academic paper rather than a book. The paper is frequently cited in computer science literature and course syllabi. Many readers first encounter it as assigned reading in software engineering courses, where students report it helps crystallize modular design concepts.
📚 Similar books
Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma
This text establishes fundamental principles for breaking down software systems into reusable components through proven design patterns.
Clean Architecture: A Craftsman's Guide to Software Structure and Design by Robert C. Martin The book presents architectural principles for creating modular, maintainable software systems through separation of concerns and dependency management.
Structured Design: Fundamentals of a Discipline of Computer Program and Systems Design by Edward Yourdon and Larry L. Constantine The work defines core concepts for decomposing systems into modules based on coupling and cohesion metrics.
The Mythical Man-Month: Essays on Software Engineering by Fred Brooks This text explores system modularity and team organization through the lens of large-scale software development projects.
Software Architecture in Practice by Len Bass, Paul Clements, Rick Kazman The book provides methods for decomposing systems into architectural elements based on quality attributes and business goals.
Clean Architecture: A Craftsman's Guide to Software Structure and Design by Robert C. Martin The book presents architectural principles for creating modular, maintainable software systems through separation of concerns and dependency management.
Structured Design: Fundamentals of a Discipline of Computer Program and Systems Design by Edward Yourdon and Larry L. Constantine The work defines core concepts for decomposing systems into modules based on coupling and cohesion metrics.
The Mythical Man-Month: Essays on Software Engineering by Fred Brooks This text explores system modularity and team organization through the lens of large-scale software development projects.
Software Architecture in Practice by Len Bass, Paul Clements, Rick Kazman The book provides methods for decomposing systems into architectural elements based on quality attributes and business goals.
🤔 Interesting facts
📚 Published in 1972 in the Communications of the ACM, this paper is considered one of the foundational works in software engineering and module design.
🎓 David Parnas wrote this influential work while at Carnegie Mellon University, where he developed many of his groundbreaking ideas about software architecture and information hiding.
💡 The paper introduced the concept of "information hiding" in software design, which became a cornerstone principle of object-oriented programming.
🏆 In 2001, this paper was awarded "Most Influential Paper of ICSE's First 25 Years" at the International Conference on Software Engineering, demonstrating its lasting impact on the field.
🔄 The paper's core ideas challenged the then-common practice of decomposing systems based on flowcharts and processing steps, instead advocating for decomposition based on design decisions that might change.