Main menu:

Site search

Categories

Archive

Dualism in Computer Science

The word “meta” is more popular than ever – especially among computer scientists. I’m convinced that the use of this word is a subtle indication of deeply held and sometimes problematic world view.

The problem is the idea implicit to “meta” that the direction of “meta” is “more abstract”.

This is often tied to the idea of “up”. Consider the phrases “low level language” and “high level language”. What are these “levels”, and why is one “higher” than another?

The up/down dual in those phrases is almost identical to the same idea in the “top down” vs. “bottom up” approaches in artificial intelligence.

Consider the idea of “reductionism”, which is the criticism of explaining a phenomenon in terms of “lower level” phenomenon. Reductionism is closely tied to the word “gestalt”, which is the name given to the idea that the whole is greater than the sum of the parts. How does the whole/part dual relate to up/down?

There’s a clue in that last one. For those systems where there is a natural way to apply the whole/part concept, it makes sense to apply a partial order to those levels of abstraction. Whether we call that partial order up/down, whole/part, or high/low, it seems safe to organize abstractions this way.

An example of this ordering: population > organism > cell > molecule > atom. For each of those levels, there are corresponding fields of science and languages.

But now try to add these to the ordering: society, culture, psyche, economy, and species. It’s not possible to create an ordering on all these concepts.

Within a single field we see the same problem. Consider the “subfields” of linguistics: syntax, semantics, orthography, phonetics, typography, pragmatics, and so on. Creating a strict ordering of these concepts seems useless and uninformative.

I’m guessing that the idea of high/low as applied to languages and abstractions dates back to an era when the fields of science were more limited to those systems which had more clean containment relation in physical space. By the time the social sciences became “sciences”, the notion of ordering the sciences was obviated. But we retained in our shared language, culture, and philosophy the up/down, high/low dual.

There are vestiges of those duals in words like “reductionism”. But that is a small point compared to the enthusiastic embrace of dualism by many modern computer scientists.

This comes in two flavors. The first is when discussing the role and function of programming languages. The commonly held belief is that formal computer languages allow humans to communicate with machines. Tools translate human-readable, high-level code by means of successive applications of sub-translators into electric potential in bits of silicon.

It’s hard to argue with that. But it obscures a point that is becoming increasingly important. Perhaps even more important when analyzing how much money and human effort is spent producing software. That point: programming languages allow humans to communicate with themselves and each other. The aspects of that high level language that matter are not those that are algorithmically translatable to efficient, low level code. What matters is the ability of that language to capture and communicate the ideas of the author to the author’s peers and to the author himself/herself. These considerations stand apart from the ordering of the human layer above the machine layer.

The second way in which modern computer scientists embrace dualism is simply the high/low ranking of programming languages.

All programming languages are created to communicate within and among sets of people working together to create systems. The problem of the “tyranny of the dominant decomposition” is increasingly acknowledged. This phrase can be applied to the paradigms that underlie modern languages as well. Logic, object orientation, events, functions, high-order type systems, closures, and so on are impossible to order in terms of high/low. Language design parameters are chosen based on suitability to the task and suitability to the audience.

A more meaningful relation on languages would be a more general graph structure with weighted edges. To construct this graph create a node for each language and create an edge between two languages with a weight corresponding to the percent of the population of programmers that is proficient in both languages.

I suspect that what would result is a graph that closely corresponds to the economic interrelationships that exist within the population of programmers used to weight the edges. Web application developers rarely speak languages used to design circuits. But both probably have some familiarity with languages used to design operating systems.

I’d like to see more discussion of relations on languages in these social networks, and less in terms of what are increasingly difficult notions of high/low levels of abstraction.

Share and Enjoy: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google

Write a comment