Extravagaria Workshop Wiki


Abstraction

Abstraction

In my tenure as the chief architect and SME on a long-term project that has seen people come and go, I have come to realize that the skill most deficient among software developers (and, of course, among people in general) is the ability to deal with abstractions--the ability to think abstractly and discover abstractions inherent in a problem. Abstractions are at the heart of metaphor, an important theme discussed in previous Extravagaria workshops.

The purpose of metaphor is to lead one into understanding something in a larger, and more abstract, sense--to gain insights not immediately apparent from the specific instance at hand. An abstraction allows one to understand something through a symbolic representation of its specific manifestation. And that is what computer software is ultimately--a model, or metaphor, of a distinct system. But the best software is an abstraction of the problem, not merely a metaphor. Once an appropriate abstraction is discovered in the problem, the software becomes highly maleable and adaptable.

Can this skill be taught? I wonder. I have certainly tried, and most often failed. Perhaps I do not have the ability to pass on this elusive skill. Is it, perhaps, like teaching creativity? When teaching art, it is mostly technical skill and historical development and context that are taught. Some have the magical ability to stimulate creativity in students, so that creativity appears where it did not before appear; but was it "taught", or just released?

--DarrenHiebert