Ah well we hate to write documentation! :)
No but seriously, comments in code are definitely documentation as long as they're useful (things like "don't touch this EVER" can't really count). There should be comments every few lines in the code especially in long functions/methods or when it isn't perfectly clear what the purpose of the code is.
In Java for example, it should be a requirement to have Javadoc-type comments in all methods, classes interfaces, enums, and even some fields. That will allow anyone to generate the technical documentation for any application, library or framework they need to work with, and most IDEs nowadays can parse that info and give contextual help with classes and methods. I think .NET has similar features with triple slash comments on methods, classes, fields, etc.
But besides that there should be some higher-level documentation stating the purpose and scope of libraries/frameworks as well as some examples (a sample application can be considered documentation since its purpose is to illustrate the users as to how the library/framework works and what it does, although in this case the users themselves are programmers).
I think user manuals should be left for other people to write. Letting us programmers write that kind of stuff leads to horrible manuals that are barely understandable, and I think it's because we usually know the insides of the application and are thinking in terms of the software, not the user. User manuals should be written by someone who knows how to redact well, someone who has learned how to use the application but doesn't exactly know how it works internally (unless they really need to know because the user will need to know). How to install it and configure it in different environments, etc; QA people are better suited for that, IMHO.