The earliest thing I can find about the term "atom" is from the Lisp programming language (source). However, it probably originally came from mathematical logic. In programming they are also called Symbols and at its simplest form are name integers (an enumerated type in C would be an example). However, they are widely used in many programming languages and in the Win32 API and Acrobat API they are identifiers for strings in a table.

Also, as Mehrdad points out, the original meaning in Greek is "indivisible", so they imply a primitive data type which cannot be broken down any further.

As for the etymology of the name ATOM, I know I've once seen it in some old Microsoft Win32 API documentation that it is an acronym of "Access toMemory" or something like that. It is a term used for simple numerical identifiers (other name is "handles") which represent some internal data structures in the system.

From obvious reasons, it wouldn't be smart to give the user direct pointers to these structures. First, because they reside in kernel space, and second, because it violates encapsulation. The user could then just free the memory which doesn't belong to it, or overwrite it, or some other stupid ideas. So the operating system simply gives it some replacement number tag (that's the ATOM), which then could be used to request the data from the system. It's also faster for the user to pass around the little number instead of the whole huge data structure. Users don't need to care about memory allocations & stuff, or accessing some data through pointers which are no longer valid, which could simply crash their programs.

Users don't need to care about memory allocations... You know that also ATOM tables have limits, this is especially true for the global atom table.
–
WolfFeb 23 at 14:06

You've got me wrong. I was not talking about allocation space, but about allocation method. That is, users don't have to care about how to allocate memory for these objects and where, they don't need to deal with all the fuss of allocating, freeing, and checking for invalid pointers. But of course they still need to care about how much memory they allocate for their resources. But I thought this is obvious.
–
SasQFeb 24 at 14:38

Yes, that's clear to both of us. Your answer still seems a little too optimistic. Why do you not just name the reduction of the most annoying aspects of memory management (ressource leaks, dangeling pointers)? The allocation itself can fail, and this of course has to be checked.
–
WolfFeb 24 at 15:07

Sure, but as I said, those are the unimportant details which are irrelevant to the original question asked. Why to bother stating the obvious at all? If the original poster didn't asked about them, I assume he is smart and aware of these details. He only asks about what is ATOM. But if you think otherwise, why don't you add your own answer?
–
SasQFeb 25 at 18:09

Ok. Your approach to this question was not easy to get for me, because I found it (the question) searching for the width of the ATOM type. (sure it's 16 bits, but on purpose? For all future? ... MS itself isn't clear about this)
–
WolfFeb 26 at 8:49