top | item 37477446

On the criteria to be used in decomposing systems into modules (1971) [pdf]

74 points| mavelikara | 2 years ago |win.tue.nl

15 comments

order
[+] rramadass|2 years ago|reply
A Classic.

Folks interested in studying more of Parnas' foundational papers should checkout the book Software Fundamentals: Collected Papers by David L.Parnas. A good antidote to "cargo culting".

[+] jeffdoolittle|2 years ago|reply
+1 to this comment. The book is fantastic. So many good ideas came out of the early 1970s and have been duly forgotten or ignored by this industry. It's time to reclaim them.
[+] praptak|2 years ago|reply
Christopher Alexander, the architect whose work on architecture sparked the software Design Patterns philosophy/movement, also tackled this problem. He obviously didn't focus on software but rather approached this problem from the general design.

His thoughts are in "Notes on the Synthesis of Form" (1964) and I believe his conclusions are similar to the authors of this article: split the design problem into "clusters" of decisions, so as to minimize the dependencies between "clusters".

[+] jalfresi|2 years ago|reply
"Notes on the Synthesis of Form" is my favorite book of all time. I try to re-read it at least once a year. Thoroughly recommend it.
[+] DalekBaldwin|2 years ago|reply
It's difficult to relate this to modern perspectives on software design and architecture because the running example is hard to comprehend. It seems to be an interface to a data structure that may have been useful in certain applications in the context of hardware constraints 50 years ago. It would be great if somebody published an implementation of this example with the variations in C for illustration.
[+] AugustoCAS|2 years ago|reply
I disagree, I just left a company in which most teams 'modularized' their code in the way Parnas describes as not ideal. What Parnas describes are low level modules that are now mostly provided by languages, but the same applies to 'business' modules. In the org I left, minor changes in a microservice had wildly unexpected consequences due to a mix of lack of information hiding coupled with large data objects. One example: storing a debit in an account would become a credit when loaded back under some circumstances.

The mentality of most developers there was: How can I make the change described in the ticket by touching as little existing code as possible?

[+] pjmlp|2 years ago|reply
Except C is quite a poor example for how to use modules.

TU with opaque pointers can be used for such purposes, and they are, but still fail short of Modula-2, Mesa, CLU and UCSD Pascal, to cite contemporary examples.

[+] michaelfeathers|2 years ago|reply
To me, the most amazing thing is that he says that it is a problem that would take the average programmer a week back then, but today it could probably be coded in 5 minutes in AWK or Perl.