smith___ (4) [Avatar] Offline
#1
It's crap that the author gave a poor review for a competitor's book.

http://msmvps.com/blogs/jon_skeet/archive/2008/03/21/book-review-head-first-c.aspx

Manning ought not stand for this.
jon.skeet (448) [Avatar] Offline
#2
Re: Crap review for a competitor.
Firstly, I don't really regard HFC# as a direct competitor - it's clearly not aimed at the same audience. Anyone who needs HFC# would get lost in C# in Depth, and anyone who gets a lot of out C# in Depth is unlikely to get much out of HFC#.

Secondly, I believe I lay everything out *very* clearly. No-one could think I'm coming to this book entirely without bias. Furthermore, I'm detailed in my criticism - I don't just write it off as a bad book without justification. In fact, now that the errors have been corrected I think a lot more favourably of the book, and plan to do a review of a later printing when I get time. Without my review, it's quite possible that a lot of the errors would still be present. Andrew and I have had many pleasant conversations.

You may be interested in the reviews I wrote of "C# 3.0 in a Nutshell" and "Accelerated C# 2008" - they're more positive reviews of books which are in much closer competition with C# in Depth. If I were trying to put down the competition instead of giving carefully considered and detailed reviews, wouldn't I have been negative about those books too? (Another book, "Programming C# 3.0" by Jesse Liberty, is a reasonably close competitor and I did give that a broadly negative review - but again, with detailed reasons.)

The way I see it, if I'm going to review a book at all, I need to be honest. Sometimes that can be painful - there are plenty of sloppy books out there, as well as some excellent ones. Now maybe you think I shouldn't write any reviews at all - but in what way would that make the world a better place? Note that I haven't posted this review on Amazon, or indeed rated the book on Amazon - I've kept it to my own blog. It's still entirely public, but it's explicitly associated with me; I'm not trying to hide my authorship of C# in Depth in any way, shape or form. It's up to readers of the review to decide how to interpret it - whether my criticisms are justified and whether indeed they care about those aspects of the book.

If I had written a lazy review, your criticism would have been justified. As it was, I spent a long time reading the book and then writing a detailed review, which is entirely open about the context and background. Is that really such a bad thing? Do you really think it would be better for me to effectively have my opinions censored?

Jon
smith___ (4) [Avatar] Offline
#3
Re: Crap review for a competitor.
Writing a longer and more detailed criticism does not justify your unethical actions. In fact, it makes those actions worse. Spending a great deal of time detailing a long list of perceived flaws is far more damning, and almost certainly drives readers away from your competitors. Some of them certainly end up buying your book instead. By definition, these potential readers do not have the background or context to interpret your review and decide whether your criticisms are justified. If they had that context, they would not need the book. Thus, your highly self-serving arguement is deeply flawed.

And it is not as if the targets of your attacks (yes, they are attacks, whether or not you recognise that fact) have any defense against this tactic. You have a respected position in the community as an author, blogger, and Microsoft MVP. Using that reputation, along with your high Google page rank, to poison your competitors is not ethical, no matter how honest you believe your words to be.

The ethical and honourable thing to do would be to remain silent. You have complete discretion to use your judgement and keep your negative opinions to yourself. I am sure there are plenty opinions that you have that you would not feel comfortable publishing -- we all self-censor as a matter of routine. Self-censorship is not the same as censorship. It is far more ethical to remain quiet than to disparage another if that disparagement benefits you.

