Tuesday, July 20, 2010

The essence of computer science

The other day, I was watching this lecture series from Harold Abelson of MIT, who explains better than I ever could the difference between computer science and other engineering disciplines.

Computer science deals with idealized components. We know as much as we want about the [pieces] that we fit together. That means that in building a large program, there is not that much difference between what I can build and what I can imagine. So as opposed to other kinds of engineering, the constraints imposed on building large software systems are the limitations of our own minds. In that sense computer science is an abstract form of engineering, where you ignore the constraints imposed by the physical world.

Of course this guy is coming from the perspective of an academic setting, and there are a few caveats that will easily be noticed by those in the industry. The constraints imposed by the physical world are still relevant to some degree. For example, we have the constraints of the computer hardware that we're working on, including memory and processor usage. In the web programming domain, you are constrained by the bandwidth of the network, etc. And, of course, in the end, the system has to "do the job" / "satisfy the customer", which is another constraint from the real world.

That said, I think his statement is still for the most part true, since the physical constraints apply to the system as a whole, but not necessarily the parts. For example a civil engineer has physical constraint on each bolt & screw, an electrical engineer has a physical constraint on each wire, each capacitor, each power supply, etc., an architect / building engineer has constraints on each concrete block he puts into the building. So for engineers in other disciplines both the parts and the whole are constrained. The computer scientist is only constrained in the end, while the intermediate processes and components have a tremendous amount of flexibility.

No comments:

Post a Comment