Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

As I understand it, abstraction is the term we use for when more meaning is created out of something simpler without altering it. It is derived from the latin verb abstrahere (to ‘draw away’). For instance, text is just one abstraction of binary data—as are bitmaps. So, in computers, text and bitmaps exist on top of (are implemented in terms of) binary data.

My question is: what is the opposite term? If I want to know the possible more basic things that bitmaps could be implemented in terms of other than binary data—things like tiles for a mosaic or fabric patches for a patchwork quilt—what am I asking for? Is there a word for that?

Abstraction has connotations of generalization and the opposite process of that is specialization. IDK whether that helps.

share|improve this question
This may be better suited at English.SE. –  Péter Török Oct 8 '11 at 9:59
In some cases simplicity. I've seen plenty of terrible abstractions that have only made things more complicated ;| –  Liam William Oct 8 '11 at 17:48
add comment

closed as off topic by Glenn Nelson, Martijn Pieters, Kilian Foth, StuperUser, Mark Booth Jan 25 '13 at 14:09

Questions on Programmers Stack Exchange are expected to relate to software development within the scope defined by the community. Consider editing the question or leaving comments for improvement if you believe the question can be reworded to fit within the scope. Read more about reopening questions here.If this question can be reworded to fit the rules in the help center, please edit the question.

8 Answers

up vote 7 down vote accepted


Abstraction is short words, is the mental process of obtaining a (reduced) model of a real world thing, and "compact" into a concept or an idea.

So the opposite is to take a concept or an idea, and turn it, into a reald world thing ;-)

share|improve this answer
I don't know if I would so much call this the opposite so much as a complementary concept. As in, every time you have an abstraction in programming, you also have the implementation that the abstraction is hiding. However, that seems to be what the question is asking for. –  jhocking Oct 8 '11 at 16:03
@jhocking The brakes & the accelerator of a car are opposites, yet, also complements. Cheers. –  umlcat Feb 20 at 0:52
add comment


Concretization - As in C++ Concrete class

and in some cases:

Specialization - As in C++ Template Specialization

Added 12-June-2012: This is a lovely term:

Reification - As in several programming languages

share|improve this answer
While I don't disagree with the use of 'concretize' - it's a bit of a cumbersome word... wouldn't 'concretion' be better? thefreedictionary.com/concretion –  HorusKol Oct 9 '11 at 22:01
Concretion for sure. –  Zachary Yates Jan 25 '13 at 0:13
+1 for reification. –  Curt Nichols Jan 25 '13 at 0:38
Is it set in concrete then, after the concretion? Just asking :-) –  JensG Feb 6 at 23:12
add comment

In the context of programming its reduction.


As in: "I have reduced the problem to its simplest terms."

share|improve this answer
add comment

"Concrete" is the opposite of "abstract", so the opposite of "abstraction" is logically "concretization". There isn't exactly a meaningful opposite however since you generally only talk about abstraction and rarely think about it's opposite.

share|improve this answer
add comment

Let's start from scratch. First of all, what indeed is abstraction?

The Problem/Motive

When you program, you often have to solve very specifically detailed problems.

The primary motive for abstraction is when you might find yourself at a situation where your program handles the whole problem as a single unit, with many discrete little peculiarities that require attention and understanding. The problem here is that it it's hard for human beings to handle such huge amounts of data at once.

The Solution: Abstraction

In order for you to be able to understand just what you need to in order to implement your idea, you extract detailed solutions into simplified abstractions.

For example, let's look at ORM (Object-Relational Mapping), where SQL is abstracted into objects.

In order to insert a new item to a database without abstractions, a programmer has to know SQL. So to insert a new item a programmer needs to remember the SQL syntax for inserting a new item into a table:

INSERT INTO Items (field1, field2) VALUES (value1, value2)

But with abstractions, the programmer only needs to be aware of the idea of what he wishes to do. An object-oriented abstraction might look like:

Item item = new Item(value1, value2)

You can even go a bit further and think about the fact that SQL itself is a huge abstraction for tons of sophisticated data-storage structures and algorithms, which are fully at your fingertips for the price of learning a simple declarative language.

The Opposite of Abstraction

Based on what we now defined that abstraction is really all about making it sufficient to only know the quintessential concept at hand, we can easily deduce that the opposite of abstraction is in fact esoterica, where usage or understanding entails having some sort of specialized knowledge of the subject's peculiarities.

share|improve this answer
add comment

"Distraction" -- as in what happens when a piece of code cannot be understood without being aware of many tangential details of what actually happens when it is run.

share|improve this answer
add comment

Abstraction does come from abs-trahere and I'd say it is best translated as "draw from" (although the literal translation would thus be de-traction). I've tried to explain that in a blog post.

Abstraction is the process of drawing the essence from something concrete. Concrete things are usually enormously complex. For example, if you look at the closest chair you can see, there's a lot of details, that actually constitute it. Its material, its structure, its shape, and so on. But none of these things is really are essential. What's essential is, that you can sit on it.
Your "abstract" of something is what you see, when you look at it. When you look at that chair, you see a chair. A wrestler might actually see a weapon instead.

So the result of abstraction really is the essence of something from a given perspective.

In the case of a bitmap or a text, the abstraction is, that you think of a given value as something fulfilling a specific purpose. Depending on the programming language at hand, you can represent your thinking within the language semantics.
But for you, it doesn't really matter, whether the underlying data is "binary". It would work just as well if it were read in real time from a roll of toiled paper, that has the data encoded with 13 bit hole punching pattern. You don't really care.
Of course implementing a concrete bitmap using binary data stored in memory has some obvious advantages and most people will prefer that. Yet, there's still a number of ways to actually encode bitmap information for example. And it might even make sense to use different approaches along side each-other. But except for the little piece of code, which chooses the representation based on a number of constraints, you do not want to have any knowledge about the concrete nature of the bitmap. You only care about what's essential from your perspective. In this example it's probably a number of methods to manipulate pixel data.

Because an abstraction is actually first and foremost an idea (as in an ideal model of something), the opposite might be called "incarnation". Since programming is rarely a carnal thing, one might go with "implementation", while abstractions are often represented as interfaces.
Concretization as said by @Lior, is also is a very suitable word, even though it focuses more on the means (i.e. rendering something concrete - which of course is inevitable) rather than the actual goal (i.e. to implement an idea).

share|improve this answer
add comment

Abstraction is the process of removing specifics to generalize something. If abstraction is removal of specifics, then maybe the opposite of abstraction is specification.

share|improve this answer
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.