Thoughts on Abstractions, structures and synthesis
Some thoughts around it
When you see the complex machines, structures or buildings what would you think of its creation?. Obviously, it is such a weird question without enough context, imagine that you are going to create that thing.Do you see that thing as a whole gigantic one thing, or pieces of parts.? If you are smart enough to figure out my next arguments, then congrats, this essay is going to be quite intellectual for your standards. Before going further, it is not about practically building these things, but on how we imagine designing those complex things , whether it might be in art, drawing or even computing.
In my childhood , when I playfully worked in a simple construction place one time, there I had to pass bricks to the next person near me, this chain would continue upto mason. Once I passed the brick, instead of expecting the next one, I always watched the passed brick upto, it’s placement in a new wall. The person, who stand near and noticed me, mentioned one thing “Hei , just focus on your part”, this is simple yet powerful statement, the complex system/process need not to be a single entity that contains all complexity, it can be the sub-processes or states that has a dedicated, simple and defined steps. If you wrote computer programs or logics in the past , you might be aware of these things , but it is not only about abstraction or modularity of code.
To start simple, repeated patterns are elements of abstraction in most of the things. Such as webs, abstract drawings , and fine art products. In terms of software the repeated states can be termed as recursive states. Recursion, as a minimal theory, creates a huge impact on designing or solutioning most complex systems or designs. So if each individual state is designed to work properly then the correctness of the entire system won’t be compromised. In terms of puzzles, sudoku, tower of Hanoi and some other complex puzzles are reduced into the above approach. In this place , the recursion can be thought outside of just the programming context. In the TOH (Tower of Hanoi) , for each recursive step you just need to solutionize one ring and for next (n-1) rings will be solved in further states. And the final state will always be a special case.It might be hard to simulate and verify the things, until you start to embrace that complexity of thinking. Once you start doing this, you will always focus on the correctness of a single state , instead of imagining the contracts between all. So worrying about complexity or ultimate final solution is not needed, after some point.
- In the arithmetic addition process, whether via hand or inside the computer , addition of digits is the state , and the carry that flows to the next states is a contract. And multiple adder circuits (Full Adder) can be joined together for addition of larger complex numbers.
- In sudoku , checking the existence of numbers in the grid, filling the non-existent one and if you have no option then backtracking to the previous state is the fundamental rule of each state, until hitting the final block.
And there are a lot more examples other than those mentioned above.
Is it necessary that all states should have the same behavior? . Of course , that is what defines simplicity , right? If each chunk behaves in a different way, then it could not be a simple abstraction , even if it works. But that individualism could be presented at a group or layer level , rather than a single entity level. Human body could be a perfect example for logical abstractions.
In an overview mode, the human body’s abstraction layers can be noted as cells, tissues, organs ,organ systems in a bottom to top manner. Each layer has individual behaviors , and is made up of almost similar sets of states. And in computers ,semiconductors have the same behaviors ,mostly all are made up of a single gate , but one layer above , elements of computer architecture, takes place and provides different behavior to different groups, such as ALU, Processing unit, and stack. Even though made up of the same gates. This is the thin layer of abstraction that creates the illusion that they are different layers. They are not different things, but they are different in terms of logic that is created by the abstraction, as same as cells and tissues.We can’t just underestimate the usage of the word ‘illusion’ here. It is an illusion that is almost not simulatable and understandable to humans. Imagine just a bunch of NAND gates running as an entire computer. These logical abstraction layers are as invisible as powerful.
When talking about abstractions, it is unavoidable to mention the work called, Structure and interpretation of computer programs. In chapter three, the author introduces the concept called , “Metalinguistic abstraction”, which is the real world example on how powerful these simple abstractions could be. The structure that allows both code and data , in a single place, is a system here. And data acts as a tail state , and code will decompose into code and data again. Maybe we will see that later.