Abstraction Is For Both Humans And Software, But Not SoftwareFiled Under Thought Stuff
It is funny how software engineers always tend to simplify problems with one additional level of abstraction; that is, the answer always lays in the next tier of thinking.
The original Von Neumann computer did not have CPU registers, and when Von Neumann was asked he responded “Any competent mathematician will be able to keep track of them in their head”, and as you can imagine CPU registers became the first level of computer abstraction. Then came the primitive data types, the first procedural languages, and then the grand daddy of them all OOP.
With concepts such as inheritance and polymorphism, there is no question why today’s software developers think and solve problems at such a high level. Don’t get me wrong – this is a great thing as it allows us to concentrate and be more efficient on solving real world problems. However, this has also become a very bad thing as the majority of us no longer understand how the basic computer works.
Humans (on a daily basis) do not look at a piece of fruit and say to themselves, “Oh my, that mass of molecules sure looks tasty”, of course not. This is because in order to function in our space we do not truly need to understand that level of detail.
However, in software we both do and do not need to understand the lower levels of abstraction for the software to work, and this is where we as modern software developers are getting soft.
I have met many young (and talented) developers that have never programmed in BASIC. Never even developed in C or C++. Have absolutely no clue what a semaphore lock is. With first languages now being Java or C# the days of algorithm analysis are withering away.
I guess what I am trying to say is, you can be the best orange farmer on the planet without knowing anything about molecular structures, but you can’t be the best software developer without knowing how your CPU works…