[PRL] basic terminology: abstraction

Matthias Felleisen matthias at ccs.neu.edu
Sat Aug 23 12:16:47 EDT 2003


On Thursday, August 21, 2003, at 11:37 AM, David Herman wrote:
> A recent example of where using the word "abstraction" for these two 
> different ideas leads to confusion is Guido van Rossum's addled blog 
> entry about loops and recursion:
>
>    I'd say that a loop is a higher-level concept than recursion; 
> recursion
>    is more powerful, but also more low-level, like assembly language. 
> ...
>    I had my epiphany about loops as a higher level of abstraction than
>    recursion ...
>
>    <http://www.artima.com/weblogs/viewpost.jsp?forum=106&thread=4550>
>
> If loops are higher-level than recursion, then they are a 
> *specialization* of recursion. Calling them a "higher level of 
> abstraction" makes it sound like they are *more* abstract, when in 
> fact he's saying the opposite. (The result is that anyone who's heard 
> Matthias's lecture on "Scheme's 241 Loops" choked on their breakfast 
> upon reading Guido's blog.)

I don't have answers to your implied questions. I have two or three 
comments:

1. Guido and I are in complete agreement. He has some intuition; I just 
wish he
understood 311 and friends.

2. I think most (99%) of the so-called computer scientists are confused 
about
abstraction, generalization, and friends. So it's not surprising when 
nonsense
keeps spreading. The problem is that programming is on one hand too 
easy and
on the other way too difficult. We will never overcome this problem.

3. I'd like to propose that you think about an abstraction layer as a 
new programming
language and that you read Hudak's tech rpt on programming languages as 
the ultimate
abstraction. He's not the first one to recognize this, but he is the 
first one to put it as a nice
slogan.

4. As for a boundary, I really think that figuring out an existential 
in logic and proof
theory and then understanding how this relates to programming is the 
best possible
way to get at this. Just think
   Exists Stack::Type.
      push : Stack X -> Stack, pop : Stack -> Stack, top : Stack -> X, 
mt : Stack -> boolean
and I won't tell you what it is. That's a good boundary. Now start 
reading Bob's paper
from there and a lot of things become clear. (That's where Bob's 
tremendous contribution
is and I wish people understood this. Then again, he makes no effort to 
communicate, so
perhaps he deserves what he gets.)

-- Matthias



More information about the PRL mailing list