Sometimes computing jargon is pretty idiotic.
Take the words "synchronous" and "asynchronous".
A synchronous API is one which blocks until a result is available.
An asynchronous API is one which returns immediately and lets you do other things until it notifies you of the result.
Now take the English definitions:
Synchronous \Syn"chro*nous\, a. [Gr. ?; sy`n with + ? time. Cf.
Happening at the same time; simultaneous.
Asynchronous \A*syn"chro*nous\, a. [Gr. ? not + synchronous.]
Not simultaneous; not concurrent in time; -- opposed to
(taken from Webster's 1913 American English dictionary)
So clearly the jargon meanings of the words are exactly the opposite of their English meanings. How did this come to be? I'm guessing it had something to do with the invention of preemptive threading. When preemptive threading came along, suddenly it was possible to make a blocking API —one that does not allow other code to execute while it is executing, because it hasn't yet returned—to allow for some concurrency, or synchrony. Preemptive threading allows a blocking API to be used synchronously. Somewhere along the lines, I assume, people forgot about the part of the sentence "preemptive threading allows ... to be used" and mangled it into "blocking = synchronous". The opposite of this, "asynchronous", soon followed, unrelated entirely to the actual semantics of APIs described as such.
You'd better enjoy your crappy jargon while it lasts, programmers. When my revolution comes, you'll be the first up against the wall.