File extensions were originally something that humans put on files to tell each other what they were. Around 1974, for example, I might have a file called "phlist.txt" on an PDP-11 and my cow-orkers would know that was a phone list in raw ASCII format. The OS did not care, labels were for humans. If you wanted to tell the OS to execute a program, you typed "run filename" and if it wasn't an executable you'd get an error message.
Then unix and friends came along, and put an "executable bit" in the metadata for each file, so that you didn't have to type "run" any more. If you typed the name of a file, and it had the executable bit set, the system treated that as if you'd run it. Saved some ink on the teletype, don't you know.
Well, 8-bit micro computers running CP/M and DOS came along, and they sort of half-assed the concept. They still didn't have very much metadata on files, but the extensions .exe and... hmmm... something else I forget right now... were designated as "special". If you typed a word that the system did not recognize, it would look for a file with that name followed by .exe, and try to execute it.
But then Apple came along and built resource forks into their file system metadata, so they were able to associate information about what applications and/or utilities were used to create a file, and give some recommendations on what should be done if a user simply clicked the file. A really significant advance for filesystems, at least in theory.
Now, Microsoft wanted to make people believe that their OS and file system were as capable as the early Apple Macintoshes (pre-OSX) so they faked up a sort of back-alley version of the resource fork using file extensions. They were already checking for that .exe extension anyway, so most of the infrastructure to do this was already in place, they just jammed some hacks in to generalize the mechanism for all file extensions. And then they hid the extensions, so that to a clueless end-user it looked exactly like an Apple mac - you clicked on a file named "phone list" and the phone list application opened up.
This hare-brained scheme doesn't really work like Apple's, of course, because instead of including extra information about the file in the file metadata, instead they have built a separate list of file "types", designated by extension, and actions to associate with those types. In terms of the required slashdot car analogy, this is the difference between having the name of your state or country blazoned on your license plate, or having a giant book where you can look up the number of a car's license and see what state the car was registered in. Obviously the latter is inefficient and scales poorly as well as being fundamentally less capable and having no consistency across individual machines. Using the Apple method, if someone gives me a file with a resource fork, I get the resource metadata with the file. Using the Microsoft method, somebody gives me a file and maybe - if I'm lucky, and have the same applications installed - I will have the same resources associated with the file extension that the person giving me the file had on their machine.
But people who grew up after all this was invented can rarely see how stupid this all is, and always has been. It's like the idiocy of having the label of the volume MFD being the same as the subfolder separator character - nearly all of you young folks think that actually makes sense, in the same way that people brought up in the Westboro Baptist Church think raving bigotry makes sense. You've been conditioned to accept it.
This is only one of several giant steps backwards in computer technology. We used to have automatic file versioning but now programmers are so thoroughly conditioned they don't even seem capable of understanding why that was so awesome.
Now get off my damn lawn, you whippersnappers!