I couldn't disagree with this more strongly--giving somebody a blob of code (no matter how elegant) is a recipe for disaster.
Let's assume good comments--not useless, lying, or broken ones. I won't contest that bad comments are at least as bad as useless, as you doubt would not contest that bad code is at least as bad as useless.
When I read a comment, I parse it directly. When I read code, no matter how neat it is, I often trigger a twitch of "How would I rewrite this?", which itself gets in the way of understanding.
The more code there is, the harder it is going to be to digest at first glance, and if your codebase could be adequately described by a single page of text I would wonder why I need to work on it instead of rewriting it entirely.
Hint: if you only have one page of docs, and especially if you have no test suite, I cannot work on the code in a meaningful way safely.
If you don't value safety, if you don't value engineering, then by all means omit comments. It's just a crutch for people who can't see the code man.
I might also point out that that same philosophy implies that we should just stick with assembly. Especially if you use any language with dynamic types/duck typing (Ruby, Javascript, etc.) seeing "at a glance" what exactly is the proper form of data to pass into and out of function can be hard. Documentation here helps.
EDIT:
Note also that commenting in libraries, or in mathematical or geometric routines, can be really helpful. The code doesn't lie, sure, but if you aren't experienced/schooled/clever enough to recognize what is going on it won't help you.
A great example of this is the fast inverse square root hack:
http://en.wikipedia.org/wiki/Fast_inverse_square_root
This has great examples of both inscrutable (but honest and short!) code, and shitty commenting.