In the beginning when we started writing down our ideas, we started out by simply depicting scenes from our daily lives, through abstract two-dimensional drawings, intended to symbolize only what they depicted. This construct can be seen in cave paintings, and dates as far back as at least 40.000 years.
Then approximately 7.000 years ago, we invented what was later to evolve into modern literacy. In the beginning these scribbles were partially symbolic in their depictions, while still possible to combine together, to form abstract ideas, not directly related to what they actually depicted. The most famous example of this is Egyptian Hieroglyphs. To understand how this work, realize that Hieroglyphs are really nothing more than simple rebus constructs, where several images, can be combined together, creating new words, according to how they sound. A good example of this, is if we were to write down the word for “belief” with the same constructs, which could be combined together with the word for “bee” and “leaf”, creating a combined sound, that becomes; “bee-leaf”, sounding similar to “belief”, and hence becomes the word for “belief”.
The Egyptians created elaborate symbols through this idea, making it possible to write down anything a human being could speak with its mouth, and hence became the first real-life implementation of “literacy”. Meaning, the possibility of writing down “everything” that could be held within the mind of a human being. And through the invention of literacy, modern society was conceived, as we know it today. Lunar-landing vehicles, and combustion engines are really nothing but the “bastard children” of Hieroglyphs, since it became the vehicle for allowing good ideas to spread, and such facilitate for; “One good idea, building on top of another good idea”. AKA; Science! Hence, “science” is an unintended byproduct of literacy, which again came from the urge to convey religious ideas, across time and space.
The problem with Hieroglyphs though, was that they were excruciatingly difficult to combine together. It could easily take a literate person several days, conveying a simple sentence, since the images needed to write down these words, were highly complex. Besides, the “alphabet” held too many “letters” for most people to be able to teach themselves writing down their own ideas.
System development today, is kind of at the same place literacy was at back in the days of the Hieroglyphs. It’s very difficult to construct programs, since the intricacy of combining “words” (functions) together, becomes too hard for most people to understand. This creates a “literacy problem” for humanity as a specie, since only about 2% of the western hemisphere can understand how to instruct computers, by “writing words” to them, to inform them what they want their computers to do. This makes most people perceive system development the same way people hundreds of years ago perceived “black magic” and “voodoo”.
“Everything that’s too complex for a mind to understand, will be indistinguishable from magic!”
The fix today for computer programming, is the same as the fix was thousands of years when we moved from Hieroglyphs to the Latin Alphabet. We need an “alphabet”, that can have its “letters” combined, to create any type of “logic” we wish to describe.
This is in fact easily done, and all system developers have a responsibility for doing such a thing, and are to some extent intuitively doing it, without realizing this is what they’re doing. In fact, this process is what we today know as “encapsulation” and “good architecture”. This is why we attempt to create modules and libraries, such that we can reuse code, and avoid repeating ourselves.
Unfortunately, the tools we have at our disposal today, are inadequate for creating this “alphabet”, simply since their ability to encapsulate is not powerful enough to express ourselves, such that we can create these reusable building blocks, we’re trying to create. A symptom of this, can be seen through the fact that 75% of all software projects today are basically failures to some extent.
To solve this problem, we need better encapsulation in our programming languages. And to create better encapsulation in our programming languages, we need better mechanisms for polymorphism. And to have better mechanisms for polymorphism arise, we need to completely ditch the concept of “Object Oriented Programming” as we know it today. Because in “Object Oriented Programming”, our “images” becomes too rich in their description, and hence too difficult to use. Today, OOP is the same for system development as the Hieroglyphs was to literacy. A “dead end”, destined to die out, and become replaced by more fine-grained constructs, accessible to the masses at large!