Along the lines of my post about assumptions and variable names, here's a list of a few common programming misconceptions that I often run into (with other people's code and with my own).
What you think the code does is often not the same as what it actually does.
There is a big difference between: intended, expected, and desired. Something can be both intended and expected, but undesired; but it can also be intended and desired, but unexpected.
And my personal favorite:
What the method/function name says it does is not the same as what it actually does.
Naming is hard.