Wednesday, November 2, 2011

Dear Developers, dear society: Computational thinking!

We programmers like to joke about inserting coding metaphors in our lives - saying things about our life being stuck in an infinite loop, saying we "popped the stack" when returning to the main conversation from a side topic, and so on.

But this is not a joke; a very real science, called "Computational thinking" - a term coined by Seymour Papert and popularized by Jeanette Wing, is emerging and with it a promise to change how we do science in the next century.

Computational thinking takes the principles of computer science like data structures, algorithmic complexity, compilers, and so on and applies them to everything else: Law, economics, physics, biology, social life, art. If it requires thinking, computer science can probably help.

The idea seems obvious in retrospect: Programming is making our thought formal and well-specified enough that a non-thinking machine can execute it. Everyday, developers use graphs, trees, processes and algorithms to describe real-world situations and work-flows. We already simulate physics in both games and scientific computation. We have already used data structures and algorithms to describe accounting processes. Rule-based systems have been devised to make easier the job of doctors, lawyers, engineers, and more...

So now comes the logical next step: Using computer science to describe the science itself instead of just describing an automated system used in the science. We use a lot of systems and notations to describe world sciences: Algebra, probability, we want one more powerful notation to be added to our toolbox.

(Notice that this isn't necessarily about computers. We can use data structures and algorithms to work with science on a blackboard or with pen and paper; the same thing we do with algebra or probability. This is not about code, it is about notation, representation, and modelling like any other science. That said, computers can help a lot of course!).

What examples are there for using CS as a model?
  • Bioinformatics is the most famous example, using topics from Artificial intelligence, data mining, theory of computation and others for work in DNA, study of diseases, and more. The other direction is accounted for, too! Concepts from biology are used for new ideas in computing.
  • There is also now a growing interest in computational chemistry and computational physics, to complete the 3 known sciences.

  • For fun, here's an article that claims (not yet proven) that sleep is similar to garbage collection!

  • There is a growing interest in the relationship between Islamic Art الزخرفة الإسلامية and math and algorithms. For example the paper "From Islamic architecture to algorithm" or another paper "Fast Algorithms for Computer Generated Islamic Patterns".
  • This proposal, "Computer programming and the law: A new research agenda", shows I wasn't joking when I said computational thinking applies to laws.
  • ...and so and and so forth
For me, I don't want to see us left behind in yet another scientific revolution. The aim of this blog, along with other proposals and projects, is to help push forward the adoption of this new concept in our education, research, business, and society.

Watch this space :)

1 comment: