Tuesday, December 3, 2013

Essential & Accidental complexity of Software Engineering: Eliminating “Cognitive Dissonance” is a silver bullet


This is continuation to this previous blog dated 26th Nov, 2013. It is useful to read up to the point where the previous blog refers “Cognitive Dissonance”. Today “cognitive dissonance” for each SCC (i.e. component) builds up as more and more spaghetti code is added for other SCCs in the application. In case of real-CBD, componentization and hierarchy of components eliminates such cognitive dissonance. That is, componentization (i.e. encapsulating each SCC in a RCC) allows focusing on a given problem at hand (i.e. each of the RSCCs in the component-hierarchy), without any overbearing interference and huge distractive noise from surrounding issues (i.e. code sections for other SCCs).

The CBD-structure(or hierarchy of replaceable modules) is single most essential aspect universally shared by each and every large physical CBD-product (exists today or in the future). If I were designer of Hard Drive or Power Supply of an experimental computer, how long would it take for me to find the all the parts (i.e. devices) of such large container component for a making minor redesign to the component or to replace the component? It would not take more than few minutes to find the component for either replacing the component or to redesign and test the component individually outside of the product.

Today the computer is designed as shown in FIG-2, as a hierarchy of replaceable modules, where each component can be disassembled (or plugged-out) and re-assembled (or plugged-in) in mater of minutes. But imagine if the computer were designed as shown in FIG-3, where each device of a large component (comprising hundreds of devices) is hard wired into the system-board along with the devices for other such large components (comprising hundreds of devices). The FIG-3 illustrates, how complex software having multiple SCCs is being designed today. It is essential to keep in mind that even large components (i.e. SCCs) by nature can be loosely coupled, while other kinds of parts (even small parts) used for building large components by nature tightly coupled.

Compare the cognitive dissonance for the components in a CBD-structure with the cognitive dissonance of a large software component such as City_ATC having 5,000 lines of code or container component such as City_Landmarks having 15,000 lines of code in a medium size application having 500,000 lines of code. How long it would take for me to find all the code-section for City_ATC that are spread across multiple non-exclusive files after a gap of few months to redesign the component? Is it practical to effectively remove all the code-section to effective remove the component? What is the cognitive dissonance for a newly hired software engineer?

Compare the cognitive dissonance for above components (i.e. City_ATC and City_Landmarks), if each of the components is designed as a RCC and assembled into the application by implementing 2 to 3 lines as illustrated in Listings-1 and Listings-2 (where the coupling interfaces and communication code are respectively managed and created by an intelligent CASE-tool).

The cognitive dissonance of each component represents non-essential or accidental complexity wasted for making a small change to the component. In his famous seminal paper "No Silver Bullet — Essence and Accidents of Software Engineering" Dr. Brooks persuasively argued that there is no ‘cognitive dissonance’ (i.e. accidental complexity) and/or not possible to eliminate ‘cognitive dissonance’ (i.e. accidental complexity).

I respectively disagree based on the easily verifiable 3-CBD-facts. His famous seminal paper and famous book “Mythical Man Month” has huge influence on shaping software engineering research and our belief that software is unique/different and all the complexity is essential (so not possible to eliminate). This is true in the existing paradigm, which is build by relying on a huge error that prevented us from discovering innate nature of real-components.

However discovering unique essential characteristics universally shared by the physical functional-components not only expose the error but also help invent real-software-components equivalent to the physical functional-components for achieving real-CBD (e.g. CBD-structure) for eliminating cognitive dissonance for each of the components in the component-hierarchy. I always admire and still a big fan of Dr. Brooks, but I have to respectfully disagree with him now (based on my recent discoveries).

Few years back in his email response to me, he said that reasonable people can disagree. Unfortunately I have to even disagree with that statement, since in the context of basic science there can be only one accurate answer for nature of physical beings (e.g. diverse spices of components or animals) or physical phenomenon (e.g. CBD or controlled powered flight). The laws of nature are immutable and they can’t be changed or defined by a committee (as we have been doing by defining many kinds of so called software components & CBSDs).

Can respected scientists disagree, if the Earth or the Sun at the center, without any scientific basic and factual support. Can the scientist debate or disagree on Newton’s laws of motion, without any scientific basic and factual support? Therefore, I believe that the scientific process is broken in the computer science and that must be fixed: http://real-software-components.blogspot.in/2013/11/the-process-of-scientific-research-is.html.

Of course, respected scientists still could say that all this is just a theory, so there still could be flaw. But I don’t know what kind of excuse possible, when I can show practical results by demonstrating countless applications created as hierarchy of replaceable components on my laptop? I created hundreds of applications as hierarchy of replaceable components, when I accidentally discovered replaceable components more than a decade ago, which induced irresistible curiosity that driven me to focus on this long and arduous research.


1 comment:

  1. I can understand why scientists had hard time believing that the Earth is circling the Sun (at an astonishing speed of 18 miles per second or 18 times the speed of a bullet fired from a rifle). It was hard to accept that they are standing on Earth (i.e. a huge rock) that is moving 18 miles every second, since not only themselves but also many generations before them lived all their lives on the huge rock without finding any reason to suspect that the huge rock is moving.

    The researchers know everything about the physical components and CBD, but ignored all those facts and reality, when defining “what is CBD” and “what is a component”. By ignoring even the obvious facts and reality about the physical components, the researchers defined many kinds of software components, where each kind of software component is a kind of software parts either having certain useful properties or conform to a model for so called software components. By ignoring even the obvious facts and reality about the CBD for physical products, the researchers defined each kind CBD is using one or more kinds of so called components, which resulted in many kinds of CBD.

    Except giving baseless excuse, no one ever tried to validate the above assumptions. How can we understand this: Even though history has so many examples that it is fool’s errand to rely on erroneous axiomatic assumptions for advancing human knowledge or technology, why respected researchers blindly relying on unsubstantiated axiomatic assumptions for advancing technology by refusing to ascertain the accuracy of the unsubstantiated axiomatic assumptions.

    ReplyDelete