3

In computer science and programming we talk a lot about "abstraction" by which we mean to create ever "higher" level code to that accomplishes increasingly complex task with less programmer decision making. See Opposite of verb “abstract” and noun “abstraction” for some context.

However, abstract means, "to drag away, detach, pull away, divert" which is not what programmers do when we create abstractions in software.

For example, back-in-the-day, text was represented by sequences of of byte codes e.g.

078, 111, 119, 032, 105, 115, 032, 116, 104, 101, 032, 116, 105, 109, 101

... which we "abstracted" to arrays of characters:

[N,o,w, ,i,s, ,t,h,e, ,t,i,m,e]

... which we "abstracted" to become a string:

"Now is the time"

... which in modern languages is actually a class or similar structure:

"Now is the time".methodThatManipulatesString

At each stage of "abstraction" the minutia of working with textual information didn't disappear, we didn't remove it, and we really didn't (arguably) turn the textual information into some higher platonic form. All we did was hide all the grubby details and then bolt on yet more functionality with it's own grubby details hidden away. If you dig down into any language or platform, the details are all still there.

It is somewhat analogous to a mechanical watch. The watchmakers can tell the time by looking at the gears and springs of a watch but for the rest of us, they hid the watches complexity behind the hands and face of the clock.

So, I'm looking for a term, preferably latin, conveys this idea. Programmers already use "encapsulation" but that just means, "to put in." I want a term meaning "to hide, but not remove complexity" preferably something linguistically and conceptually related to "abstraction" itself.

I think it's important in training to make sure new programmers don't think that abstracted code contain less complexity under the hood than the non-abstracted code despite it's more simple superficial appearance.

  • you used "to hide" yourself in your question, what's wrong with that? – msam May 8 '14 at 14:35
  • Back in the day we turned valves on and off. Absrtraction, explained correctly, is about as good as it gets. – Frank May 8 '14 at 14:48
  • "to hide" conveys the sense of disguising utterly which "abstraction" doesn't do. Something hidden is completely invisible. – TechZen May 8 '14 at 21:08
3

Personally, I like the term to hide complexity which you already mentioned in the question. However, I find nothing wrong with the terms to abstract or to encapsulate. The meanings you listed are the literal meanings of their latin roots, but in the case of IT (and not only there), the meaning is used metaphorically:

In the case of abstracting, we detach/divert from some concrete thing into a more general idea. For example, John Doe is a concrete man while the term "man" describes any of a general group of persons and is therefore more abstract. You can point at John Doe with your finger because he's a concrete person. You can't point your finger at "man" in general because it's an abstract term - it is detached from the concrete. You can't see some of the details like you could with a specific person (like their hair color) but they are still there. The same happens with abstractions in computer science - details get hidden as we detach from concrete representations into a more general view of the issue (like going from byte representations to abstract "characters"). This is a perfectky valid usage for the term abstract.

Similarily, the term to encapsulate is widely used in computer science in the metaphorical sense. The "putting in" here has the meaning of putting something inside something else in order to hide details from view but to be able to use it more conveniently. It's like putting several small objects inside a box - you can't see the individual objects any more but they sure are more convenient to carry this way. This meaning of to encapsulate is also well established in the IT industry and perfectly valid.

  • Thanks for the insight but the problem is that I've found that abstraction has a shading of meanings that seems to confuse novices. Within the CS context it has a definite meaning but in general-use it implies to make "academic", "cartoonish", "a sketch" or "less real". It implies dumbing down or less relevant to practical concerns. Novices seem to see abstraction as a means of understanding the broad strokes, like "ignoring friction" in a physics problem, but then you have to make things complicated again to get real work done. – TechZen May 8 '14 at 20:36
  • Encapsulate seems to lack the connotation of an interface, probably because of the association with medicine in capsules which is a smooth featureless shell. Novices seem to interpret it as a box you put code in to store or move it, then unpack it to do work. I keep running into resistance to "abstraction" and "encapsulation" and upon inquiring about, the novices all feel they are loosing some functionality or control without gaining anything. I've found just the right phrase can give people that ah ha! epiphany so I'm trying to route around the preconceptions of the current terminology. – TechZen May 8 '14 at 20:42
1

The verb I suggest is to shield with the meaning of:

  • To cover up; conceal.

    unluckily it has no latin origin, but it coneys the idea of covering and protecting ( the underlying data).

  • Google translate says to the latin for "to sheild" is "arma" so maybe "armaize" that should be nicely confusing. – TechZen May 8 '14 at 20:45
0

'Obscure' might be more fitting; it has the meaning of hiding, but no connotation of removal, and derives from latin 'obscurare' to cover over/make dark.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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