Separation of Concerns
Auszug aus EWD 447: On the Role of Scientific Thought von Edsger W. Dijstra:
Original
Let me try to explain to you, what to my taste is characteristic for all intelligent thinking. It is, that one is willing to study in depth an aspect of one’s subject matter in isolation for the sake of its own consistency, all the time knowing that one is occupying oneself only with one of the aspects. We know that a program must be correct and we can study it from that viewpoint only; we also know that it should be efficient and we can study its efficiency on another day, so to speak. In another mood we may ask ourselves whether, and if so: why, the program is desirable. But nothing is gained—on the contrary!—by tackling these various aspects simultaneously. It is what I sometimes have called “the separation of concerns”, which, even if not perfectly possible, is yet the only available technique for effective ordering of one’s thoughts, that I know of. This is what I mean by “focussing one’s attention upon some aspect”: it does not mean ignoring the other aspects, it is just doing justice to the fact that from this aspect’s point of view, the other is irrelevant. It is being one- and multiple-track minded simultaneously.
Übersetzung
Für mich bedeutet intelligentes Denken: willens sein, einen Aspekt eines Themas gründlich und für dessen Bestimmtheit isoliert zu betrachten, wobei man sich stets dessen bewusst ist, dass man sich nur mit einem Aspekt befasst. Wir wissen, dass ein Programm korrekt sein muss, und wir können es einzig aus diesem Gesichtspunkt betrachten; wir wissen aber auch, dass es effizient sein muss, doch wir können uns sozusagen auch anderntags mit seiner Effizienz befassen. Je nach Gemütslage könnten wir uns fragen, ob und warum dieses Programm überhaupt wünschenswert sei. Aber es wird nichts dabei gewonnen ‒ ganz im Gegenteil! ‒ wenn man diese Fragen gleichzeitig angeht. Dies bezeichne ich als “die Trennung der Angelegenheiten”. Dies ist, wenn auch nicht immer perfekt möglich, doch die einzige Technik für das effektive Ordnen seiner Gedanken, die ich kenne. Das meine ich, wenn ich davon rede “seine Aufmerksamkeit auf einen Aspekt zu fokussieren”: es geht nicht darum, andere Aspekte zu ignorieren, sondern darum, der Tatsache gerecht zu werden, dass aus der Perspektive des einen Aspekts ein anderer irrelevant ist. Es geht darum, gleichzeitig verbohrt und offen zu sein.
Fragen
- Was bedeutet Separation of Concerns bezogen aufs Programmieren?
- Was bedeutet es, gleichzeitig “verbohrt” (one-track-minded) und “offen” (multiple-track-minded) zu sein?
- Was hat die Separation of Concerns für Vorteile?
- Wo lässt sich das Prinzip sonst noch (im Beruf, im Alltag) anwenden?