In computer science, compiler is a program that translates things that programmers write, such as "if CloseButtonPressed then CloseApplication", to things that computers are able to understand and execute, such as "0001010111001010111011000111100010101011110".
When the first compiler was written, someone had to write it in the machine code, the zeroes and ones that computers understand. They had to type in the numbers, or, more likely, punch holes into punchcards.
But from that point on, programmers were able to write human-readable programs instead of the inscrutable machine code. They just had to use the existing compiler to translate from the former to the latter.
Now imagine you are tasked with writing the second, improved, version of the compiler.
You can, of course, do the same thing again. You can type in the numbers, or maybe punch zeroes and ones into punchcards. But writing machine code is hard.
And now you have a better option at your disposal: You can write the new version of the compiler in a human-readable language and use the old version of the compiler to translate it into machine code!
Similarly, the third version of the compiler can be compiled by the second version of the compiler, the fourth by the third and so on.
That, by the way is not a hypothetical scenario. That's how the compilers are written nowadays.
Now, here comes the question: What if all the software disappeared overnight? What if the only thing we were left with was the human-readable source code of the latest version of the compiler? Would we be able to reconstruct the language and the compiler and get everything running again?
On one hand, the source code contains all the relevant information. It contains the full description of the language, its syntax and its semantics. It contains all the instructions needed to translate it into the machine code. It should be therefore possible to use it to create a functional compiler again.
But on the other hand, how exactly would you do that? The source code is, after all, just a pile of text. And there's no compiler to turn it into the machine code, into something that computer understands. It sounds like you are faced with a kind of chicken-and-egg problem.
Clearly, the source code is not enough. There's some information missing. But it's hard to pinpoint what exactly the missing part may be.
***
What if we found an undamaged T-Rex DNA in the gut of ancient mosquito trapped inside a piece of amber? Would we be able to grow an adult T-Rex? Would we be able to find out what colour they were, whether they had feathers and whether males attracted females by nightingale-like song?
On one hand, one regularly reads news about scientists being on the verge of resurrecting the wooly mammoth. It am no embryologist, but as far as I understand, the idea is that the DNA reconstructed from the frozen remains of mammoths found in Siberia would be injected into an elephant egg and grown either in an elephant female or maybe ex-vivo.
On the other hand, dinosaurs have no close living relatives. For T-Rex, there's no equivalent of what elephant is to mammoth. Maybe the DNA could be injected into an ostrich egg, the birds being the closest surviving relatives to dinosaurs. But given the evolutionary distance between T-Rex and ostrich, how likely it is that the biochemistry and embryology of the ostrich egg is similar enough to the biochemistry and embryology of the T-Rex egg to produce a viable offspring? I wouldn't bet much on it.
And even if that was possible, what if there was no living organism left, just a piece of DNA? Would we still be able to reconstruct the animal?
Although DNA encodes all the information about the organism, there's clearly something missing. And, again, it's hard to put your finger on what exactly it may be.
***
Central African economy is failing badly. CAR authorities therefore look around for inspiration and decide to adopt the Swiss model. Switzerland, after all, is a small multi-ethnic, multi-confessional country, just like CAR, and it was able to raise from being an obscure and poor backwater country to one of the world's most wealthy countries in just few decades.
CAR therefore adopts the Swiss constitution, Swiss political system, Swiss law, Swiss approach to bank secrecy, Swiss educational system. They establish a church choir in every village and start eating fondue.
But to everyone's surprise nothing changes. CAR economy is doing as badly as ever. Corruption is rife. The rule of law falters. The institutions that run like clockwork in Switzerland fail mysteriously in CAR.
Clearly, there's something about Swiss society that wasn't captured in the laws and institutions introduced in CAR. But, once again, it's hard to say what the missing piece could possibly be.
October 27th, 2019
In societies , there is no accurate replication mechanism. Most organizational information is either private property or implicit. For this reason, I am trying to digitize the social organization DNA. Another reason is efficiency. To easily fork and mutate organizations , in the same way we fork code.
Apostolis you are looking at it from the wrong perspective. Humans are the most important factor, not organizations. "Forking and mutating organizations" would fail just as the CAR-Switzerland situation fails. You need to capture human nature, human mind, not the mere creations produced by it (such as organizations). Even if you managed to digitize "social organization DNA", you still wouldn't have the complete picture; you would miss the most important factor — the human as individual. And if you then took a 'good' organization which is efficient, well-defined, working nicely (eg. the Swiss economy) and gave it to the wrong individuals (eg. the CAR government), it just wouldn't work. And since you cannot replicate human nature, or force Central Africans to think and behave like the Swiss, your effort is, I'm afraid, vain.
We do not need to know what is inside people's minds. We have a specification for that, called a job description. If you are qualified, then you can perform similarly to anyone else who qualifies.
For the same reason, we do not care how the cpu has been manufactured or how it performs its arithmetic operations, as long as it abides by the specification.
The main problem is to have the right level of abstraction. If for example, in a cpu, we ignore endianness , then we will get different results for the same program if it is executed in different cpus.
Having the precise specification of an organization helps in avoiding that problem.
Functional programmers call this referential transparency, or working without side-effects.
Can you elaborate on your comparison with referential transparency / side effects ? I don't see how they relate to the matter at hand.
I personally use Agda as a specification language, which is pure. If we model organizations with Agda, and our model of the organization is precise, it will be similar (or identical) to a pure function.
This means that if the environment changes but the input remains the same, the organization will behave the same.
Specifying the exact causes / inputs that affect an organization can let us replicate the organization to different environments and have the same predictable outcome.
Hello, interesting perspectives!
Emergent Behavior is difficult to capture.
Everything can be setup perfectly and "qualified" and yet still experience failure. There's always a missing piece.
Such a rabbit hole. Luckily, we're not alone on this adventure.
Post preview:
Close preview