Being able to work smart, and all of that other junk, you will learn over time if you are working hard. Otherwise you'll just remain in a perpetual state of retardation in which you need to ask programmers on an online message board how to 'get good.'
edit:
meh, most of the people here just seem to be amateurs who dont' give a flying horseas5 about business, and the op only really seems to care about programming. I read the slashdot article about how it's increasingly important for coders to know more about the business side of things, but that only applies for coders that actually want a programming job. The path of many here is to have a job outside of programming and keep coding purely as a hobby so it like, you know, remains fun (real programming jobs often aren't).Often domain (business) knowledge is far more important. If all you can do is take a spec and write code, you'll never be the best.