I personally think it should be illegal unless amazon volunteers to pay the employee his regular salary for the period he is not allowed to compete.
The same way that if you're not paying for a service you're the product if you're not paying your employee you should have no right to demand anything from him anymore.
These and other anti-employee clauses (e.g. excessive IP assignment) persist because many programmers simply don't care while others who do care are awful at negotiating compared to their interlocutors who do this for a living. When you try to push back, the standard response you will first hear, an outright lie, is that this is a non-negotiable mandate from their legal counsel and that no-one has ever complained before. If they do budge on their initial terms, they will make it seem like an unprecedented concession that warrants concessions on your end. It's a truly absurd game of back and forth.
I'll agree they'll act like it's totally weird you are complaining. Standard salesman techniques.
And companies will usually negotiate these. Usually.
I once had an otherwise nice job offer where the employee agreement contained the following three poison things:
1. you cannot work for any competitors or customers for a year (it was a consultancy, so potentially every employer in the country was off-limits)
2. you assign us your IP rights while you work for us and for a year after you leave us
3. you agree this will not limit your ability to find work.
They totally stuck to their guns. They said legal wouldn't let them change it. I had concerns and they "took the matter seriously" which amounted to telling me, really hard, that these clauses didn't really matter and they wouldn't enforce them, and, y'know, they probably weren't enforceable anyway.
I walked away. Apparently many other people don't because they continue to get new employees. I heard the horror story here on HN a few weeks ago  about someone who no one would hire because he signed something with clause 2. I'm more satisfied than ever I was right in walking away.
Since the job was in California, it was a perfectly reasonable agreement for me, but since it was my first job I probably would have signed it anyway.
Similar to the smoker who buys a pack of smokes and ignores the warning on the side; that will never happen to ME, yet turns and buys the lottery ticket thinking happy days are right around the corner.
I have worked for companies that have non-compete clauses, and 'All your IP belong to us' clauses, and I make sure my hiring letter says I am at all times free to work for whom I want, and that anything I create outside of company time without using company equipment is my own.
If all the good programmers refuse to work for a company that tries to impose those clauses, then evolution will win out and those companies will be stuck with mediocre programmers, put out mediocre products, and die.
That's a bit harsh.
The company knows what it's doing. Employees often don't. And in tech, there are no unions or widely-subscribed (and non-employer dominated) professional organizations to push back.
As Adam Smith notes in his Wealth of Nations (book one, chapter 8):
What are the common wages of labour, depends everywhere upon the contract usually made between those two parties, whose interests are by no means the same. The workmen desire to get as much, the masters to give as little, as possible. The former are disposed to combine in order to raise, the latter in order to lower, the wages of labour.
It is not, however, difficult to foresee which of the two parties must, upon all ordinary occasions, have the advantage in the dispute, and force the other into a compliance with their terms. The masters, being fewer in number, can combine much more easily
There's a reason unions exist, and even more reason why companies and their owners fear them.
In the case of trade secrets, I would not have an issue fulfilling the clause, provided it was worded in such a way that it did not preclude me using skills gained on the job for a different employer. Otherwise it impacts my ability to provide for myself in future, so I can't take the job unless there is financial compensation over and above a normal salary.
For a non-compete I would probably tell them I was just not willing to sign at all as it would definitely impact my ability to provide for myself in future.
But at that point I think it's perfectly reasonable to offer a compromise - "as this restricts my ability to find future work, I will need to be paid for the duration of the clause, or I cannot accept the job"
Also in this scenario, employers generally won't make you sit out for the full length of the non-compete. They may have you sit out for a few months until the critical product you were working on launches and they can claim first mover advantage, etc. Since it is now a business case, it generally makes no sense to make old employees sit idle for a year.
Either way, that just tells you the compensation for the non-compete should be at higher than your usual salary, does it not?
Ok that's a bit extreme but could as likely be the case for some people.
So if you want perks you will have to pay for them prices may differ depending on the clause but they need to be clearly outlined in the contract.
Not to mention clauses like non competes should be extremely expensive since their tying your hands for a significant amount of time.
I sincerely doubt their paying enough extra for all the classes you see in a regular American contract.
You could argue amazon might be but what about all the other companies that present you basically the same standard contract?
Are they really paying for them or are they just taking advantage of the fact that the work force in America will most likely accept any ridiculous clause in their contract to get a job?
If each one actually had a well determined price tag you would see most of the unnecessary ones disappear really quickly in an attempt by the companies to save money.
So contracts should have to be itemized? "$150/month for attending meetings, $300/month for writing code, $50/month for reading your email"?
You have a set of obligations on one side, and a number of compensations (salary, perks, etc) on the other. The latter is the payment for the former.
Not to mention clauses like non competes should be extremely expensive since their tying your hands for a significant amount of time. I sincerely doubt their paying enough extra for all the classes you see in a regular American contract.
Isn't that for the candidate to decide?
Or maybe they'd just lower the regular salary to end up with the same value.
People assume once you finish working for a specific company you're done and you have no more obligation to them so if they want these perks they need to specify how much extra they are paying for them.
The real problem with contracts today is they can trow whatever they want in and make it as complicated as possible in the hope that you don't read it when signing it.
If they were required to give you a summary of the important bits this exploitation would be harder to pull off.
Then lets make it an obvious cost by making unpaid non-competes illegal.
That way if it is just a part of compensation the company can offer less up front salary and handle non-compete clauses by continuing to pay your salary.
If someone is an existing employee and you want them to sign a new employee agreement, you need some additional consideration besides "we let you keep your job," such as an increase in pay.
IANAL but 'icebraining is accurately describing US law. We nerds in the US need to fully internalize what the law is before we can fight it.
Contracts require consideration. If we agree you will give me $400 tomorrow, that is not a contact. If we agree that I will give you $200 today and you will give me $400 tomorrow, that is a contract.
 There are other components that make contracts legal; technically I'm only describing the consideration aspect.
One of the most common principles across a wide range of jurisdictions is for the default assumption to be that the salary compensates for the tasks and duties carried out in the contract period only.
Further, there's a public policy concern, in that non-competes in extreme cases can make a person unemployable during the period, and force this person onto welfare programs, and society as a whole thus have an interest in ensuring that consideration for potentially making you unemployable is made explicit and coming due if/when you're actually prevented from taking up a job.
This is very important, and something that very often gets lost in discussions of employment contracts, minimum wage etc etc.
The prospective employee needs to make rent. The prospective employee needs to eat. These are very basic and powerful motivations and we (as a society) should not let business take advantage of these to low-ball on pay or impose onerous contract terms.