Monday, August 6, 2012

Presentation: Computational thinking & the future of science (and Egypt)

A proposal I wrote for "Lemasr", an organization for supporting development in Egypt. I thought the information contained within might be useful to more people.

Note: Pages 10-15 were taken from a presentation by Jeanette M. Wing, with permission. The original presentation is here:

Tuesday, December 27, 2011

Computational thinking: Why is it that important?

It seems that those of us interested in Computer Science take it for granted that computational thinking has great potential.

This is what Carnegie-Mellon researchers say about this new field:

Computer science is having a revolutionary impact on scientific research and discovery. Simply put, it is nearly impossible to do scholarly research in any scientific or engineering discipline without an ability to think computationally. The impact of computing extends far beyond science, however, affecting all aspects of our lives. To flourish in today's world, everyone needs computational thinking.

Myself, I often repeat the line Computational thinking can have an effect on science comparable to the European Renaissance. I haven't, however, described in detail why this is possible, especially to someone without a CS background.

This is a random collection of ideas, that together can give the reader an idea of why this field is so important. I intent to use them as a seed for a more organized article later on.

You can't fool a machine

Algorithms are step-by-step instructions that can be given to a computer for execution. Beyond simple operations like arithmetic, the computer can't assume anything: you have to be very clear, very specific, and handle all general and special cases. Any human error will lead to either the program being rejected or giving wrong results.

Compare this to some ways people handle science, laws, and other activities: leaving some bits vague, unspecified, or assuming the human reader will just interpret it as they themselves intended it to be interpreted (leading to multiple or wrong interpretation).

If we describe our activities in ways similar to how we program computers, we get rid of a lot of this vagueness and ambiguity, and make our human-human communication much more clear.

A common language

A science like Algebra has contributed a lot to the current scientific revolution, because it is a common language between all the sciences: accounting, electrical or mechanical engineering, biology, laws...all of them use Algebra in one way or another. Even more: developing algebraic theories in one science can benefit science as a whole, and all the other sciences win too.

Computer Science could be like the Algebra of the 21st century, uniting even more of the human sciences and giving us common tools for facing them all.

This is clear from the concept of computer programming: everyday we write social, medical, mathematical, artistic, and scientific applications and use the same CS concepts to describe them all to the machine. Now the next step is to use CS to explain and communicate sciences for ourselves.

A language to describe active processes

Computer programs are like recipes or plans to be executed later on by machine (or another agent, like a human, a team, ...etc).

This concept of "written static plan, for a dynamic active process" is one of the most important ideas. Instead of programming only games or accounting software we could use the same concepts to encode business processes, military strategies, educational lessons, interactive artwork, medical operations, or any other ongoing process.

A tool for reasoning about efficiency

Efficiency is a key issue in computer science: Computer scientists always want their programs to take the minimum number of steps to solve a problem and to use the minimum possible resources. They have taken this as both a form of art and science.

Metrics like time complexity have sprung to enable us to compare the relative efficiency of different solutions to a given problem. The problems themselves have been divided into classes according to the best solutions that are possible for them; this topic is at the very heart of our field.

Now imagine this rich scientific legacy applied to all the human processes described above; not by some small sector of specialized researchers, but by a wide range of people in all specialties in their day to day work. Think how much could be saved in time, money, and lives.

A language to describe thinking

We often use the same tools when thinking about the world around us: for example the concept of a graph - a network of objects and connections between them - is common in mind maps, city plans, family relations, citations of research papers, and thousands of other ideas.

Another concept is the humble queue, representing things like a literal human queue, the runaway line in an airport, the print job manager on your computer, or a series of tasks needed to be done in order.

Things like a graph or queue are the lives of computer scientists: Decades of work have been spent on these and many other concepts: how to measure things about them, how to represent them efficiently, how to calculate results from information encoded in them. City and railway planning, project scheduling, optimizing usage of factory resources, or guiding robots all depend on those apparently simple concepts.

Now imagine: all those tools, given to society as a whole; and they use it in their own fields like they use everyday maths or Algebra. The possibilities...

I hope it has been made a bit more clear why so many people are excited about this growing field: computational thinking!

Friday, November 4, 2011

Who works on computational thinking? A survey

This is intended to be a comprehensive list of people and organizations working on CT. I will do my best to constantly update this page; please suggest relevant links to add if you know any!

Academic Research

Carnegie Mellon University, center for computational thinking, lead by Jeanette Wing and sponsored by Microsoft.

Computer Science inside, a collaboration between Glasgow University and others.

Sacramento region CPATH team, a group with funding from the American National Science Foundation (NSF) working on computational thinking.

Purdue university's CS4EDU: Computer Science for Education.

Queen Mary university of London's Computer Science for fun (cs4fn).


Google, exploring computational thinking page. They also have an excellent resources page.

Microsoft research, are working with Carnegie Mellon and have an interest in Computational education for scientists.

Independent groups

Computer Science unplugged, an ongoing project that links a community of people and organizations.


Jeremy Kubica's Computational fairy tales blog, a gold mine of CT examples!

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 :)