The world is made up of a many wonderful and varied things.
Different colours, different shapes, different uses, each individual, each unique. To be able to function in the world as we know, humans have the ability to group and categorise things. If we had to deal with things one by one it would cause chaos. The following paper gives a deeper analysis of this statement. Giving an insight to abstraction, primarily within computer science.
“Abstraction is arguably the most fundamental intellectual activity in the field of computer science. Problem solving is made manageable by our ability to approach it at different levels of abstraction, which vary according to how closely we focus on the details.”
Abstraction is one of the conceptual cornerstones of computer science. It forms the core for many aspects within computer science. Providing a methodology for the design of programming language. Helping to develop new programming paradigms. Abstraction skills are essential in the construction of appropriate models, designs, and implementations that are fit for the particular purpose at hand. Abstract thinking is essential for manipulating and reasoning about abstractions. Whether they are formal models for analysis or programs in a programming language. It underlies the invention of notions such as:
procedural and functional abstraction
objects and classes
But what is the nature of abstraction in computer science? What is its underlying philosophical explanation? Abstraction in philosophy is the process, in concept-formation, of recognising among a number of individuals some common feature. On that basis forming the concept of that feature.
Some of the notions of abstraction in computer science were either inspired by or investigated by means of abstractions in mathematics.
The difference in abstraction within mathematics is that it applies to information neglect. Whereas in computer science it is information hiding. So in mathematics it is the process of ignoring what is judged to be irrelevant. For example the colour of similar shapes. In computer science the details that are ignored at one level of abstraction must not be ignored by one of the lower levels. This would apply to programmers who do not need to worry about the precise location in memory associated with a variabl. Whereas the virtual machine will deal with memory allocation.
Computer science commonly presents levels of abstraction. Wherein each level represents a different model of the same information and processes. Each abstract, “higher” level builds on a “lower” level. Which tends to provide an increasingly “granular” representation. For example, microcode level will build on the logic gate level. Instruction set level builds on microcode level. Followed by operating system level, assembly level, higher-order language level and finally the application level. These levels depict a typical computer system with each using its own computer language. Each level is embodied, but not determined, by the level beneath it. Making it a language of description that is somewhat self-contained.
Abstraction has played a part in the development of many aspects of computer science
Even as far back as the 17th century. Leibniz’s idea of a universal language to solve all problems can be seen as abstraction. This is a high level of abstraction. Leibniz’s dream is the abstraction of languages like first-order logic and knowledge representation. Which is closely linked to Artificial Intelligence. The difference is in this case is the idea has not been fully realised. Over the years scientists and mathematicians have strived to achieve such a language and in doing so made many discoveries. One of the most fundamental ones is the Turing machine, developed by Alan Turing. This was a theoretical calculating machine. A Turing machine is the abstraction of a computer. Could it be that Leibniz’s dream is the abstraction of a compiler?
Abstraction is vital in the development of computer science.
By seeing the whole the little pieces can be developed and worried about later. There are many small aspects of abstraction within computer science. Like in the programming languages themselves. However these have arrived from a higher level of abstraction. It is obvious that without abstraction at this level that all the smaller objects or parts would not have been formed.
The conclusion of this post is that abstraction can be defined as:
“Abstraction is the process of stripping away individual characteristics and thinking about only those qualities that matter for the task that applies.”