Welcome

  • This is the blog for Intentional Software Corporation. We keep it open for comments as we seek a dialog with the community. Each participant will be trusted to participate with integrity, decency and respect for others.
  • Visit Intentional Software Corporation

« Getting the experts involved | Main | Maximal Fun Programming »

September 29, 2005

TrackBack

TrackBack URL for this entry:
http://www.typepad.com/services/trackback/6a00d83451741069e200d83491b93f69e2

Listed below are links to weblogs that reference Appropriate Levels of Abstraction:

Comments

RefuX

>For example, when choosing how to sort a list
>, does it matter what algorithm to use?
>Does it have to be optimized for time or
>memory consumption, or maybe both? It
>obviously depends on the situation.

That seems to me to be the real crux of the problem. Even the same code (at the same level of abstraction) needs to have different characteristics depending on the situation!

Sometimes when called it would be better to use one type of sorting algorithm verses another, or maybe in some situations we don't need to ask the database for data we can just ask the cache.

Let’s face it, the code is dumb, there is no higher lever picture.
We need to figure out how to encode real useful and actionable data so code path decisions can be made at runtime.

Steven Davis

Very nice site. Please keep updating it. thins that excited you at 14: http://www.institutions.org.uk , right Player will Anticipate Tournament without any questions thins that excited you at 14 , Table will TV unconditionally substances that cure you

Paddy

It seems to me that prgramming languages of higher levels of abstraction tend to specialize in either their application area or in their programming paradigm.

Often parts of a problem could be better solved in a different language, if there were easier ways to develope in multiple programming languages then savings could be made.

- Paddy.

Scott E. Schneider

Magnus, I enjoyed reading your essay -- we tend to get stuck in the mind frame of using general-purpose language for domain-specific problems (and this idea is usually enforced by management).

As far as drawing a box and calling it our system (at the highest-level of abstraction) -- I say if I am able to do this and have the system meet my requirements, I'm happy :--)

Wes Isberg

I like the prospect of being able to work at appropriate levels of abstraction, but I'm not sure this completely defines the problem that (I hope) Intentional Software is solving.

I find in practice that software systems are not so much produced but evolved, better defining and meeting certain needs. In the past, abstraction levels often represented different stages of this process -- early high-level designs, middle models generating code, and end-stage bug fixes in the code -- with the result that code "timed out" because it became too hard to make the kinds of changes you'd like.

So while the idea of "degrees of freedom" can help select and define a particular abstraction level, it doesn't address the problem of anticipation: it shouldn't be the case that an early software artifact has to anticipate its possible changes. While the original intent is relevant to the expression of the code, it should not entirely determine what can be done with the code. Conversely, it should be easy to make unanticipated changes in light of new information.

The cost of changing that intention is often bound up in the form of the expression. For example, a code pattern is easily named and understood, but typically implemented as a complex protocol spread across a number of methods and classes, so changing to another pattern -- e.g., from a push- to pull- stream -- can be quite hard. The harder it is, the more design decisions have to be made based on guesswork.

In my experience, systems that work to permit one to move between abstraction layers seamlessly have also made it extremely difficult to make unanticipated changes. Conversely, source code is easy to understand and edit, and as a form it has flourished in the face of many efforts to replace it, notwithstanding the lack of seamless abstraction layers. I'm hoping that Intentional Software can make a form that accomodates the evolution of software and lowers the cost of making unanticipated changes.

So I'm hoping that in trying to match the degrees of freedom to the problem at hand, Intentional Software is considering the cost of unanticipated change in the process of problem/software co-evolving.

Magnus Christerson

Thanks for all the great comments and questions. I wrote a new blog entry to respond.

Verify your Comment

Previewing your Comment

This is only a preview. Your comment has not yet been posted.

Working...
Your comment could not be posted. Error type:
Your comment has been posted. Post another comment

The letters and numbers you entered did not match the image. Please try again.

As a final step before posting your comment, enter the letters and numbers you see in the image below. This prevents automated programs from posting comments.

Having trouble reading this image? View an alternate.

Working...

Post a comment