Friday, March 28, 2008

The Future of Computing

Disclaimer - this entry is totally based on MY interpretation of the talk and not what the speaker actually might have meant and I might have misunderstood, and most of the things here are more of my thought than anybody else's.

We had this talk by Jeannette Wing (also known as the Dragon Lady by the people who know her). She was talking about her vision for computer science for the future. This talk made me ask some questions to myself, and I hope one day I might be able to find and answer to them.
The most interesting thing I found was the title of her presentation - Computational Thinking and Thinking about Computing. The way she put forward the idea of Computational Thinking was of the essence of the ability to comprehend a problem and systematically trying to solve it. That is what she claims to be one of the things we learn as computer scientists. She had the vision of trying to teach everybody this way of thinking. The first thought that came to me was the idea of coding/programming - as Douglas Adams put it - "
you've sorted out a complicated idea into little steps that even a stupid machine can deal with". Somehow I felt this is the most basic and elementary way of picking up computational thinking.
According to her, the biggest question is "What are the effective ways of learning (teaching) computational thinking by (to) children?". Here she provided the analog to mathematics and how children are taught numbers in Kindergarten, algebra in 7th grade, calculus in 12th grade. She wants that computational thinking should be somehow incorporated into the education system as Math itself.
But somehow I feel this thing already exists. It is in every facet of life - it is just that we learn this the hard way through experience. And what I feel is that it is kind of thing that you have to learn, you can't put it in somebody's mind. Maybe I am totally wrong!
Somehow I think of something different - I feel we are trying to answer the wrong question. I feel the main purpose of computational thinking should be such that we can find a solution to any problem, but somehow utilize the good things about computers. The computers themselves cannot solve problems of any consequence (or maybe they can) - but they are useful in a lot of many different ways and it would be a lie to say we can't solve difficult problem relatively easily with the help of computer. So the goal should be to teach people to optimally use everything that a computer has to provide for our help, but also develop better computers which are more helpful - a symbiotic relationship if you may (if you consider computers alive that is, but then they have some intelligence and they can accomplish non-trivial things, so maybe they are actually living things).
I don't know, this is kind of what I feel computer science should be - to help people solve problems - not make people dumb, but I don't know how that can be achieved in the right combination.

Another thing I found interesting about her talk was her reference to how people are attracted to certain sciences - origin of life leads to biology, the origin of time and universe leads to physics. I guess the origin of intelligence leads to computer science. It is just that maybe in all the different things going all around in computer science, we have lost the actual question.

Saturday, March 08, 2008

Spring Broken!!

Last day before spring break I start this blog.

It is said to be normal to feel lazy on this day and have zero productivity. Moreover, the gloomy weather of Atlanta adds to the effect. So nobody can blame me for not doing anything substantial today and eventually turning to my blog. But wait!! Hasn't my whole semester been like this?
I have just 2 courses, and luckily my schedule worked out just perfectly such that I have classes only on two days a week. So technically, I have just a 2 day week. I wouldn't go on to say that I spend the rest of the days enjoying my five-day weekend. I do go to the lab every day and try to do some work, and later in the night chip in a little more. But for me spring break is no new thing. I have been having it the whole semester. So why am I having this pre-spring-break-laziness syndrome.

Well I guess being lazy is what I am. Everybody has there calling, I guess mine is being lazy.

The whole spring break went by and I am here one week later, adding to this post. I might have said that I have done a lot of stuff in this one week, but alas I haven't.

The highlight of my break was when one of my friends' parent came to Atlanta from India. They cooked and called us for dinner, and that they I ate so much that it literally hurt to move. And the food wasn't over even then. So much so that they packed us the leftovers for later. I found out eventually that they have been cooking for around six hours for us. And to think that they had just had a flight across half the planet.

The rest of the week was spent sleeping and playing my guitar. I forgot to mention that I got myself a new guitar (Kramer Focus series). The guitar is really good, probably too good for me. I have to practice for a really long time to be good enough for the guitar.

Well there was this issue about a project submission today (yes, a project submission in the middle of the spring break). But to think of it, it wasn't that bad. I didn't do anything the whole convincing myself that I can accomplish all this in the break week. And I also took up a thing about which I had no idea about. But as always, I got lucky and got the exact required papers and so I managed to implement the whole system as required.

One thing was weird though. Generally when I go about coding, once I finish the preliminary coding, it doesn't take too long to get rid of the compilation errors, and in no time I get my program compiling without any error.

