Sunday, July 13, 2008


Recently I’ve looked through new book “Data structures and Algorithms using C#” by Michael McMillan (Cambridge University Press, NY, 2007). The title was sound promising for me as well as abstract. But then… Hmm... The idea is really good, but realization is really raw, I’ve spent about 4 hours reading this book and noted inadmissible amount of mistakes and inaccuracies.
Sometimes round brackets () are used instead of square [] in arrays. Sometimes author completely forgets that his book is declared as C# book, and he starts talk about VB.NET (chapter 6), it seems that this chapter was taken from other book, and here is the proof: Page 99 tells us about method ConvertBits() that was developed earlier, but there is no such method back to start of the book :). The same for the Chapter 16. :)
Fig 3.1. Lies. This is not a Bubble sort algorithm :). There are a lot of copy-pastes in text. Some methods completely don’t agree with their descriptions. For example so-called “Self-organization according Pareto rule” SeqSearch subroutine from chapter 4 is actually “Bubble-pop self-organization” SeqSearch, that described at the end of the section.
Author wrote a lot of unnecessary code, for example he wrote a Timing class that behaves similarly to the StopWatch class already defined in FCL … (chapter 1), or he could use Char.IsDigit() method instead of writing regular expressions in implementation of own method named IsNumeric() (chapter 5).
Sometimes code is just wrong. For instance on pages 60-61 a loop starts from 0 instead of 1, that leads to IndexOutOfRangeException on a first step. Find primes method (chapter 6) is completely wrong and even will not compile. Wrong variable name in Node class (p.221). Code on page 230 (chapter 12) contains important misprint; printed: parent.Left = parent.Right; but should be parent.Left = current.Right;. Wrong method call (p. 256) in Insert() method; printed: ShiftUp[currIndex]; but should be ShiftUp(currIndex). AVL Trees Insert() method (p. 267) contains mistakes: height is variable but is used like a method. I can continue this list… but it should be already clear that this book is really very raw.
I’m not sure why it was published, but I will not recommend reading it. The main idea about data structures and searching algorithms with C++ (and sometimes with C#) examples can be taken from Wikipedia. It is much better and more efficient than resolve author’s mistakes.

No comments: