Monday, December 1, 2008

Diffusion of Innovation

On November 27 at the TCS Innovation Lab for Business Systems Dr.VCS Prasad made a
presentation on the diffusion of innovation in an organization that I found very interesting. I mention here only two points that he made.

One is the folly of trying to push a new idea into an unready environment: an early negative
reaction can spread quickly by word of mouth and jeopardise the idea. The other is the importance of slack (uncommitted) resources. Unless an organization has slack resources it
is not possible for it to experiment with new ideas.

When Bertrand Russel said that boredom leads to creativity, and that children should have
plenty of opportunity to be bored. he was emphasizing the importance of slack resources in
one's personal life. One has time to be playful only when all resources are not committed to
the To-Do-List. Are you a list maker? When you do something not on the list do you write it
down and then cross it out? If so it is time to pause and re-think your life.

The spirit of computing is best understood if we approach computing as play. Hope to
elaborate on this in a future post.

Sunday, November 23, 2008

Computing on Paper - 2

Have designed tentative paper data formats for bubblesort, insertionsort, quicksort, and mergesort algorithms. You can find them here.

Saturday, November 22, 2008

What is Mathematical Computer Science?

Here is my definition.

Find out about the book "An Introduction to Mathematical Computer Science" here.

Thursday, November 20, 2008

Computing on Paper - 1

When I taught some graph and sorting algorithms the first couple of times the larger part of my energies went into understanding the algorithms as given in text books and rewriting them as mapcode theorems with proofs. The third time around, I asked myself afresh how best I could teach them. Dr. S. Durga Bhavani generously shared with me her teaching methods and references.

Would like to record here some of my observations now.

One should look at all algorithms from two different points of view. As algorithms we can work out on paper and as algorithms we have to get a machine to process. The levels of complexness differ. (The word 'complexity' has a definite technical meaning in relation to algorithms. So I am choosing a different noun form of 'complex' that is also allowed by the dictionary.)

The algorithms we learned as children for the arithmetic operations are a marvel of design. They use a two-dimensional paper data structure in which we can write to the left or right or above or below. Their design is chosen to balance what we keep in our minds and what is written down. In case the output we compute is not the 'book answer', what we have written down is enough to help us work through it again and find where the mistakes occurred. Can we design such formats for the algorithms we teach in computer science courses?

In the last month I have found that this is possible in principle. The surprise was that the paper complexness of the algorithms I looked at is far less than their machine complexness. Actually, they are not even as complex as the school arithmetic algorithms. It is perhaps a good idea to teach students to work out some examples on paper in the paper format with oral instructions from the instructor. It takes just a few minutes and three to four examples to understand the logic and the method of execution of the algorithm. After this initiation the instructor can pose the problem of converting the paper algorithm to a machine algorithm. The advantage is that the students have a good gut level comprehension of what they are trying to get the machine to do.

Will put up some paper algorithms for sorting in my next post.

Thursday, October 16, 2008

Exploring Computer Science

What are the concerns and goals of computer science?

What are the foundations?

What are its methods?

What is its academic content?

What are some good ways of teaching it?

In what way is computer science related to mathematics?

These are the large questions I would like to address in this blog. I know that I am not competent to address such grand themes, but my hope is that the very effort to formulate answers to these questions will help me grow. Besides, there are real experts out there. Some of them may feel like helping me out.

Several computer scientists, friends, colleagues, and students have been helping me in my studies. Will acknowledge their help when I refer to it. However, I would like to acknowledge right at the beginning the help, guidance, and mentoring I have received from Prof. Kesav Nori. In a series of conversations around the year 2000 he communicated to me the essential concerns of the discipline and pointed out the direction I had to travel, and, more importantly, the directions I could temporarily ignore. Since then, I have relied on him to show me the way out of every thicket I got into. But for him, I would have not been able to make any progress at all in my understanding of this fascinating area.

My work of about seven years has been summarized in the book "An Introduction to Mathematical Computer Science". You can know more about the book from here.