Monday, December 31, 2007

Subjective Computer Science

Well, computer science is really a subjective science...here's why. The people who write the requirements have their own view of what the product will be. The people who design the product have their own view of what the product will be. The people who implement the design have their own view of what the product will be. The people who test the implementation have their own view of what the product will be. The people who put the product into production have their own view of what the product will be. The technical writers have their own view of what the product will be. The technical and sales support team has their own view of what the product will be. And the customer has their own view of what the software should do. Ideally, the software should do what the customer wants. But each customer has different wants, thus there are conflicting requirements, conflicting designs, conflicting implementations, conflicting testing, conflicting deployments, conflicting documentation, and conflicting technical support.

All these views and conflicts are what are so interesting in computer science. So instead of trying to stomp out different views, or conquer the world, we should embrace conflicting ideas. Here are some examples. Everyone has a different set of search terms they want to look for. Everyone has a different set of applications they use for work and entertainment. Diversity is good. Choice is good.

Now, how do we make diversity and choice possible? One approach would be to set some standards for people to adhere to. This stifles creativity, and sets the stage for software that doesn't please the customer. One way to make diversity and choice possible is to implement a pluggable interface. This is form of a standard. But there can be different pluggable interfaces for different products. Wouldn't it be nice if you could use the same plugin in different products? Say you had a plugin that worked in ImageJ. Wouldn't it be nice to be able to use the same plugin in Adobe Photoshop and the GIMP? Wouldn't it be nice to use the same interface builder format for Xcode, Eclipse, Visual Studio and NetBeans? What if I could write XML applications that would work in Safari, Firefox, and IE? It's the same fucking problem all the time. Everyone wants to reinvent the wheel. Do I use CLI or Babel?

So what is the solution to all this? At a fundamental level, we have to accept that there is diversity. There is uncertainty in all numbers. There is uncertainty in the elements in a set. There is uncertainty in the order of elements in a set.

Saturday, December 22, 2007

Uncertainty and Continuous Hierarchy

Uncertainty may be thought of as a form of continuous hierarchy. You aren't certain of the levels within the hierarchy, the nodes within the hierarchy, and where the arcs are connected within the hierarchy.

For elements, you aren't certain exactly what the element's value is.
For sets, you aren't exactly certain what the elements are.
For both, you aren't sure whether it's an element or a set, or both.
For order, you aren't certain of the order of the elements.

Thus uncertainty is a form of continuous hierarchy.