My current "oh my GOD" reaction to PHP is the great inconsistency in the function names. String functions start with str_, string_, and sometimes something else. This is important, of course, because PHP doesn't have namespaces. The POSIX regular expression function names are only somewhat similar to the Perl regular expression function names. And so on.
This really shows up the dangers of unplanned growth. I'm not suggesting design by committee, but simply articulating a few module design principles could have solved these messes.
Which principles? I'm thinking things like:
I suppose 3 and 4 are really the same. That's the problem with trying to write down commonsense. The underlying principles that govern our behavior are sometimes completely invisible to us. That's why we need people like Damian, who can describe what we're supposed to do in such a way that we go "oh! well, duh. Why didn't I think of that myself?"