Interesting post via Dare Obasanjo who passes on Joe Gregorio’s post “CS Broke”.
Dare seizes on one part of Gregario’s post as being the important one:
Computer Science, at a deep and fundamental level, is broken, and that applies not only to software but to hardware. One of the reasons that I have this feeling is that after programming for the past 25 years the field hasn’t really changed. The conversations aren’t any different. You could substitute ‘Windows API’ or ‘Borland CGI’ for ‘HTML and CSS’ and you’d be having the same exact conversations I had 15 or 20 years ago. We still struggle with leaks, be it memory, or file handles, or threads, or whatever. We still have race conditions. We still struggle with software that grows linearly in features but exponentially in complexity.
Obasanjo’s response makes sense:
- If your definition of computer science includes HTML & CSS or Win32 then you’re doing it wrong. In the words of Edsger Dijkstra, computer science is no more about computers than astronomy is about telescopes.
- Even if you limit the discussion to computer programming, does it also mean that civil engineering is broken because people today still have to discuss and solve the same kinds problems faced by the builders of the great wall of China or the Roman aqueducts?
But I think Dare has missed the more interesting part of Gregorio’s point, the fractal part. It’s fair to raise the issue that computer science is no more about computers than astronomy about telescopes, but that misses a bigger point. First, there are other sciences and disciplines that are concerned with telescopes. If computer scientists aren’t concerned with computers, who is? I think Dijkstra went to far with that glib dismissal. Someone has to be concerned.
Second, telescopes are further removed from astronomy than computers are from computer science. Yes, there are abstract and theoretical corners of computer science such as automata theory and studies of algorithms that can’t exist or make sense on today’s computers (have you got a quantum computer yet?). But there is a also a lot of computer science that’s engineering and is concerned with what we do day to day.
Lastly, civil engineers do discuss problems similar to the great wall of China or the Roman aqueducts, but by now those problems are much more well understood than the issues Gregorio is concerned with. The conversations the civil engineers are having are at a much higher level with less constant reinventing of the mud bricks pulled by donkeys on sleds methods used by their Roman and Chinese predecessors.
But is it really so bad? And what does Gregorio mean with his answer to the problem, which is concise but cyptic:
I’ve been struggling to find a way to express this concisely. The best way I’ve found so far is to ask:
What part of the computer in front of you is fractal?
The answer is none of it, yet in nature, which has been at this game of computation for billions of years, everything is fractal. We’re doing it all wrong.
The comments on Gregorio’s post are interesting. My gut reaction, which is that much of what Gregorio decrys is what happens when computer science is ignored and we push ahead anyway, is reflected in the comments. HTML itself is an ugly mess as are many languages that grew rather than were designed. I always liked Wirth’s languages (Pascal et al) much better than C and its derivatives. One actually reflected good computer science and was in fact easier to write compilers for as a result while the other was a half step beyond a good macro assembler and sure seemed a hack. Certainly pragmatism wins the day in many cases and C beat Pascal for various reasons though there remains a dedicated following to Delphi to this day and its creator Anders Hejlsberg is at work with Microsoft trying to make C a better place.
But this still misses the fractal point. What would it mean for the computer in front of you to be fractal? Wikipedia defines a fractal thus:
A fractal is generally “a rough or fragmented geometric shape that can be split into parts, each of which is (at least approximately) a reduced-size copy of the whole,” a property called self-similarity.
Some of the comments on the original thread imply the web or nature itself is fractal. There are aspects which are fractal in both cases, but in neither case is everything fractal. Fractals are but one way of capturing complexity in an abstract way. In the same way, I’m not sure it makes sense to insist that computers be fractal. Fractals I suspect are an appropriate way to view and schedule massively parallel algorithms to many cores, and that may be a good literal application of fractals. The Thinking Machine of Danny Hillis is an ideal fractal architecture because the notion of CPU and memory merge to a single entity. I still think Hillis was just ahead of his time and we’ll get there. When we do, it may take some sort of fractal model to make it work at all easily or well. Hillis showed what can happen when the astronomers build the telescopes and the Thinking Machine was a fascinating architecture.
Being a software guy, I tend to focus more on software than machine architecture though. For me, the manifestation of a fractal nature comes from layered architectures such as the network layering discussed by Tannenbaum in his great textbook Computer Networks. There are similar layered abstractions that exist elsewhere, but we seldom see an opportunity for practitioners to reach across layers or to create their own layers. That’s a shame because it isn’t hard to do and leads to a lot of power. I think of Domain Specific Languages as a sort of fractal concept because we create new languages on demand for specific tasks or domains. I have argued before that creating a language is the only way to realize the ultimate power of the computer because executing a language is really what they do uniquely. It’s what gives them their power. Understanding this is definitely a computer science issue. Read Godel Escher and Bach for a wonderful discussion of the deeper meanings to be found. You can’t read through “the eternal golden braid” and not think of things at least somewhat fractally.
Sadly, this brings me back to the conclusion that most of the time computer science is ignored and we hack on. There are few equipped to create a Domain Specific Language that makes solving a problem easy rather than just plunging in and hacking it out. It’s not clear to me you can teach a person meta-thinking, which is what I call the kind of thinking that boils everything down to a language. The distant cousin of this approach has us building a framework to solve a problem, rather than a language. That’s not nearly as good, but often we don’t even do that.
Appologies to my regular audience for having gone off on a Geek tangent. It happens!
If, OTOH, you liked it, here are some similar writing from this blog:
The X in Software Engineering: Exactly!
Software Handyman?!?? Not at all. Software Itelf Is Math And There Are Engineers And Scientists
Is Programming Like Music or Engineering, and Must it Be Unintuitive?