Shortcut for chapter specific information

Saturday, September 24, 2011

The 501-th post in Self-Study : "Why are we studying bubble sort?"

After about half a year and endless coding,  I found myself posting the 501-th post of this blog.   It's a sign of continued enthusiasm on the subject.   So I decided to write something in this occasion.

Most people I know in work and academia are brilliant.   Many of them have special skills which one would envy.   Algorithmic skills is common and it becomes some kind of source of power in conversation.   A person who can wield the correct algorithmic reasoning takes an edge in the programming well.  

In my view, algorithmic skill is different from programming skill.  In programming, you might decide not to do something deal to non-algorithmic reason.  For example,  A is a new guy and you want to give opportunity to him.  So you will pass a certain programming problem to him even though you don't know what he would do.   This reasoning is completely fine.    Though those are concerns more close to software engineering and even management.  

As algorithmic concern might not be the first consideration.  Why do we study algorithm then? In lecture 1 of the MIT open course of algorithm (SMA 5503), Prof. Charles Leiserson once asked the same questions.   His answer is quite illuminating and it boils down to this - speed of an algorithm is a kind of fundamental tradeoff of many other aspects of a program.   For example, if we want to show cutting-edge graphic, then we need to decide if the underlying algorithm is fast or not.    Leiserson believes that algorithmic performance of a program is like a currency.  Once you know the currency of a program, you can make rational decision on programs.

So this come back to the point of why we are studying bubble sort.   This is a question comes up in the class I am taking in famous extension school.    When it is brought up, a grin and certain condescension was shown to the subject.  

I don't really approve that attitude - for one there are interesting characteristics of all types of algorithms.   The written representation is a form of it.    Whether the algorithm is stupid or not is also not important, they are taught because we want to let new generation of programmer to think algorithm better.    No one would believe that in real life, one would want to use Bubblesort to run sorting given its n^2 performance in both comparison and moves.  But that doesn't mean, one shouldn't spend some time to understand its characteristic and try to learn something in it.   Theoretical interest of an algorithm should sustain one's interest of an algorithm.   If one just think programming practically, why not just skip the whole algorithmic study?

For people who are unconvinced, they should spend sometime to take a look of the sorting chapter of TAOCP.   Knuth is a well-respected figure in computer science and I always find that reading his book make me understand certain things more.  I think my linear search is refined because I read his book.  (Again, if you think this is stupid, you will be surprised on how deep linear search can be.)

This is the mindset which keeps me going as a researcher, programmer and generally a human.  I hope this is a good attitude to share with everyone of you.

33_P

No comments:

Post a Comment