I love solving Topcoder problems. It always thrills me. The feeling it gives it like going on a roller-coaster ride.
But when I speak to people about programming contests, the most common response I get is “When I have real job to do, why should I solve unreal problems?” This post answers this question.
When we can face the big problems, the ‘real’ problems become trivial:
When we constantly keep solving problems that require complicated recursion or multi-dimensional dynamic programming or memoization or some graph theory to crack it, the regular real world problems that hardly require more than two levels of nested loop becomes trivial to solve. Real day-to-day problems won’t be problem anymore and they will turn out to be cake-walks!
Turning real world problems to cake-walk has lot of advantages. This gives more time to think on more important stuffs like “Can this problem be solved automatically? Can I write a tool that will help this kind of problems in future? What is the real problem faced my the user and can that be solved in a better way? Can we propose any feature enhancement? Etc…”
If I rest I rust:
This is one hard fact everyone has to digest. Thinking power doesn’t decrease as we grow old. But we grow old (mentally) because we stop thinking. I’m sure the last time more than 80% of people would have strained their grey cells would have been when they prepared for a college examination or to crack an interview. Once we enter a job we get into a comfort zone and stop using the grey cells.
Nature of job can also be blamed for this. Unfortunately not all jobs require people to think hard. There is ‘process’ to break the entire work into tiny parts and individual employee needs to take care of only a very small part of a big process. With time they become so familiar with their part in the process that they can do the work without much thinking. This explains why we see freshers performing better in aptitude/programming interviews compared to experienced people. What people unfortunately don’t understand is “The lesser I think, the more rusted my brain becomes!”
Programming contests like Topcoder gives us a chance to use the grey cells and keep it conditioned so that it doesn’t rust.
Confidence can go a long way:
Much has been written about confidence by many people. Having self-confidence can make us perform above our normal limit. At the same time, lacking confidence will make us perform worse than what we actually can. And acquiring self-confidence is not very easy. I’ve heard people say “Think you can; you can”. But the first part of the sentence is not easy to achieve. It is just not just ‘thinking’. It is instead making my brain believe that I can. And brain needs solid proof to believe anything. Cracking tough algorithmic problems will help you prove to yourself that you can!
Speaking out of my own personal experience, if I start my day solving a Topcoder 500 pointer, I can be sure I have a great day ahead. It gives a kind of confidence that is hard to explain with just words!
Creating better engineers:
I think of this quite often. Why is Indian IT industry not as good as the American IT industry? Why don’t we have techie companies like Google, Microsoft, Sun, IBM etc in India. Why don’t we see ambitious startups like ‘Facebook’ growing from India? Why is none of my text books written by Indian authors? What is wrong here?
The answer is pretty easy. To get the answer, we just have to compare an average Google employee and an average Infosys employee. The differentiating factor is nothing but ‘ALGORITHMS’. Google interviews tests nothing but candidate’s algorithmic skills. Technology doesn’t matter. Somebody who is good in algorithms will be able to learn technologies overnight. Algorithms are not a part of computer science. They are the very base of computer science. They are the key differentiating factor between a good programmer and an average programmer; between Google and Infosys; between USA and India!
So, How about a roller coaster ride now!
:-)
your context was correct, but I wont agree fully.
In my younger days I was so passionate about Algorithms but it is not really for matured developers. `Good Programmers worry about data structures and their relationships. “Linus Torvalds”`
Don’t compare USA & INDIA, And I am sure you work from India now. In US, In early 40’s, People were debating Dynamic vs Static computing using thesis. (Alonzo Church vs Alan Turing). How many of our developer’s worked in languages other than (C, C++, Java, C#). How many of us know about Monad?…
But it is just one part of the story, there are guys who started learning about compiler construction (you & me), there are guys who worked on compiler construction tools itself (javacc was written by an Indian (Chennaiate)).
Happy blogging.. God bless you :)
Comment by Mohan — March 3, 2009 @ 9:01 am |
Do you know, even some of the Infosyians contributed to Tomcat clustering kind of projects. It just came to my mind.
Just now we are started seeing II generation of developers, US is in 5th Generation of programming. But sure, we have our place in future in Programming.
Comment by Mohan — March 3, 2009 @ 9:05 am |
Hey!
what is multidimensional dynamic programming? what is complex recursion?
“In order to understand recursion, one has to understand recursion” – By somebody.
Mohan
Comment by Mohan — March 3, 2009 @ 9:07 am |