Wednesday, December 3, 2008

Dijkstra and Teaching Computer Science

I was skimming through Edsger Dijkstra's "On the Cruelty of Really Teaching Computer Science" (or the typed version) when one particular paragraph caught my attention:
We all know how we cope with something big and complex; divide and rule, i.e. we view the whole as a compositum of parts and deal with the parts separately. And if a part is too big, we repeat the procedure. The town is made up from neighbourhoods, which are structured by streets, which contain buildings, which are made from walls and floors, that are built from bricks, etc. eventually down to the elementary particles. And we have all our specialists along the line, from the town planner, via the architect to the solid state physicist and further. Because, in a sense, the whole is "bigger" than its parts, the depth of a hierarchical decomposition is some sort of logarithm of the ratio of the "sizes" of the whole and the ultimate smallest parts. From a bit to a few hundred megabytes, from a microsecond to a half an hour of computing confronts us with completely baffling ratio of 109! The programmer is in the unique position that his is the only discipline and profession in which such a gigantic ratio, which totally baffles our imagination, has to be bridged by a single technology. He has to be able to think in terms of conceptual hierarchies that are much deeper than a single mind ever needed to face before. Compared to that number of semantic levels, the average mathematical theory is almost flat. By evoking the need for deep conceptual hierarchies, the automatic computer confronts us with a radically new intellectual challenge that has no precedent in our history.
Wow. No wonder students find computer science - in its pure form - so hard. It does seem that few are capable fully understanding the big picture. I include myself in this. Though one of my strengths is to understand a problem from a bird's eye view in the beginning, then work my way down into the details, this still works at a much smaller scale than the ability to inherently know the whole hierarchy of computing.

Later in the article:

In the long run I expect computing science to transcend its parent disciplines, mathematics and logic, by effectively realizing a significant part of Leibniz's Dream of providing symbolic calculation as an alternative to human reasoning. (Please note the difference between "mimicking" and "providing an alternative to": alternatives are allowed to be better.)

Needless to say, this vision of what computing science is about is not universally applauded. On the contrary, it has met widespread --and sometimes even violent-- opposition from all sorts of directions.
There are several examples provided that aim to prove that pure computer science is not being widely accepted. I'd like to comment on these examples (skipping the zeroth) based on my experience since entering the field more than 6 years ago.

(1) the business community, which, having been sold to the idea that computers would make life easier, is mentally unprepared to accept that they only solve the easier problems at the price of creating much harder ones.

I'm reminded to my co-op terms at Corel and Ross Video. I had the privilege (?) of speaking or hearing from customers at both companies. Between these users and the business managers making the calls, it was amazing what they thought would be trivial to implement, and how little time they figured it should take

(2) the subculture of the compulsive programmer, whose ethics prescribe that one silly idea and a month of frantic coding should suffice to make him a life-long millionaire

Ah, the dreams of the young and fresh of mind. Of course, these days, we've seen a very select few who have accomplished this (or at least come close, since most things do seem to take more than a month code). This further fuels the dream. Of course, this whole process seems to have little to with computer science and more to do with an entrepreneurial spirit.

(3) computer engineering, which would rather continue to act as if it is all only a matter of higher bit rates and more flops per second

Some of my engineering friends (who I should note are not computer or software engineers) often ask me about the difference between computer science and engineering. In some ways this sentiment is a good description. I don't mean this as a slight to the engineers at all, because the world needs us both.

(4) the military, who are now totally absorbed in the business of using computers to mutate billion-dollar budgets into the illusion of automatic safety

...and they're still trying. On the other hand, the monetary support the military does put forth has resulted in some pretty darned cool research.

(5) all soft sciences for which computing now acts as some sort of interdisciplinary haven

I'm not entirely sure whether I understand this point, but I suppose it's a comment on such marriages as that between psychologists and computer scientists? Personally, I love the interdisciplinary nature of computer science. I think it allows people to find motivation for solving difficult problems (once they've seen the application).

(6) the educational business that feels that, if it has to teach formal mathematics to CS students, it may as well close its schools

What a shame this would be. Some schools like the University of Waterloo do give computer science degrees under the math department, so there is hope. But even at my school, students demand a "useful" degree, and as such want to learn things they will use directly in the field. Since schools need students to make money, and they need money to provide education, the world of computer science degrees has evolved to allow a practical, rather than theoretical, approach to those who want it.

That leads into the paragraph following the examples:
The problem with educational policy is that it is hardly influenced by scientific considerations derived from the topics taught, and almost entirely determined by extra-scientific circumstances such as the combined expectations of the students, their parents and their future employers, and the prevailing view of the role of the university: is the stress on training its graduates for today's entry-level jobs or to providing its alumni with the intellectual bagage and attitudes that will last them another 50 years? Do we grudgingly grant the abstract sciences only a far-away corner on campus, or do we recognize them as the indispensable motor of the high-technology industry? Even if we do the latter, do we recognize a high-technology industry as such if its technology primarily belongs to formal mathematics? Do the universities provide for society the intellectual leadership it needs or only the training it asks for?

I invite you all to read the rest of the article (and the beginning in its entirety, for that matter). We don't always get an opportunity to think about what we do in this way.


PhizzleDizzle said...

This is a great post. Thanks.

I found your blog by searching for "female computer science" in my google reader - not many came up, but yours did, and I enjoy reading it.

Gail said...

I'm glad you liked it! I also followed my way to your blog, and am reading it now (going to subscribe). It'd be pretty neat if you added my blog to your list of Science Chicks, if you think it's worthy :)

PhizzleDizzle said...

Sure! I'd be happy to add you to my blogroll - need some more computing representation! ;)

Gail said...

Nice! I like your idea of listing female science blogs, and I'm thinking of doing the same. I'd like to add yours here too.

collin said...

Dijkstra is as always mind-bending. Thanks for posting this!

Post a Comment

Comments are moderated - please be patient while I approve yours.