The second stage is taking care of the seg fault (better known to people as segmentation fault(), sometimes you do have core dumped too, but I haven't yet been fortunate enough to encounter that in my life - touch wood!!). So I was saying the next part was getting rid of the stupid memory assignments I might have made all over the place and shot myself in the foot. Generally it takes some help from gdb and a bunch of printfs to actually get rid of them.

Surprisingly, I was done with them pretty quickly. I was a bit amazed, but I continued with the final stage. The stage where we check if it is actually giving the output which we expect. The most weirdest thing was it gave the exact result in the first try itself without any unexpected weirdness which I inevitably face in this stage. There is this other thing I am working on, and I have spend around a month now trying to get through this stage and still haven't. And now I get through this program in one go. Thats impossible!!!

So I spent some time to figure out whats wrong with it that it isn't giving any error (yes it is as weird as it sounds). But I still couldn't figure out, so I have made the submission still feelings sure that although it has worked fine with me, it will break down in the first trial when somebody else is testing my program.

Now here it is, the last Friday of the spring break and I haven't had no fun nor did any substantial work. Just answering my calling - lazing all the time.

Thursday, March 06, 2008

Water Polo + Cover Trees = Blue Screen!!!

Damn I am tired right now. As I always am after two and a half hour of intense water polo practice. After that, trying to wrap my head around something like cover trees has the same effect on me as the 'Pan Galactic gargle blaster' (for those of you who haven't read 'The Hitch hiker's guide to the Galaxy' nor seen the movie, this is what they have to say about it "the effect of a Pan Galactic Gargle Blaster is like having your brains smashed out by a slice of lemon wrapped round a large gold brick").
All this started when I decided to torture myself every Mondays and Wednesdays with water polo practice. It starts with warm up, which goes on for so long that halfway through it, I forget how much I already have swam. And I am so slow and have so less stamina than my teammates that they lap me a million times. I spend the next half of the warm up praying to God when will this torture stop...
Once this is over, every single time I make the mistake of convincing myself that it would be all downhill from here, which it generally is not. The actual practice starts off lightly, and I start to feel good and not too tired. And then they start shooting at me. Even thats not too bad. Its when they start passing around and then suddenly shooting that it gets crazy. You don't know which side the shot is coming from, and you need to keep covering every side, and trust me, treading water continuously from one post to another is no light matter. Sometimes the whole move goes on for so long that I start losing my temper and have that urge of shouting out "make up your minds a@#@#$#s and shoot quickly". But today wasn't the worst. They didn't ask me to put on the weight belt (yeah it is what it sounds like, and for those who haven't figured it out yet, I play goalie).
Now that this gets over, I try to get back as much energy I can get out of chugging down Gatorade bottles. I need that energy to bike back home, and it is not pleasant experience on days like these. Then somehow grabbing something for dinner, I get to my room and my bed. But alas, if only I were that lucky. First I need to shower to get rid of all the chlorine from the pool, and then smear my whole body with cream to counteract the dryness of the skin the chlorine causes.
Now that all this is done, I still can't sleep. The reasons are threefold: Firstly, ever heard of the feeling "too tired to sleep". By this time, the whole body is aching so much that I just can't sleep. Even if I fall on the bed, I won't be able to fall asleep. Secondly, it is always the case that even at around 12 a.m. in the night, I have a substantial amount of work to be done thats due the following day (which technically has become the same day by then), which leads me to the third reason. I have gotten myself in this awesome rut for the past few months where I just can't sleep before 4 - 5 a.m. in the morning, and I end up waking after noon (and even thats early for me).
So I am only left with one option - start working. And off late, I am working on this tree data structure called Cover Trees. Now the thing about cover trees is that among almost all tree data structures (e.g. ball trees, kd-trees), this is supposed to be the fastest in most cases for different types of nearest neighbor operations. (For those who do not need to know these things ever, the whole thing in a nutshell is that in a dataset in an n-dimensional space, if you want to find the nearest points to a particular point of interest, the general practice is to store the whole dataset in form of a tree, where you can reduce the number of computations required to find the nearest points by climbing down the tree and cutting off branches of the tree which are farther away than the nearest point I have found as yet. Now there are many kinds on trees used nowadays, and this cover tree thing which is supposed to do this thing really great. Now read on because I think it might make sense to you now.)
One thing about these trees is that there is no proven worst case time complexity to do these computations. They are supposed to be awesome empirically (i.e. experimentally). But this cover tree thing HAS one such worst case time complexity, which is a first in this field, and hence a big deal.
But then there is a thing that almost everybody has learnt from experience - nothing so awesome is rarely trivial and simple. Neither is this one. It took me teeth clenching and hair tearing to understand the paper on cover trees, but once I got to the code, I was plain pissed off. Dead tired, I was trying a while ago to understand the code, and within half an hour, I had this hateful urge to bang my head on the wall or the head of the coder (no offense to them actually, I must commend them for this truly great idea, but if only they could have commented the code, I would have been a much more happier person). And my tiredness from the water polo practice wasn't helping either.
But as any other problem, I am sure I'll find a way to figure things out. And then come next Monday/Wednesday, you'll see me leaving my lab at around 7.30 p.m. for another gruesome session of water polo.