Please kindly let me summarize the reality of CBD of the large physical products: In case of the CBD (Component Based Design) of physical products the following things are taken for granted: Nearly 97% of the features and functionality are implemented as components, where each component is 100% free from spaghetti code hence nearly 97% of the product is free from spaghetti code. Each component can be disassembled (or unplugged) to refine or redesign for making it as best as it can be (e.g. to optimize and to perform at its best). This component can be tested individually to make sure it performs its functionality as expected before assembling into the product.
After assembling into its container-component (or product), each component is tested to make sure its coupling interfaces fit perfectly and it performs as expected within the product by properly collaborating with other components. If it doesn't fit perfectly or to further improve its performance and functionality, it can be unplugged (or disassembled) for redesigning for refining its interfaces or functionality and testing it individually (outside of the product). Each component can be disassembled for redesigning to further improve its functionality, to add features or to refacor for eliminating any internal inefficient design (e.g. internal spaghetti code) and tested (outside of the product) individually before reassembling.
Today even after leveraging latest technologies, tools and all the suitable reusable libraries, software engineers are forced to implement 100s of thousands to millions of lines of custom application code for creating large software products. In case of software products today nearly 90% of the custom application code ends up as spaghetti code. Since essential properties of the physical functional components are not yet known, no conscious effort is made to identify each component. Hence almost no real software component (equivalent to the physical functional components by having the essential properties uniquely and universally shared by every known physical functional components).
An ideal CBD for software product must satisfy the following conditions: (i) Over 97% of the functionality and features of the software product must be implemented as a replaceable components, (ii) where it should require implementing no more that 3 to 5 lines to assemble each of the replaceable components, and (iii) removing 3 to 5 lines implemented to assemble each of the replaceable component must effectively remove the component without leaving any traces of spaghetti code. That is, if the application is created by assembling each of the components into a generic application template, the leftover code must be the generic application template, if all the components are disassembled by removing each of the components one at a time.
For example, the airplanes, automobiles or computers are created by assembling components as hierarchy of replaceable components. Each of the products would be left with empty frame (i.e. skeleton or holder), if all the components are disassembled by removing each of the components one at a time. Each component is designed and can be disassembled to redesign and test individually outside of the product. Each component can be disassembled to replace or redesign individually outside of the product (free from spaghetti code implemented for any other component). The component is reassembled into the product after redesigning and testing the component individually outside of the product (without being forced to see even a single line of spaghetti code implemented for any other component, while redesigning and testing).
Today no conscious effort is made to identify software parts equivalent to the physical functional components to implement them as loosely coupled, so that each can be assembled by implementing 3 to 5 lines and disassembled by removing the 3 to 5 lines (e.g. to redesign and test individually free from exposing to spaghetti code). There is no valid reason, why it is not possible to modularize 97% of the features and functionality (i.e. implemented in the custom code to satisfy product’s unique needs) into such replaceable components, where each component requires no more than 3 to 5 lines to disassemble/reassemble (so that each of the replaceable components can be redesigned and tested free from exposing to the spaghetti code implemented for any other part of the application).
It is impossible to find any explicit explanation, why software engineering paradigm for CBSD (CBD of software products) deviated from the reality of CBD (Component Based Design) of physical products? It is impossible to find any rational explanation or justification anywhere. The first principles for basic sciences are taught in high schools. Likewise, the first principles for new branches of scientific disciplines (e.g. CBSD, virology, mycology, parasitology, and bacteriology) are taught in first couple of chapters of respective text books.
My best guess of the undocumented hidden reasoning: It is not possible to discover accurate description for the physical functional components, for example, where the accurate description is defined by essential characteristics uniquely and universally shared by each and every known physical functional component. It is not possible to invent real software components (having the essential characteristics) equivalent to the physical functional components, even if it is possible to discover such essential characteristics for the physical functional components.
Likewise, it is not possible to discover accurate description for the CBD of the physical products, for example, where the accurate description is defined by essential aspects uniquely and universally shared by each and every known CBD of physical product. It is not possible to invent real CBD for software products (having the essential aspects) equivalent to the CBD of physical products, even if it is possible to discover such essential aspects for the CBD of physical products.
Can any one summarize any other tacit reasoning, why software engineering paradigm for CBSD (CBD of software products) deviated from the reality of CBD (Component Based Design) of physical products?
Although those reasons might be acceptable 50 years ago (when FORTRAN and assembly languages were leading edge technologies), are such tacit assumptions still valid? Documenting the reasons that resulted in deviating software engineering paradigm for CBSD from reality would help address them to put the software engineering paradigm for CBSD on right tracks.
Article What are the first principles at the root that lead to the e...