Monday, April 16, 2007

Computer Science, Mathematics, and abstraction

In a recent blog piece, I argued that mathematics does not help computer science students develop their sense of abstraction.

Mitchell left of a comment referring to an article on mathematics and abstraction. It makes the case that mathematics is all about abstraction, but we don't teach it that way. (I more or less said that we don't teach mathematics as abstraction also. So we aren't that far apart.) This is definitely a nice article, and I like its emphasis on mathematics as abstraction.

There does seem to be a difference, though. Computer science artifacts, i.e., software, are grounded in executability. From that grounding, one can factor and abstract elements to one's heart content and be sure, as long as one has done it correctly, that the result will be not only executable but more powerful and more elegant.

In mathematics, where is the grounding? The article uses numbers as an example of abstracting the notion of size.
No matter what collection you consider, abstract or concrete, it has a number that describes its size; no matter what type of objects your collections are made up of, the results of arithmetic operations will always describe the resulting collection accurately. Thus the simple statement that 2 + 3 = 5 is a statement that describes the behaviour of every possible collection of 2 objects, and every possible collection of 3 objects.
That's all well and good. It's a nice illustration of the mathematical notion of number as an abstraction. But is the step of going from the intuitive notion of the size of a collection to the mathematical notion of number mathematics, or is mathematics the step of formalizing this new notion of number and proving theorems about it? In my experience, mathematics has always been about the latter, i.e., proving theorems about existing abstractions. The actual process of coming up with the abstraction about which theorems should be proved is considered somehow pre-mathematics.

I think that the reason for that is the lack of groundedness in the abstracting process. Computer science is extremely fortunate that its artifacts are grounded in executability. Mathematics does not have that advantage. So mathematics can operate as mathematics only on already abstracted elements. By that time, the joy of abstraction has been lost, and one is stuck proving theorems about someone else's abstractions.

Of course good mathematicians make their own abstractions and then prove theorems about them. That's hard to do. And simply creating abstractions without proving theorems about them is not considered mathematics. One gets no mathematical credit for the abstraction step on its own. (Try to publish a paper that doesn't have any theorems in a mathematics journal.) So I'm still not convinced that mathematics as it is taught and practiced helps computer science students with the process of abstraction.

3 comments:

Anonymous said...

What I am about to say will shock some people, particularly mathematicians. My comment arises from my experience teaching computer science at university, after gaining a first degree in pure mathematics and a PhD in computer science.

I agree that contemporary computer science is very abstract. This is true, even if one only considers computer programming, which nowadays is only a small part of computer science research or even real-world computing. However, I think the problem is not really with the way that mathematics is taught (or only incidentally with this), but rather something more fundamental.

The problem is that many extremely good mathematicians are not good abstract thinkers. Rather, they are interested in, and good at solving, very specific problems. They do indeed use abstract formalisms to describe their problems of interest, and they may abstract upwards (to more a general problem) to solve them. But their interest is often NOT, first and foremost, in an abstract problem.

The mathematics literature is so full of examples, it is hard to believe that mathematicians have convinced anyone that they even deal with abstractions -- the Wiles Theorem (aka Fermat's Last Theorem), the Riemann Hypothesis, most of Hilbert's list of great problems are all very specific, not abstract, problems. Of course, the methods used to attack these problems have often been quite abstract (eg, Wiles' proof of Fermat), but the interest and motivation of many of the mathematicians involved is often not, I would argue, in abstraction. Indeed, one could even view the history of pure mathematics as one of long and repeated opposition to abstraction -- I am thinking of the opposition from other mathematicians to epsilon-delta arguments in the calculus, to non-Euclidean geometry, to Cantor's work on infinities, to set theory, to intuitionism, to category theory.

The problem is, as Edsger Dijkstra observed 30 years ago, that mathematics is still a craft, using ad-hoc methods on single-case problems. Why is it that the abstract mathematical language which computer science has found to be of most value -- formal logic -- was something mostly developed initially by philosophers, not mathematicians?

Anonymous said...

Reflecting some more on this, I think that part of the problem is that people imagine computer science and pure mathematics to be closer than they really are. IME, mathematicians in general have a mis-perception of the nature of modern-day computing and computer research, aided and abetted by those computer scientists who would like the world to think they are really mathematicians. There is a lot more to computer science than P vs. NP, and most of that lot more requires abstacting and abstract-reasoning capabilities for which philosophy is a better training ground than mathematics.

Mathematics and computer scientists are not siblings, but cousins. In comparison, computer science and philosophy could be brothers. With the rise of the Internet and distributed computing generally, economics, sociology and political science are also brothers to computer science. Witness the rise of disciplines such as e-commerce, multi-agent sytems and computational social choice.

Russ Abbott said...

You may be interested in the discussion, which continues at this post.