Abstractions - An organised chaos

kandarp gautamkandarp gautam
7 min read

Quite often we notice there’s a new framework released around the globe and trend chasers start chasing it. Soon we see it becoming hype and we observe a global shift towards that technology. Suddenly, we realised the new way of doing things wasn’t that good and maybe we should be switching back to plain old Javascript and CSS instead of some new fancy framework.

It might sound like people are always exploring, experimenting or always on the bleeding edge of technology but still all this progress doesn’t seem like progress.

Somehow anything new does not contribute anything new.
- Kandy

Then how can we have progression?

Progression

It has not been like this since the very beginning. We know when things progressed drastically. We discovered electricity but we needed to control the flow of electricity. That’s why we invented switches. Then we came across semiconductors such as silicon and used them to make tiny switches called transistors. We may improve the transistor and it might sound like progression but it is not. It is an improvement but not a progression. Moving ahead, researchers used their brains and found that there are different number systems like the decimal, octal, binary, Hexadecimal, etc. These are the most prevalent but adding more types is improvement but not progress. Is binary the smallest number system? No. The smallest number system is a unary number system. For example, 5 is represented as 1 1 1 1 1. As we see the higher we go with the number system, the fewer decimal places we need and the bigger number we can represent. It is an improvement but not a progression. We use numbers and arithmetic to aggregate. Some of the aggregations are sum, count, average, etc. But Aggregation itself is something which we call “Abstraction of detail”. For example, If I ask you how many days there are in a week, you can answer this question in 2 ways i.e. name every weekday like Monday, Tuesday, Wednesday, etc or we can say 7. In both ways, we lost the context but the less abstract one is closer to the context of the question. We might have an answer 7 for a question but 7 is also a prime number. 7 is also an answer to the number of colours in a rainbow. Moving ahead, doing arithmetic with binary gave us the theoretical possibility of using electricity to make the first basic computer which we called a calculator. For a more compact calculator, we used transistors. To perform logical operations we needed to combine transistors to form logic gates. For more complicated computers that we use today, logic gates combined to form modern circuits and chips which is nothing but abstracting lower-level components into a higher-level component.

What is the point of me stating all this?
There are only 3 ways in which we can make progress:

  1. “Improvement” to X.

  2. “Integration“ of X with Y.

  3. “Abstraction“ of multiple X and/or Y to form higher level component Z.

Moving Ahead

  1. Improvement - makes a system more efficient.
    However, we can see that improving something can become hard beyond certain limits of physics. Such as at some point we are going to hit a physical limitation where we cannot reduce the size of a Silicon wafer. At this point, it would be harder to make CPUs faster and we might have to switch to optical computing or photonic computing.

  2. Integration - gives the system new superpowers.
    Integration is pretty interesting, as it unlocks new potential. When we integrate brakes with the bicycle, it gives it new capabilities. That’s what CSS did to HTML. That’s what Javascript did to static pages.

  3. Abstraction - allows scaling by abstracting the complicated details.
    HTML, CSS and Javascript helped us to make front ends and together we combined them to form an abstraction called “Framework“. This framework can be a CSS framework like Bootstrap or Tailwind. This framework can be a JS Framework like React and Angular. This can be a frontend Web Framework like Blazor. Or this can be a C# framework like ASP.NET.

The Problem with Improvement

Currently, we have hit various saturation points, especially on the web where discovering something new is either “improvement-based“ which is harder as core technologies can only be improved so much and they will eventually reach a saturation point such as CSS is harder to improve. React is an abstraction of Javascript to make reactive components. It is hard to improve Javascript as it reaches its limitations as it is dependent on the improvement of browsers. Improvement of browsers may depend on the improvement of computer systems or having more access to system hardware. Each improvement by a lower-level component leads to unlocking the scope for improvement in higher-level abstractions but it would show diminishing returns as we are close to saturation point. For example, you may be a good chess player, but at certain point, progressing further is extremely hard which makes it almost impossible physically.

Improvement shows diminishing returns as it reaches a saturation point but creates a scope for improvement for higher level abstractions.

The Problem with Integration

Mainly it comes down to having an intersection of knowledge of Fields that is distant. Integrating tech with healthcare becomes HealthTech. Integrating tech with education becomes EdTech. Integrating virtual objects and the real world becomes Augmented reality or Mixed reality. It gives you new super powers and it is something that is very much visible in our daily lives. If you are building a product or service, Integration is the easiest domain to crack. If you Integrate Artificial intelligence with robots, you get a helper or humanoid that can perform tasks like humans 24/7. This is the future Tesla or Boston Dynamics like companies are trying to achieve. The problem with integration is that it is harder to do and is resource-intensive because of limited knowledge and sometimes the individuals who lie in the sweet spot i.e. with the knowledge that intersects both the distant domains may not exist or maybe very few depending on how niche the market is.

Integration is difficult to achieve with limited knowledge of domains being integrated but it is ground-breaking.

The Problem with abstraction

The more we abstract we realize we can further break down the component into smaller pieces. For instance, Consider a computer as the root node. The computer has hardware components and software components. There can be many hardware components and many software components. Both hardware and software components can be subdivided. Software may be using libraries and modules. and Hardware like a keyboard has LED lights, keys, wire or Bluetooth modules if the communication is wireless. The more we abstract, the more detail we lose. While some use this logic to oppose abstraction it is a natural progression when you want to scale a system. We do not code software in binary. The binary was abstracted by the assembly. The assembly was abstracted by procedural language like C. C was abstracted by object-oriented languages like C++ and C++ was abstracted by languages such as JAVA or C#. And if we abstract it further we get component-based software engineering (CBSE) or service-oriented architecture (SOA).

Abstractions may lose detail but it enhances usability and scale well.

Conclusion

When we know how to use Improvements, Integrations and Abstractions properly,
we will be able to create efficient systems. You might ask then it means that someday we will be able to create a perfect world. Right?

Wrong. Because of the Nature of existence, humans and the cosmos are in chaos. And no matter what you do, people and situations will arise that would be beyond the scope of your perfect system and will start to test the boundaries and break rules as the system that is part of the cosmos cannot encapsulate the cosmos. In simple terms, If A is a subset of B, Then A can never encapsulate B especially when B is expanding. In the abstract, everything is just organised chaos.

The existence is nothing but an organised chaos.
- Kandy

0
Subscribe to my newsletter

Read articles from kandarp gautam directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

kandarp gautam
kandarp gautam

Dedicated full-stack .NET developer and software consultant based in Noida, India. Proficient in crafting robust solutions using ASP .NET Core Web API, SPA, Azure cloud services, minimal APIs, and microservices. Passionate about building products that drive business success and personal growth.