Roger Johansson -- one of the folks behind the Akka.NET actor framework -- posted today about how he'd learned that the location-transparency of distributed-first systems like Akka and Akka.NET is is a bit of a double-edged sword. That is so true. However, having some experience implementing a system that doesn't attempt to make local and remote message passing look identical, I have to say that it is as much (lack of) programmer education as convenience that harms us.
There is a fundamental jump between local and remote message passing that, while not as obvious as -- say -- going from object-oriented programming in Java or C# to writing (untyped) actors, should not be underestimated. On top of that, distributed systems have a tendency to violate the assumption of homogeneity that programmers are so fond of making. As Johansson states, this may come in the form of interactions with completely foreign systems, but it also comes from dealing with the products of other teams and even versions of one's own software.
Even when the APIs make the semantic and behavioral differences between local and remote communications clear, we -- as programmers -- need to give them some thought before it makes much of a difference. In that respect, the location transparency in systems like Akka is wonderful within the parameters it was intended for: scaling up to a distributed, homogenous, system.