This was a very difficult book to review. I have been sitting on it for longer than I intended, wondering whether in fact I was qualified to review it. For a start, the title, on the basis of which I offered to review it, is a complete misnomer. It's not about instant messaging systems. It's about one such system - Jabber. And it's about developing one Jabber application twice - once in Java and once in C#.
Since I am not a Java or C# programmer, I nearly handed the review copy back. However, I do know something about network programming, and about Jabber, having implemented a version of the server some time back, so I thought it was worth persevering. Well for a while, anyway. The problem is that the bulk of the book is taken up with reams of listing of the source code for the application the authors are developing. All of it, as far as I can make out, the boring bits as well as the interesting and important bits.
Come on guys, you included the source code on the CD at the back of the book. Presenting all the source code in this way means that the material that readers really need to read and understand is completely lost.
I cannot really comment on the quality of the code, but I can comment on a couple of things that definitely didn't impress me. First of all the authors hard coded the TCP/IP port numbers into their code. This is a fundamental no-no for network programming - you use the getservbyname() function which allows the user to define which ports they wish to use. This is network programming 101 - it makes me wonder what the quality of the rest of the code is like.
The other thing I would question is that instead of allowing the users to connect directly to the Jabber Server, the authors have an intervening web interface. Now, the web is one of the most clumsy ways of performing instant messaging that I know - I'd even prefer raw telnet to the agony of a web based instant messaging client. Apart from anything else it means that your intermediate server has to generate all the Jabber XML itself.
This way of doing things just doesn't make sense. One of the really nice things about Jabber is that it has excellent libraries for creating custom clients - and they are available in all the popular languages. Any competent programmer could knock up a nice custom client in a day - all the grunt work is done for you by the libraries. Why re-invent the wheel?
I'm sorry; I really can't recommend this book. If you are considering using a Jabber application, then I suggest you look at Programming Jabber by D.J. Adams, which will give you a much better understanding of how to use Jabber.