Reality is constantly changing, old paradigms stop working, they collapse and we need new paradigms. To do this, we must go back to the roots, ask ourselves why we do things like this? Can we do better today? what have we learned? This applies to both society, the state, the family, the economy, spirituality, science, and in this article to the software development industry.
What is the problem?
Software is not reliable , and it is becoming more important in our lives every day. We entrust you with the safety of our aircraft, our cars and production systems. The software is now mission critical, many human lives depend on it, due to software failures, we have already seen the loss of hundreds of human lives, such as the case of Boeing 737 Max and the unintended acceleration of Toyota Camry. We need quality software, to which we can trust our lives.
The lack of quality of the software is not just that the software does what it is expected to do, it is also as Quinn Norton warns us in her article Everything is Broken, is the problem of privacy (not being spied on) and security (not being controlled by your processor).
For many “experts” the solution to the problem of poor software quality is to force programmers to write “clean” code, well thought out and well tested. They are right, but only in part, since the problem is deeper since it has two additional dimensions. Can you have quality software, if the tools with which it is developed have failures? Can you have quality software if the system where it is run has failures? To have quality software in addition to writing code quality, we must have a development environment and a quality execution environment .
This three-dimensional software quality problem produces, in addition to the trust problem, a problem of efficiency of the software, both in its development and in its execution. We pay the inefficiency twice, first by increasing the cost of software development, since more developers are needed to maintain a software or add functions, and we pay the inefficiency a second time, when duplicating or tripling our hardware power software improvements are not up to par.
Simplify – Unify – Experiment – Standardize – Contextualize – Update
To better understand the proposed solution, it is necessary to know a series of fundamental elements.
- Paradigm: mental model for a certain reality, with the passage of time reality changes and therefore It must change the paradigm.
- The problem of the incorruptible supervisor: there is no person or organization made of incorruptible people.
- The middle line: if opposites study their differences on a subject, they can reach a greater degree of understanding of the subject.
- The Law 90 9 1: the audience is distributed in 90% passive followers, 9% partial activists, 1% committed activists.
- The fundamental limitation of true / false thinking. The Kurt Godel’s Incompleteness Theorem (1920): There are propositions that cannot be proved or disproved, “If the village barber shaves all men who do not shave themselves, who shaves the barber?” In other words; if a system of axioms is complete then it is inconsistent, on the other hand, if a system of axioms is consistent then it is incomplete, you cannot make a system of axioms that is both complete and consistent. The root of this is that the language spoken by human beings is binary, built from false true expressions, our mathematics is binary, our programming languages are binary, our processors are binary, it is a fundamental limitation of our way of thinking. (There are languages beyond the binary, that solve this problem but I do not know who uses them on planet earth).
- The scientific method does not prove that something is true, it can only prove that something is not false . This is a common flaw in the “scientific” community, even in 2020. Double denial is confused with an affirmation, this is what causes science to contradict itself from time to time. the basis of this denial is also binary thinking / language example.
Robert C Martin, know as “Uncle Bob” has done a great job educating you on how to write clean code.
In the tools dimension, there are programming languages designed to solve the problem of programming tools, such as the D language oriented at 90% 9% and 1% of programmers and languages BEEF and JAI which are targeted at 90% and 9% of programmers.
In the dimension of software execution, the Arrakis operating system has demonstrated that an alternative vision of the role of the operating system as a plan of initialization, access control and resource limit, can produce a performance improvement of 200% to 900% , approaching the maximum performance of the hardware.
Another example is the operating system IncludeOS which defines the operating system as a library and LegoOS that completely distributes the operating system in a network of interconnected components, greatly improving fault tolerance.
The solution is Simplify, eliminating unnecessary complications, Unify the various projects that try to solve the same problem, Experiment with the options that we cannot unify, Standardize: libraries, algorithms, interfaces, patterns. There is no need to continually reinvent the wheel. Contextualize our infrastructure since the needs of 90% of the programmers are different from 1%, think about the Update process of all this infrastructure, since there will surely be changes in the future.
The good news is that all this great work does not require starting from scratch, since we have a whole history of software development that when studied allows us to learn from what we have done well and what we must improve.
It is interesting to note, that the distributed architecture of LegoOS is oriented towards our Organic Architecture of distributed software .
The software industry is in a transition stage, moving from low-quality software with inadequate tools and inefficient execution environments to a new era of quality, cleanly programmed software with efficient tools and execution environments. We are in 2020 in a paradigm shift, in a transition that we are barely recognizing, but with the unification of the work of all the programmers in the world, we will achieve in a few decades having quality software, to which human beings can trust our lives.