4 ms·
I am always bemused when i see articles like these. Do people not have an understanding of fundamental Software Engineering principles from OGs like Parnas/Lisk
by rramadass 1y ago
I am always bemused when i see articles like these. Do people not have an understanding of fundamental Software Engineering principles from OGs like Parnas/Liskov/etc.?
The fundamental idea is that of Abstraction which can be defined as the discovery/invention of "higher-level concepts" from more primitive "lower-level concepts" and then reasoning and manipulating at the higher-level. This abstraction is based on structure and/or behavioural attributes.
In order to manage the complexity inherent in the building of large systems certain fundamental aspects were identified as highly desirable. They are Separation-Of-Concerns, Modularization, Reuse and Information-Hiding.
The crucial point to understand is that Abstraction does not imply any of the above aspects! A good example are Mathematical Abstractions. But because for Software we desire the above aspects for our system-as-a-whole we learn to combine them with our Abstractions. This is why we have so many different styles of Programming (i.e. Imperative/OO/Functional/Logic/etc.).
Viewed in the above light the relation between Inheritance and Composition becomes clear. They are just different ways of emphasizing different combinations of the above aspects for your abstractions based on your design needs.
References:
1) Software Fundamentals: Collected Papers by David L. Parnas.
2) Program Development in Java: Abstraction, Specification, and Object-Oriented Design by Barbara Liskov and John Guttag.
3) Multi-Paradigm Design for C++ by James Coplien.
- rifty 1y ago>Do people not have an understanding of fundamental Software Engineering principles from OGs like Parnas/Liskov/etc.? I believe this hints at a major culprit contributing towards the sentiment and use of OO in practice over the years. I'm going to say no people don't. Even if someone goes through education, it won't often require engaging with multiple formative past perspectives at length.. even though there is real value to these musings by comparing and contrasting them altogether first hand.
- rramadass 1y agoIt is ironical that today when you have a vast body of knowledge literally at your fingertips people seem to have no curiosity nor drive to figure things out for themselves starting from the original sources. Everything seems to be mere parroting and inane opinion pieces with no concept of nuance. People seem to demand a black-and-white (i.e. tell me what is right and wrong) cut-and-dried (i.e. tell me what is settled and decided) answer to all their doubts/queries. They seem to not understand that nothing in Software Engineering is a definite law but are simply reasonings based on empirical deductions resulting in agreed upon principles/heuristics. Thus meta-principles drive abstractions resulting in concepts which are then expressed via language features. Now, a language feature expresses only those aspects of the fundamental concept that its designer decided as "correct" (i.e. his/her perspective) which is never its full generality eg. Inheritance expression in various languages. So people need to ask themselves "What is the fundamental concept that i am trying to express via this feature?" and slowly work upwards from specific features to general concepts to even more general meta-principles.