I covered UML quite extensively in my Uni course. It's a useful tool, but there seems to be an attitude that you should design the entire program in UML before you touch a Development Kit, which is, to put it bluntly, pointless, because without doubt the finished product will only be mildly related to the original plan with regards to structure. Sometimes you don't realise you need a class or variable until you are actually writing the code or, even worse, the code structure forces to do things differently (for example, Java only allows one Superclass, whereas, iirc, C++ allows several, so that can change the design structure of the code).
I tend to use UML side-by-side with development, I draw a quick, rough UML diagram to describe what I'm looking for, and then use that merely as a guideline, rather than a blueprint of the code.
Use-Case diagrams, on the other hand, are beyond useless.
Edit: The other thing that pisses me off is that there seems to be no consensus on what to call things when dealing with Object Oriented stuff and inheritance, you start sitting there asking 'Is that an Extended Class or an Interface because the language uses a different term to the UML?"