Preamble

Today I want to write a bit about abstractions in the world of programming and how this generalises to many other places of human development

Abstractions

From the perspective of computer programming we call abstractions to those functionalities that “abstract” away some procedure into a black box (as I like to think of it). For example, today we write code in C and then compile it to machine code. But originally we wrote the machine code directly. The abstraction of compilers has allowed us to think of them as a black box and not have to worry about them. This in turn has made programming much more approachable and now we have languages like python that are just basically abstractions all the way down.

This is good

This abstraction is amazing as more people can forget about the way computers work and focus on the problem they are trying to solve. This allows people to solve harder problems and this is how this abstraction pushes the human development.

This is bad

On the other hand, now there is a problem where if everything we do is on top of an abstraction and we have no clue how these abstractions work we are limited by these same abstractions. For example if we abstract completely the way computers work then we would never find any way to make them better!

The Balance

Again like most things it is a balance. There is a reason why complex tasks are done in simple programming languages ( machine learning in python ), you want to focus on the problem and not on the tool. But it is important to have an idea of how the tool works such that you can use it to the best of its ability. With machine learning even though the programming is in python most execution heavy work is done by a C++ engine ( in the case of pytorch ), and most people that use pytorch would know this already and would also probably understand how the library is implemented. This knowledge allows them to use the library effectively and understand any problems that end up happening.