My personal bugbear is that IT sectarianism rears its ugly head when it comes to commenting code. There are hard core polarised views held by noisy evangelists and a quiet block of pragmatists in the middle.
We must not lose site of why documentation should be written. It is to impart useful knowledge to the poor sod who will end up maintaining your code....and sometimes that poor sod will be you! I have come across notes and comments in code that made perfect sense at the time I wrote them and a year later keep me awake at night wondering what I meant.
I have been experimenting with Cucumber/Gherkin and the language of the tests constitute a catalogue of the requirements that are readable by a non-technical person at a level that enables them to say "Yes, that is what I want".
I haven't had time to dig deeper in the .NET world but I believe that SpecFlow allows a similar approach.
The idea of the Gherkin language is that it is programming language agnostic. If you ported your app to another programming language then the tests would stay the same, it would be the implementation language that would differ. It's worthy of further investigation.
When I look at code with a good test coverage then what I have is a good catalogue of requirements for the code. This is not to be sniffed at, it is to be treasured for the rarity it is. Although a significant piece it is only one piece in the documentation jigsaw.
I learnt to programme by typing in listings published in magazines. The programmers who submitted those listings supplied comments and wrote the article around their code
with a view to educating the next generation of programmers. For that reason I view code comments as a means of educating the next generation. We have a plethora of tools such as JavaDoc that can scrape structured comments from code and publish them. Instead of railing against code comments I think the "source code is the only documentation" crowd would be best figuring out how best to capitalise on the tools available to keep documentation to a useful and pragmatic minimum.