Do you already program in Java? Do you want to go
beyond building neat GUIs for applets or desktop
applications? Java has two great strengths. It was
built with graphical objects (widgets) being an
inherent part of the language. This is an immense
strategic advantage over earlier text-based languages
like C and C++. For graphics, those needed special
graphics libraries that were not part of the original
languages, and which varied from vendor to vendor and
between operating systems. The ease of use of Java
widgets led to its rapid gain of programmers'
mindshare. Indeed, if you look at a row of Java books
in a bookstore, you will see most packed with
attractive diagrams of cool graphics.
But there is a second great advantage of Java. It was
designed with Internet awareness from its inception. C
and C++, due to their earlier vintage, have to use
libraries that vary with the operating system. Java
gives you a consistent interface to network
programming, independent of the operating system. It
is to this exposition that this book from Addison-Wesley
is devoted. Written by two Queenslanders, it assumes
that you already know the rudiments of Java. This is not
a book for tyros. If you want to write a network client
(for example, a specialised mail reader), or a multiplayer
online game, or a software agent that trolls the Internet,
then this book can be very useful.
It describes how to use TCP sockets, UDP datagrams,
multithreading, HTTP and other topics. It expands on
CGI for building applets. For client-server
applications, it devotes entire chapters to servlets
and RMI (Remote Method Invocation). If you need to use
CORBA, maybe because you have some legacy code that
you want to write a Java program to interact with,
then you will find a chapter expounding on it.
If you have already been programming Java GUIs, then
this book will expose you to a more abstract class
of problems. There is no visual feedback from widget
layouts here. What feedback you get is from text-based
output. What you have to design against are problems
based on data flow across a network.
The authors have written clearly, and the code
examples are well done, illustrating simply the
desired concepts, without tangling you in the details.
The only slight critique I have is that there is no
comparative assessment of the network capabilities of
Java vis-a-vis C#/.NET. The latter pair is an even
newer language/programming environment that also has
networking built in. But this may be unfair and
straying from the book's scope. C# and .NET have just
been released by Microsoft, and it is not certain if
they will gain much traction. But if they do, you will
undoubtedly see many books arguing the relative
merits.