Introduction to distributed programming in Java