I have talked about this with a friend of mine a few times. We have attempted to formulate a 'theory of reverse engineering' a few times but so far nothing concrete has come of it.
My personal experience is that RE is as much a mindset as it is a deep well of technical knowledge. Without the crucial knowledge of the axioms of the framework you are reversing, you can often do nothing but guess. Without a strong understanding of the "RE methodology", even with the technical knowledge you stand a good chance of getting sidetracked or bogged in minutia. My personal belief is that although the subjects are different, the methodology is the same. I have no proof to back this up, it is just my belief based on experience.
To answer your first question, the 'best' reverser's are often the silent, faceless crackers/hackers: they hunger for knowledge and are scattered all around the world, in basements, bedrooms and studios.
Many move to anti-virus firms, or DRM/software protection companies. Others are hired by government agencies. Some move into hacking, bug and exploit discovery. A rare few move into academic research, like my friend Mr. Rolles.
Crackme's are written expressly for the purpose of cracking. They are not copyright protected in any way. There is no question legally.
They are a great way to learn techniques, and to help develop more advanced techniques by choosing progressively more difficult crackmes to tackle.
Also a lot of crackmes will contain solutions from other reversers, so even if you fail you can read the walkthrough and learn from others solutions.
Many antivirus companies will rely on your actual knowledge of RE, they will give you some tests and dont soly rely on your resume/experience in the field. They are all well aware how hard it is to find (and keep) good reversers.
It's done on purpose as a concrete example of how _not_ to code a social news aggregator.
If I were coding a site like this, I'm certain 'how to handle next page links' would be near the top of the problem list. I am also quite certain I would not pick a solution that gives an empty white page with 'link expired' on it.
I've been programming since I was a little kid, when those text adventure games first came out.
I remember programming my own text adventure with a text adventure toolkit, I can't remember the name exactly, it was an acronym, like AGP or AGT or something. That was really fun! But it didn't teach me programming.
Implementing your own text based game from scratch might teach you a bit about the language, but it won't teach you how to be a good programmer. In fact, if you are just starting out, I am willing to bet you will get stuck very early on, or you will find your solution works but doesn't scale, or it works but its terribly tedious to generate levels, etc, etc...
Really what you need is a properly tailored programming course on a 'good' learning language, like Pascal or Python.
Having said that, programming should be fun and I highly recommend choosing projects that are interesting to you to begin with. It does not matter if it already exists, try to program something you will actually use. If you do decide to program a text game, do research on the different ways you could do it. If there is something you don't understand in the solution you have chosen, research it (rinse, repeat).
#1. Fix the fucking website. Seriously, what kind of half-assed aggregator gives a 9 in 10 change of getting 'missing or unknown link' when clicking to the next page?