Slashdot Mirror


Java Puzzlers

Kylar writes "When you have spare time and decide to do something with a book (That's like an analog webpage, for the neuronauts among us), how often do you turn to a computer related book? How often has it happened in the last year? Right. The problem being that computer books are often either: a) boring, b) difficult to read, c) poorly written, or possibly: d) made of cheese." Read on for the rest of Kylars' review. Traps, Pitfalls, and Corner Cases - Java Puzzlers author Joshua Bloch, Neal Gafter pages 282 publisher Addison-Wesley rating 9 out of 10 reviewer Tom Byrne ISBN 0-321-33678-X summary 95 Corner cases and traps that any serious java developer should be aware of (or entertained by.)

Java Puzzlers is none of the above(*), being well written, amusing, whimsical, and above all, informative. Bloch and Gafter have brought us a book that entertains us with corner-cases, one-in-a-million chances and other happenings that explore the ins, outs, and guts of the Java Programming Language.

Anyone who has been a serious java programmer in the last several years should know the name Josh Bloch, and more importantly, should have read his book Effective Java. Josh, acting as java's platform architect has been directing and guiding Java into it's current incarnation as a mature, robust (Cue the laughter from the peanut gallery) programming language.

This book primarily references the Java 1.5 programming language, and some of the puzzles are 1.5-specific, although a significant portion of the problems are applicable to previous versions. Also, this book is aimed towards people who are competent-to-expert java programmers, and although there is a lot of good information, people who are new to Java will probably be a bit lost. As it stands, I have 7 years of Java experience, and I was only able to figure out about 15% of the puzzles without resorting to code, or more frequently the answer. The reason that I didn't stop to try out most of these problems is that the book is eminently readable, and difficult to put down (unusual for a computer book, and doubly so for one that delves deeply into a language specification document.)

This book dives into a lot of esoteric bits of the Java Language Specification, also known as "The Big Paper That Sometimes Tells Us Why Java Acts Like That," and there are lots of bits in there that don't even make sense, let alone seem intuitive.

Divided into 10 parts, each part presents a series of different code problems that usually present a small method or class that looks innocuous, but in reality exposes a piece of behavior that is strange, spectacular, or, more often, completely confusing. The book exposes flaws in the language, including one of my personal pet peeves, their inability to have a consistent Date object, and this is noted in Puzzle 62 by my favorite line in the book: "The lesson for API designers is: If you can't get it right the first time, at least get it right the second..."

One topic that I found was a continually recurring theme had to do with handling primitives and what happens when they are cast into different types. Java provides a lot of ways to deal with primitives, and for the most part, they play nicely with each other. There are several occurrences that really surprised me. A perfect example is the following innocent statements:

byte b = -1;
char c = (char)b;

so c=-1, right? Wrong. Places like this are things that you could potentially knock your head against the wall trying to figure out why something doesn't do what it appears to do.
(In this case, byte is signed, char isn't, and the widening cast fills in bits, leaving c=65535.)

A good job is also done describing best-practices for API and library designers, as well as us, the more mundane programmers.

The only downside (from my background and point of view - that of an applications architect, and not generally as a language or API designer) - is that some of the amazing optical illustrations can cause dizziness and nausea - although I can't guarantee that won't happen by the loops and twists that your mind will be tied into because of the puzzles.

Lastly, Bloch & Gafter include an appendix that serves as a summary to all the pitfalls and traps that are introduced in the book, and almost could be an appendix to Bloch's 'Effective Java'.

The bottom line is that in reading this book I learned a fair amount about several edge cases and issues that I had actually encountered - and it increased my understanding as to HOW java does things - although I'm fairly certain that I'll never understand the WHY. And most of all - I enjoyed this book, from start to finish, and that's rare, and worth the time.

You can purchase Java Puzzlers from bn.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.

9 of 239 comments (clear)

  1. I enjoyed Java Puzzlers, but... by Anonymous Coward · · Score: 5, Funny

    ...it took a long time to load the first page. On the other hand, if you drop the book on the ground, it automatically throws itself into the garbage can.

  2. Not interested by TreeHugger04 · · Score: 4, Funny

    If the title of a puzzle book does not contain the letters s,u,d,o,k and u in it, I am not interested. Sorry.

    --
    A citizen of America will cross the ocean to fight for democracy, but won't cross the street to vote in an election.
  3. /. is made of cheese by fohat · · Score: 4, Funny

    The problem being that Slashdot Headlines are often either: a) Dupes, b) boring, c) difficult to read, d) poorly written, or possibly: q) made of cheese

    To the moon, Java!

    --
    Is there heaven? Is there Hell? Is that a Tuna Melt I smell?-Primus
  4. Yikes! by Anonymous Coward · · Score: 3, Funny

    If that c != -1 example isn't obvious, it may be safe to assume that former VB programmers have started programming in Java! Run!

  5. I'm sure by jkind · · Score: 2, Funny

    I'm sure a book called C Puzzlers would sell at least twice as well as this.

    --
    ~jennifer.k~
  6. Re:Puzzling indeed by greg_barton · · Score: 5, Funny

    Why would anyone use Java?

    From now on? Just to piss you off.

  7. No you don't by jpardey · · Score: 2, Funny

    Some of us don't hate gay people, while still hating the word "Neuronaut."

    --
    I have freaks! I did something right...
  8. Re:Oh come on! by Surt · · Score: 2, Funny

    Perhaps kylar has been submitting a lot of stories, gradually moving where he inserts the random garbage into the story description, to find out just how far the slashdot editors will read before posting a story. His research seems to indicate the slashdot eds give up around 350 characters.

    --
    "Who is the Journal of Quantum Physics going to believe?" --Stephen Hawking
  9. Re:Puzzling indeed by mrbuckles · · Score: 3, Funny
    He'll be here all week, folks.
    Ah, there's nothing more productive than starting up the "your language sucks, you should code in [insert my language of choice here] because it's what real programmers use" argument. I've yet to meet a coder whose ability I truly respected that ever got into such an argument. But, hey, maybe this is really useful. Under that guise, let's run the entire argument here and anytime you feel like a language being discussed is for half-wits, you can reference this.

    So, here's the argument in order from first salvo to coup-de-grace

    1. [Language being discussed] is for n00bs! You should code in [language-1]
    2. Ha! You think [language-1] is great? I agree you're not as l4m3 as the n00bs who code in [language being discussed], but please -- time to go to [language-2]
    3. *Sigh* I'm so amused (not) when I come to /. and see you [language-2] coders flaming [language being discussed] coders or even [language-2] coders. It's all a bunch of crap and explains why so much money is spent tracking down buffer overflows and other security flaws. Get to machine language or get out!
    4. I use 3 keys when I program -- 0, 1 and enter. Bitches!