@Bass: Code that is self-evident with respect to what it does isn't necessarily self-evident with respect to WHY it was done a particular way. Programming is about choices, and you sometimes have to explain why you took a particular choice over another. I personally don't comment my code much, but this is one of the few reasons for which I comment even when I'm the only one to read the comment.
As for nulls, they're not usually types per se. They simply add to the range of possible values for a given type. I find the concept useful.
OTOH, I think the difference between == and === operators is one of the most retarded concepts ever invented.