Great Principles of Computer Science


Today at lunch, I was watching how the person who took orders communicated the type and number of sandwiches to the sandwich makers. She had a stack of cards for each sandwich type and she'd place them in order on the table by the sandwich making station. I remarked to my friend that there were using a queue to decouple the order taking unit from and processing unit (sandwich makers) so that order taking could happen independently of sandwich making. They could add more processing units (competing consumers) if things got busy.

The world is full of these kinds of patterns. There's a great write-up of why Starbucks doesn't use a two-phase commit. The fact that these kinds of process issues occur in everyday life would lead the cynic to say that there is nothing new in Computer Science--people have always know these things.

But there's a big difference between someone figuring out to put a queue in between their order taking station and their sandwich making station and understanding why, when, and how it works in enough detail that the technique can be analyzed and applied generally.

Peter Denning, the past president of ACM and a renowned Computer Scientist has been working for some time to define the foundations of Computer Science and enumerate the great principles that make Computer Science a science. In this interview in Ubiquity, Denning discusses that project and why it's important.

The Great Principles of Computing project Web site records that work. They categorize the principles into seven uber-categories:

  • Computation (meaning and limits of computation)
  • Communication (reliable data transmission)
  • Coordination (cooperation among networked entities)
  • Recollection (storage and retrieval of information)
  • Automation (meaning and limits of automation)
  • Evaluation (performance prediction and capacity planning)
  • Design (building reliable software systems)

This overview discusses the project, but I found this top-level summary to be most informative for a quick read. One could quibble with exact choices, but the important thing is to note that these are principles that are just as true of information processes in a sandwich shop or your cells as they are of what's happening in your MacBook Pro.

Edsger Dijkstra said

"Computer science is no more about computers than astronomy is about telescopes."

That's really the point.