The Farm links to an interview at Artima.com with Anders Hejlsberg about Innapropriate [sic] Abstractions. Hejlsberg makes such an important point in this article that I'd like to highlight. I was reading this series of articles at MSDN about COM, and they kept saying things like:
You write code that uses COM components without worrying (or even knowing) what type of COM object you'll end up using, so you use the exact same code to hook up to an in-process, local, or remote object. ... COM does the rest, including starting processes and communicating over the network.
Throughout the article at MSDN, I kept thinking "No, you really should be worrying if something's going out over the network". You have to program something completely differently if that's the case. Hejlsberg highlights this:
The prevailing wisdom five or ten years ago about how distributed systems would be built in the future was CORBA, IIOP, object request brokers. The rave at the time was to make the world look like objects, in particular, to have a bunch of infrastructure that shrouds the fact that objects are distributed. The nirvana ideal was that you could just say Object obj = CreateMeAnObject(), and then call obj.ThisMethod(), obj.ThatMethod(), and you wouldn't know if that object was over in Thailand, right next door, or in the same process. The problem with that type of programming is: it works great in a single process; it works quite well across processes; it works fairly well in a small intranet; but then it completely sucks thereafter.
If you hide the fact that messages go across a network, and don't know when they go across, you end up with chatty conversations. And all of a sudden, the speed of light can become a big problem for you. You can't engage in a conversation with an object out in New York that goes, obj.LetMeGetX(), obj.LetMeGetY(), obj.LetMeGetZ(). No, you need to say, obj.LetMeGetXYAndZ(), and have everything come back in one chunk. But you can't really do that unless you actually make people understand that they are building a distributed application. In other words, you shouldn't try to pretend that a remote object is just a local object, because there is a difference.
I really wish I could remember where, but I remember reading years ago about a bug that exhibited behavior limited by the speed of light.
You may have been thinking of the case of 500-mile e-mail[1].
[1] http://www.ibiblio.org/harris/500milemail.html