Sometimes this applies to the 500-pt ones too. I sometimes start feeling I will never improve enough to code them with ease like the others. Should I just quit? If not, why? It is extremely annoying, saddening and makes me feel immensely unable and dumb.
closed as not a real question by Glenn Nelson, Dynamic, Robert Harvey, psr, GlenH7 Dec 28 '12 at 0:57
It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, see the FAQ.
I can't tell you if you should quit or not, only you can decide that. What I can tell you is that it does get easier with practice like most things in life. I have been programming for 20+ years and will tell you that I am so much better today than when I started, but still have so much left to learn, and I expect I always will.
The question you have to ask yourself is this Is Programming something you find fun? If yes then keep going, if you hate it you might want to look for something else to do with your life and that is fine too.
Also you may find that TopCoder is not a a good fit for you, that is fine too. Try something else. Go read the Book Seven Languages in Seven Weeks or Structure and Interpretation of Computer Programs both of which will teach you a huge amount.
(and I will admit to never having looked at TopCoder before today).
Something to consider: Are you comparing yourself against real people (that you can be curious with and learn from), or are you comparing yourself against an abstract concept, such as "people who are good at coding" (which "people"? how good is "good"?)?
In the case of the former, this is actually an excellent revelation on your part, as your discovery has also provided you with the means and knowledge to improve yourself! Now that you know who is a better coder than you, go study their methodologies, ask them how they got started, read their blogs... in short, go learn from them! (:
Lack of knowledge is certainly nothing to be ashamed of; we all start that way. It is in choosing to seek out new knowledge that we gain mastery over our own existence. These individuals started off with zero programming knowledge just like you did; if they were able to succeed, then you surely can, too!
In the case of the latter, you might want to do some introspection to understand where these feelings are coming from. It seems to me like you might be hinging your self-esteem on an unattainable goal (so long as these "others" are undefined, you will simply keep adjusting your criteria so that they are always "better" than your current level of ability). This could explain why you might feel discouraged and saddened by the scenario you have described rather than excited and challenged by it.
I certainly will never understand your situation as well as you do. But this might be something interesting to think about.
Just another angle on this.
There was a time when I felt that way about touch-typing. I would look around and all the other people were madly clicking away without even looking, and I made the self-evaluation that I would never be as good as they were.
I did once try out the Mavis Beacon product, that teaches you where to put your fingers, and which fingers to use to reach for which keys, so that at least got me away from hunt-and-peck, but I still had to look at the keyboard, for the most part.
Well, here I am decades later, and compared to my wife I'm a whiz of a typist, although I still make mistakes, and I still don't consider myself good at it.
The secret is this: don't care about it. It just happens, whether you care about it or not.
Programming is the same way. If you compare yourself to other people, you're going to feel inferior. So, don't compare yourself to other people.
I have enjoyed playing TopCoder for seven years, and even participated in an on-site event early on. I also authored a handful of problem sets long time ago, back when today's 500 would pass for a very hard 1K.
I will be the first to admit that the challenge level of their 1Ks went through the roof, mostly due to an inflow of strong coders with ACM experience. These guys have practiced solving precisely the kind of problems offered at TopCoder, and they did that a lot. One guy who was number one for a year or so admitted that he had solved more than a thousand ACM problems before entering his first TopCoder competition!
If you would like to be as good as they are, you need to practice too. I know from personal experience that practicing works. I started as a high-green, advanced to blue after a couple of SRMs, entered yellow after three months, and then worked my way up to high yellow (2100+ at the peak). It took me two years of practicing almost every day, with breaks to go to work, to take a vacation, and to get married. But I did it, and I can tell you that it was fun, and I learned a lot in the process. Do not get discouraged, just stay with it.
Oh, and do not get too hung up on the 1Ks: these days, even coding a 1K in a practice room in under an hour and fifteen minutes, knowing the algorithm upfront, is a big achievement. I am dead serious about it!
this particular question can help you and perhaps encourage you. I don't think taking hours to read and understand solutions to problems are so discouraging. You can read more from my link, but in a nutshell: it gets easier as you become better.
Having been participating in Topcoder SRMs for the past two years, beginning with almost no background in competitive programming, I completely understand your feelings. And I asked this question too some time back. Here is what I will tell you:
No, don't give up, at all! It gets easier with time. How much time, that depends on how much you practice. Regular daily practice will make the process faster. But if like me, you have a day job to focus on, and can set aside only few hours each week, the process will take longer. But what's important is to start enjoying the journey, and stay less obsessed about your rating. Rating improvements will come naturally as a result of your hard work, and to be able to put in hours into it, you must absolutely start enjoying the whole experience.
Even when your solution to 500/1000 ptrs fail, I am sure you will share the feeling that it does teach you something. And the way to get better at it is to make sure that after the contest, you go and see a passed solution of some better coder, and understand how he did it. Then code the solution yourself in practice room. Solving all the problems you attempted but failed after the contest is a must in order to improve.
Editorials for rounds will help immensely as well, specially with the 1000s ptrs. And if you still do not understand something, you can ask in the forums.
I will end it with this, don't be in a rush to become "RED". Just enjoy the process. I find competitive programming to be immense fun. You have to love the journey, and hopefully you will one day surpass your goals without even noticing. ;)
P.S. What is your topcoder handle?