why not use simple number based versioning?
For the same reason we give our children names instead of numbers. A name is something you can relate to more easily than a number. Code names like Gingerbread and Froyo connect each version to a concrete thing that you can imagine, and that connection aids memory.
One technique for rapidly memorizing a list of things (names, for example) is to connect each one to items in a list that you've previously memorized, so that the existing list becomes a memory aid. Code names work a little like that -- it's very easy to forget which set of changes occurred in each version if all you've got are a set of (often very similar) version numbers, but if the versions are associated with something you can think of, they become more distinct in your mind.
It really bothers me because it makes me remember which version is old, which one is new
Products that get code names are often major revisions, things that are spaced out over months or years, and you frequently don't have to deal with more than one or two such versions at a time. If you're giving different code names to your nightly builds you're probably not getting much benefit from the names. Use code names sparingly.