I believe that you are an ethical person, and that if you allow yourself to be honest with yourself, you will recognise this truth. That is why you had to use such convoluted reasoning. If you were not an ethical person, you would just ignore me. I hope you can be convinced by reason, and decide to do the correct, ethical thing.
mgravell (64) [Avatar] Offline
#4
Re: Crap review for a competitor.
woah, slow down their... in particular your last argument is a bit of a dubious logical argument. I have to agree with Jon here - writing a *sloppy* review would unethical. Writing a detailed and frank review **is** a reasonable (and constructive; see the changes) thing to do, and the fact that the books are *broadly* on the same topic is largely irrelevant (they really aren't direct competitors). Or should he only review the books that are free from error?

I'm not going to waste too much time trying to convince you otherwise, but I think you've missed the point here...
jon.skeet (448) [Avatar] Offline
#5
Re: Crap review for a competitor.
> Writing a longer and more detailed criticism does not
> justify your unethical actions. In fact, it makes
> those actions worse. Spending a great deal of time
> detailing a long list of perceived flaws is far more
> damning, and almost certainly drives readers away
> from your competitors. Some of them certainly end up
> buying your book instead.

Do you have any evidence that anyone who was considering buying HFC# for themselves bought C# in Depth instead? If that's the case, then certainly one of those books is wrong for them - they simply don't have the same target audience.

I make no secret of the fact that C# in Depth is not aimed at beginners - and indeed I've recommended against beginners buying it in various places (particularly on Stack Overflow).

> By definition, these
> potential readers do not have the background or
> context to interpret your review and decide whether
> your criticisms are justified. If they had that
> context, they would not need the book.

If they can't judge whether my technical criticisms are correct (such as whether string is a value type or a reference type) then they definitely shouldn't buy C# in Depth. If someone is so clueless that they don't realise they're a newbie and should buy a book aimed at beginners instead of one very clearly aimed at reasonably experienced C# developers, then I don't have very much sympathy frankly.

> Thus, your highly self-serving arguement is deeply flawed.

In what way is it "highly self-serving" exactly? I very much doubt that my review has driven any sales of C# in Depth - and nor was it meant to. It was meant to highlight the problems (and good aspects) of the book. I think it achieves that aim.

> And it is not as if the targets of your attacks (yes,
> they are attacks, whether or not you recognise that
> fact) have any defense against this tactic.

Other than the fact that I always offer the author of a book I review the chance to respond to the review before I publish it? See my review for Pro LINQ, for example, which contains Joe's responses inline.

> You have a respected position in the community as an author,
> blogger, and Microsoft MVP. Using that reputation,
> along with your high Google page rank, to poison your
> competitors is not ethical, no matter how honest you
> believe your words to be.

If you're accusing me of dishonesty, please cite exactly where I'm being dishonest. Do you doubt that the flaws I point out actually exist?

> The ethical and honourable thing to do would be to
> remain silent. You have complete discretion to use
> your judgement and keep your negative opinions to
> yourself. I am sure there are plenty opinions that
> you have that you would not feel comfortable
> publishing -- we all self-censor as a matter of
> routine.

I typically don't self-censor when I believe that pointing out flaws is for the greater good. As the result of my review, some people may have chosen a different beginner C# book - hopefully a more accurate one than HFC# was at the time of my review.

More importantly, the book itself has improved significantly, so that in its later printings most/all of the actual errors I noticed have been removed. Do you really think that's a bad thing? Would the world be a better place with those mistakes still confusing people?

> Self-censorship is not the same as censorship.

You suggested in your first post that "Manning ought not stand for this." That's encouraging censorship, isn't it?

> It is far more ethical to remain quiet
> than to disparage another if that disparagement
> benefits you.

If you can find a single person who was considering buying HFC# but bought C# in Depth instead due to the review, you've got a point - but I suspect you won't find such a person, as the target audiences are so different.

> I believe that you are an ethical person, and that if
> you allow yourself to be honest with yourself, you
> will recognise this truth. That is why you had to
> use such convoluted reasoning. If you were not an
> ethical person, you would just ignore me. I hope you
> can be convinced by reason, and decide to do the
> correct, ethical thing.

Where exactly is the convoluted reasoning? Please cite which aspect of my argument is in any way convoluted. It seems pretty straightforward to me.

Jon
smith___ (4) [Avatar] Offline
#6
Re: Crap review for a competitor.
I felt I'd made my point, and was prepared to leave it be. But I happened across a copy of Head First C# in Waterstone's. I retrieved the review in question on my mobile -- quite easy, as it is the first review with content in the Google results (http://www.google.co.uk/search?q=Head+First+C%23+book+review). Your litany of complaints is damning. Here are your claims, verbatim from your review:

* Claiming that string is a value type (in several places). Oh, and object, once.
* Claiming that the range of sbyte is -127 to 128 (instead of -128 to 127). Same kind of mistake with short.
* Constantly using field and property as if they were interchangable. They're not, they're really, really not. Just because they're used in a similar way doesn't mean you can be this loose with the terminology.
* Claiming that C# "marks objects for garbage collection". In fact, for the first 6/7ths of the book there's a strong implication that garbage collection is done in a deterministic way; that objects are immediately collected when the last reference is lost. We do eventually find out that it's non-deterministic (although that explanation is also flawed) but by then it may well be too later for the reader. More on this in a minute.
* Claiming that methods and statements always have to live in classes. Funny how structs can have behaviour too...
* Claiming that "objects are variables" (in a heading, no less). I know from experience that trying to accurately describe the interplay between objects, variables, and their values is tricky - but even so...
* Writing a hex dump utility using StreamReader - broken by definition, given that hex dump tools are used to show the binary contents of files, and StreamReader is meant to read text, decoding it as it goes.
* Claiming that structs always live on the stack.
* Expanding WPF as "Windows Presentation Framework"

Damning, that is, until one takes the time to verify them. I am deeply disappointed, because I could not find truth in your claims. Here is my evidence.

* I consulted the index and found that "hex dumper" appeared on exactly one page. On that page I found a note on the page, clear as day, telling the me exactly why StreamReader will not work, and, in fact, giving me exactly the right solution to fix the problem.

* A fluke, I figured, so I consulted the index again, this time for "WPF." And indeed, the index does expand WPF as "Windows Presentation Framework." But the actual page in the book expands it as "Windows Presentation Foundation." While your review is technically correct on this point, I believe it is highly misleading that you do not indicate that the error is only in the index, and that it is correct in the text of the book.

* I found "struct" in the index, and it only appears on a small number of pages. The book, in fact, did not claim that structs always live on the stack. In fact, it said the opposite: that they can live on the stack if they are boxed.

* I found "sbyte" in the index. The page did, in fact, give the correct range of -128 to 127.

I did not have time to stand around in the shop and analyse the rest of the claims in your review. If I carefully paged through the book, I now have no doubt that I would not find examples of using field and property as if they were interchangable, or that string and object are value types. Can you honestly tell me otherwise?

This is shameful.
jon.skeet (448) [Avatar] Offline
#7
Re: Crap review for a competitor.
Congratulations - you've *actually* found evidence of what I've repeatedly stated: that the author and I worked together to fix the problems that I found. Undoubtedly you were looking one of the later printings - whereas I had the first printing (the review is pretty old). I pointed this out within this very thread: "More importantly, the book itself has improved significantly, so that in its later printings most/all of the actual errors I noticed have been removed." Did you actually read what I wrote at all?

In fact, if you look at one of the most recent printings, I encourage you to check in the acknowledgements section - you'll see that Andrew explicitly thanks me there.

Do you want me to actually take photos of my copy of the book to prove that these errors exist? I still have the first printing with all the errors there. Or do you think that I'd photoshop the photos? I take accusations of dishonesty *very* seriously.

You might also want to look at O'Reilly's errata page for the book:
http://oreilly.com/catalog/errata.csp?isbn=9780596514822

For example, from the errata: "In the header and first line of body text change 'Windows Presentation Framework' to 'Windows Presentation Foundation'." So yes, I'm not at all surprised that you didn't find the error there - it's a pity it still exists in the index. However, I hope you would consider that reasonable evidence that the error *was* there - unless you also think I'm somehow hacking O'Reilly's website.

What you've shown is evidence that my review has had a positive effect on the accuracy of later printings. Care to point out what's so "shameful" about that?
jon.skeet (448) [Avatar] Offline
#8
Re: Crap review for a competitor.
Oh, and you should also note that I included in my review the facts that:

- I was reviewing the first printing, and the book was already on its third printing with a bunch of errors corrected
- Andrew was looking through the errors I'd submitted to him and fixing them for the next printing: that was back in March 2008.

In other words, if you'd read either this thread or the review carefully, you'd have seen the reason why you didn't find the errors I reported.
smith___ (4) [Avatar] Offline
#9
Re: Crap review for a competitor.
If you think that it is sufficient to have a single sentence at the bottom of the review that states that many errors "should be fixed in the next printing," you are quite mistaken, sir. It is highly doubtful that anyone would read your review and even catch that. I admit that I did not, but I do not think that is even my fault. Even taking into account your addendum from 22nd March 2008, I believe that any typical reader will get a unfairly negative impression.

Please, approach your review again with fresh eyes. Would you, as an eager student of C#, purchase a book that is incomplete and has "K&R bracing" and features top-down learning? Possibly. But would you purchase a book rife with errors? Absolutely not, and this is where your review crosses the line.

It is one thing to tell your readers that you disagree with the style of a book, but quite another to tell them to expect errors. If the errors are gone, then you must update your review to reflect that.

If it is true that the first printing had these errors which the author swiftly corrected, that is true and should be mentioned in an appendix, note or comment. But your review gives the impression that those errors still exist, and that is unfair.

I implore you to do the needful and correct your review to match the current edition.
jon.skeet (448) [Avatar] Offline
#10
Re: Crap review for a competitor.
I see. So after practically being accused of falsifying errors, and disproving that accusation I get what - an apology? No - another scolding.

I note that you not only failed to read the review, but you also haven't read this forum thread either. From my first post:

> In fact, now that the errors have been corrected I think a lot more favourably of the book,
> and plan to do a review of a later printing when I get time. Without my review, it's quite possible that a lot of the errors would still be present.

From my second post:

> More importantly, the book itself has improved significantly, so that in its later printings most/all of the actual errors I noticed have been removed.

I feel that both of these make it pretty obvious why you wouldn't find the errors I listed in a later printing. I can only infer that you haven't been reading my replies. Could I ask you to please do so before you next accuse me of "shameful" behaviour?

The first, second and third printings had those errors as far as I could find (i.e. I reconciled the first printing with the errata from the second and third printings). If you actually read the review you'll see that I spelled out quite clearly which printing I was reviewing, and that I'd checked the errors I'd found against the ones listed for the second and third printings.

Frankly I would be somewhat concerned about buying a book which had had those errors in earlier printings, as it would suggest that there could easily be other serious mistakes. I'm hoping that's not the case, but I haven't looked at the latest printing (which Andrew kindly sent me a copy of) in detail yet. I hope to do so at some time - and as I said before, I intend to write a review of the later printing at that point. This was a review of the first printing - and I made that quite clear in the review. I also made it clear that some errors had already been fixed, and some were in the process of being fixed.

When I write the next review, I will certainly link to it from the original. In the meantime, I will try to find the time to add a line at the start of the review to further highlight the fact that the errors were present in the first edition but many of them are now fixed... but I'm rather busy with my own second edition, and frankly you've taken up rather a lot of my time already with false accusations. I will not be removing that list of errors from their currently place in the review - they are part of my impressions of that printing, and as such are perfectly valid for that review. It is up to the reader to decide how relevant they are in the light of future printings.

Message was edited by:
jon.skeet