I have to say I don't do diagrams or other documents for purposes of documentation but I sometimes draw with a co-worker so it's easier to be sure we talk about the same things. I wouldn't disagree they're good skills to have but I haven't had to apply them much.
Diagrams take time, but sometimes there is no turn around for them. Currently I have to re program a software that will be replaced on almost all of our clients. Some things will change (like the OO model, configuration system - trying to get back from INIs and reaching XML - , and more). In this case it's very important, because the whole conversion of existing settings is so complicated, if we lose the overview it could get very expensive.
I very rarely comment my code, either. The way I see it if code needs comments then it's poorly written. I did write one comment today, though. I wanted to leave an explanation why a certain function was run after a timeout instead of instantly and since it was to overcome a difficulty with a specific browser there is no good way to rewrite the code so that it'd be self-documenting on that issue. Then again this is in no way a rant against comments and I'm sure the the ability and habit of commenting your code well must come before the code itself starts to take readable enough form. So I guess learning when not to place comments and how to avoid need for comments altogether goes with that.
At home, I almost never comment my code, too. Just trying to comment code I'm sure I will reuse again (DLLs) and when it's very complicated so I could lose the overview about it after some time. Mostly I know my code, nobody needs to read it.
In the company it runs the other way. The supervisors fear the moment you leave the company and leaving a bunch of un-commented code. New staff have to read it for weeks to finally get into work, maybe longer, depends on the projects.
The right approach would be to employ the new staff before the old go to have a fade time new people can learn from the old people. But they rather decide to spare money and force good documentations and comments on code. The safest would be to do both, because there are solutions that are very complicated, even with documentation and comments on code.
You are right there are often situations comments are not necessary. It's not the point to comment a declaration or every loop. On some projects though, many actions lack on sense (so need to be commented very strict) when just reading the code:
- clients with special wishes
- components that do not work like expected and need work-arounds
- stupid behaviors of the languages
- useless old shity code (that made sense just in past) you cannot simply remove because you don't know where it's used <- a common problem, specially on the communication on service endpoints, dare you remove or rename anything, tons of (third party) software will cry about it!!!
It's also important to be up to date with the technology you use for all of your projects, things get updated all the time and expanded with new features.
Yep, this job will never get boring, the brain stays fit by learning.