spaghetti code or real Computer/Artificial Intelligence. Mathematics alone can't provide necessary knowledge foundation or means to address certain kinds of ...
Computer Science (Software) must not be considered as a Sub-Domain or Subset of Mathematics and Must be treated as an Independent Discipline The researchers of software must use any and every useful and proven tool for gaining knowledge for expanding the Body of Knowledge (or BoK) for computer science. Today computer science and software engineering are treated as a sub-set or sub-domain of mathematics. But computer science and software engineering need to address many kinds of diverse problems and issues that are outside the competencies of mathematics. Hence computer science and software engineering must emerge as independent fields to address any kind problems or issues, which must be addressed for technological progress in software.
The researchers of computer science have been using mathematics as a tool to accumulate body of knowledge. This knowledge is enough to address many kinds of problems and issues by the researchers of software technology. However, researchers of computer science are not using any other powerful tool for gaining knowledge such as science (i.e. proven scientific methods and processes) to add to the body of knowledge. Hence failed to address many kinds of problems such as software crisis due to spaghetti code or real Computer/Artificial Intelligence.
Mathematics alone can’t provide necessary knowledge foundation or means to address certain kinds of problems that must be addressed by
researchers of computer science and software engineering. There are many proven methods and tools (e.g. mathematics, science, philosophy, logic or rationalism, empiricism and common sense) for acquiring necessary knowledge. To help technological progress in the field of software, researchers of computer science must use all necessary tools to provide necessary knowledge foundation essential to address each kind of problems.
Is there any evidence to show that it is impossible to use other tools such as “science”, “logic” or “common sense” for acquiring useful knowledge for addressing unsolved software problems such as software crisis by eliminating spaghetti code or real Artificial Intelligence? Software researchers must select appropriate set of tools to address each of the problems in the software. It is mistake to impose unnecessary artificial limitations to just one tool to solve each and every kind of software problems.
Solving Each Unsolved Problem by Finding & Using Right Tools for Gaining Necessary Knowledge Essential for Addressing the Problem
Useful tools for acquiring knowledge: What is Science? What is logic? What is mathematics? What is philosophy? What is metaphysics or ontology? What is the purpose each one of these broad disciplines and numerous sub-disciplines of each? What is the purpose of epistemological methods such as empiricism or rationalism? Each of them can be
perceived as a tool (e.g. method or framework) for acquiring knowledge, insights and wisdom for any of the scientific or even engineering discipline.
Science is a tool (e.g. a framework comprising collection of rules, processes and principles for systematic organized enquiry
and
investigation of the nature and properties of physical things or aspects of phenomena) for acquiring evidence, facts and quantifying knowledge or gaining insights and wisdom. Also accumulating and documenting organized body of knowledge not only to pass on the knowledge but also to be verified or tested for further enquiry and investigation (e.g. if and when new evidence or anomaly is discovered). Due to lack of better term, I used the term tool in its broadest possible sense for encompassing such systematic enquiry, investigation and study for gaining and accumulation of knowledge, insights and wisdom.
Strong or sound “Foundation of Scientific Knowledge of proven scientific facts and insights or wisdom” is absolutely essential for technological research and advancements, such as: Inventing new useful things and evolving each of the useful things. For example, chemical engineering is an engineering discipline to invent things or processes that are in domain of chemistry. What is engineering or technology? The main purpose of engineering or technology is not only to invent useful things (or processes) but also to create useful things (and continuously improve the useful things by innovation) by using quantifiable scientific knowledge and wisdom acquired using tools such as science and mathematics.
Each tool is more effective in addressing certain kinds or classes of problems or issues in certain domains. In other words, (or perspective), each tool is designed or has been evolving (and hence suitable or proven to be effective) to address certain kinds/classes of issues or problems in certain domains. For example, each of the epistemological tools such as empiricism and rationalism provide a unique and different perspective to gain knowledge and insights (i.e. wisdom). On can gain more knowledge and wisdom by using multiple tools for comprehending each problem or issue in multiple perspectives, since empiricism and rationalism are often complimentary.
Often tools provide complimentary perspective for gaining clarity, deeper insights and wisdom. For example, researchers of theoretical physics extensively use 2 tools (1) processes of natural science and (2) mathematical methods to acquire knowledge, where mathematics is invaluable for gaining clarity and insights. The processes or methods of natural science are useful to investigate evidence, analyze facts and/or propose new hypothesis to explore scientific frontiers for discovering new scientific things/facts such as nature and properties of physical beings and phenomena, for expanding boundaries of knowledge (e.g. Scientific Foundations).
Each tool is extremely effective in giving a unique perspective. But each of them alone can give only partial understanding or partial
knowledge leaving significant unanswered questions and missing pieces. Often, each tool (i.e. perspective gained using the tool) alone might be useless without perspective of the other tool for addressing many problems or issues in physics. Each tool gives unique but-partial perspective, and when used together can give comprehensive understanding, clarity and insights.
Likewise,
mathematics
alone
can't
provide
comprehensive
knowledge foundations for certain problems in computer science such as basic “knowledge foundations” essential for software engineering (or CBSE in particular) or real Artificial Intelligence (or AI). These areas certainly need perspective of natural science, for example, to discover reality such as nature and properties of physical functional components, nature and true essence of CBD (Component Based Design) of one of a kind physical products (e.g. an experimental spacecraft or prototype of next generation jet-fighters).
For example, this kind of knowledge is essential for inventing real software components (that are equivalent to the physical components) that are capable of achieving real CBSD (Component Based Design for software products), where real CBSD is equivalent to the CBD of physical products. Likewise, inventing real AI needs the nature and characteristics of neurons and how does they form neural networks and function in the neural networks.
This kind of knowledge in the perspective of natural science is absolutely essential for inventing real CBSD or AI. Mathematics can’t provide this kind of uniquely distinct perspective (i.e. only natural science can provide). Mathematics is never intended and certainly useless for gaining such knowledge. Unfortunately, researchers of computer science using only mathematics for gaining knowledge and wisdom for creating theoretical and/or knowledge foundation for each and every sub-discipline. Many of them refusing to use any other proven tool such as science.
It is foolish to address certain problems by using mathematics alone. For certain problems mathematics alone can provide partial knowledge leaving many unanswered questions. Mathematics alone can only useful for gaining few pieces or partial perspective of knowledge leaving large portion of questions unanswered, in many classes of problems or problem areas that are in the domain of science, for example, many disciplines of natural science such as botany, zoology, chemistry or virology can address many issues (e.g. gaining knowledge of facts in respective sub-domains).
If a tool can't solve certain kind or class of problems or issues, isn't it common sense to try to find and use other tools that are more appropriate and have proven track record for addressing such class of problems or kind of issues? Isn't it obvious that mathematics is not a right tool for gaining knowledge, insights and wisdom for problems such as nature and properties of physical things such as functional components, nature and physical process or phenomena such as true essence of CBD (Component
Based Design) of one of a kind physical products (e.g. an experimental spacecraft or prototype of next generation jet-fighters). This knowledge is needed for inventing real CBSD. The properties of neurons & how does they form neural networks and function in the neural networks is needed for inventing real AI.
Such software problems are not address today, because Mathematics is not a right tool, and mathematics can't address such problem domain (i.e. discovering nature and characteristic of physical beings). But science is a proven to be right tool and certainly capable of addressing such class of problems or domain (i.e. gaining such knowledge, insights and wisdom). Unfortunately, many software researchers have been refusing to use any other tool other than mathematics for creating theoretical and knowledge foundation essential for software engineering. For example, the researchers are refusing to discover nature and essential properties of physical components or nature and true essence of CBD of physical products.
Is it possible to invent things like fiber optic networks, by being clueless about nature and properties of light? Is it possible to invent things like semiconductor-chips/ICs, by being clueless about the nature and properties of electrons? How is it possible to invent real software components for achieving real CBD for software by being clueless about nature and properties of physical functional components? Many experts insist real CBSD is impossible without even knowing what it is (and refusing
to even know what it is). How is it possible to find treatments for infections, by being clueless about nature and properties of viruses or bacteria. No useful engineering invention can be made, if necessary knowledge is flawed.
Scientific Knowledge Foundation is essential for inventing solving certain complex Software Engineering Problems
What is science? Ans: Science is a very powerful, widely used and proven tool for acquiring and accumulating Body of Knowledge (BoK) in certain domains or to address certain kinds or classes of problems, where acquiring and accumulating knowledge includes investigating evidence, or proposing and exploring hypothesis for discovering facts, gaining insights and wisdom.
What is each scientific discipline? Ans: Each scientific discipline (e.g. botany, virology or bacteriology) is body of knowledge (e.g. facts, insights and wisdom of a respective domains such as botany, virology or bacteriology) created by using science as a tool (i.e. by strictly following proven scientific processes and principles). In addition to using science as a tool, each scientific discipline uses other proven tools (e.g. mathematics or ontology) for acquiring knowledge in respective domain/subject.
In this perspective, science is a tool and each scientific discipline is a BoK in a given subject. My request to software researchers is to
use science (e.g. proven scientific methods) as a tool for gaining useful knowledge for computer science and software engineering. This knowledge is extremely valuable foundation for technological progress and absolutely essential for engineering research to make useful inventions (i.e. for technological progress). No useful invention can be made (i.e. works as expected), if the knowledge foundation is flawed or corrupted with flawed facts.
Almost every engineering or medical invention is rooted in scientific knowledge. Every useful invention (e.g. ICs or fiber-optic networks) that is working better than expected (or at least as expected) is a testament to sound foundation/roots in the scientific knowledge. Today CBSD/CBSE is not working because it has been evolving for 45 years on flawed foundation. I believe, real CBSD rooted in sound scientific foundation can far exceed all our expectations.
The disciplines of computers science and software engineering must try to expand BoK (Body of Knowledge) using any and every available tool for addressing software problems and issues. Despite having “science” in computer science, researchers neither try to create body of knowledge using science as a tool nor rely on scientific foundation/rules. The body of knowledge for any real science or engineering discipline must be rooted in documented proven scientific facts. In hard science, each and everything must be treated as an assumption until it is proven by using irrefutable proof (supported by evidence) and the proof is clearly
documented, so that anyone can verify the proof in light of any evidence and falsify, if and when new anomalies or evidence is discovered.
The body of scientific knowledge must not contain or rooted in unproven beliefs. Nothing in the body of knowledge can be treated as a fact (e.g. to rely on it either for engineering or for scientific research), until it is supported by a documented proof. Any fact can no longer be a fact, if and when the documented proof is falsified by finding a demonstrable flaw. Purpose of engineering research is to invent useful things by relying on such sound body of scientific knowledge. So, such body of scientific knowledge is the very foundation for all technological or engineering progress.
Pragmatic Perspective of “Body of Knowledge” for Scientific or Engineering Disciplines
Please look the scientific disciplines in different pragmatic perspective: Physics is a BoK (Body of Knowledge) accumulated by using tools such as science and mathematics. Likewise, chemistry is body of knowledge accumulated by using tools such as basic science and mathematics for another domain. Botany and zoology are body of knowledge accumulated by using tools such as science (i.e. scientific methods and processes). In pragmatic perspective, computer science is a body of knowledge that can be accumulated by using any and every proven
tool such as science, maths, logic, ontology, common sense or philosophy (e.g. epistemological methods such as empiricism or rationalism).
I want to differentiate normal engineering from engineering research. Let me define, engineering research is inventing useful things or processes for addressing real-world problems or issues (by relying on the existing BoK). Relying on the existing BoK for improving existing useful things or processes is also engineering research. If the existing body of knowledge is not sufficient to address certain kinds of problems, it is essential to create additional knowledge by doing basic (e.g. scientific or theoretical) research using any and every appropriate and available tool (e.g. science, maths, logic or philosophy) having proven track record for acquiring such knowledge.
Existing BoK (Body of Knowledge) in computer science is not sufficient to address certain huge unsolved problems such as infamous software crisis (e.g. due to the spaghetti code) or real AI (Artificial Intelligence) equivalent to even the simplest neural networks in the brains of living things (e.g. equivalent to the neural networks in the brains of even the smallest flies or insects). Today software engineering is in crisis due to the spaghetti code. Except software products, design and development of no other product in the world is infected with such spaghetti design (or code), which includes design and development of even very large and complex one-of-a-kind physical products such as experimental spacecraft or pre-production working prototype for next-generation jet-fighter.
In such products, each large component is custom designed to satisfy unique needs of the product. That is, most of the large components are reusable or standardized. In other words, it is not necessary that even a single large component need to have any useful properties (e.g. reusable or standardized) attributes to so called software components nor conforming to so called component models. The components in the preproduction working prototype are useful references to mass-produce interchangeable components to set-up assembly line for mass production.
Each of the components is designed and developed individually outside of the product free from spaghetti code. Each of the components can be tested individually. Once all the necessary components are built and tested individually they are assembled to make sure each of them fit perfectly and perform as expected. At first attempt (i.e. when assembled first time) most components don’t fit perfectly or perform as expected (i.e. might not collaborate with other components as expected).
The components are unplugged to refine (i.e. redesign) and test individually outside of the product to make each component as best as it can be. Once all the components are refined and tested individually (free from spaghetti code) they are assembled to make sure the product performs as expected. The above two steps are repeated until the prototype product performs as expected (i.e. each of the components fit perfectly and perform as expected). It is an iterative process, where each
of the components is redesigned many times until each of the components fit perfectly and both the components and the product perform as expected.
The designers of all the other products successfully eliminated spaghetti design (or code) by implementing about 95% of the features and functionality in such components. Where each of the components can be designed (or redesigned many times) and tested individually free from spaghetti design (or code). Hence each of the components is free from spaghetti design (or code). Since 95% of the features and functionality implementing in such components, about 95% product design is free from spaghetti design (or code). It is impossible to find a valid reason, why large and complex software products by implementing over 90% of its features and functionality in such components. Where each of the components could be designed (or redesigned many times) and tested individually free from spaghetti design (or code).
Amazingly, it is simple to gain necessary BoK using proven scientific processes and methods (i.e. science as a tool) for addressing infamous software crisis. Each scientific discipline (e.g. physics or chemistry) accumulates BoK for a given domain using any and every proven tool (e.g. science, maths, logic or philosophy) for acquiring such useful knowledge. Likewise, researchers of computer science can and must use every proven tool (e.g. science, maths, logic or philosophy) for acquiring such useful knowledge for expanding the BoK (Body of Knowledge).
All we need to discover is the nature and essential properties of large physical functional components, where the functional components imply components that perform certain internal operations or functions. Where the essential properties are a set of properties uniquely and universally shared by every known physical functional component. Science is uniquely suited and proven tool for discovering the nature and essential properties of physical beings. For example, scientists or researchers discovered essential properties of 10 to 50 times more complex beings such as viruses, elementary particles, light or bacteria. Many of them requires complex experiments and methodical investigation, because none of them are visible.
The researchers of natural sciences discovered essential properties of far more diverse species such as plants, animals, chemical elements or mammals. Neither diversity nor invisibility are hurdles for discovering nature and essential properties of physical things or phenomena. How hard it would be to discover the essential properties of large physical functional components? Of course, it may not be a trivial task, but It is not very hard task. This knowledge and hands on expertise is valuable in positively identifying many sets of features and functionality in any large application or software product under design, where each set of features and functionality can be implemented as a self-contained loosely coupled software component.