In the introduction of my book Debugging Microsoft .NET 2.0 Applications, I said I was going to write a second book focused on native C++ debugging. I’ve got a great outline prepared that has all sorts of interesting ideas. Some of the highlights are a complete focus on very advanced native usage of WinDBG. Things like tracking down memory leaks and wild writes. I also planned to revamp the whole assembly language section to cover x64 assembly language. Finally, I have some new and very cool utilities I want to do for native development. Given the fact that I have megabytes of source code in my books, I like to think of them as software products that just happen to have a bit more documentation.
As Jeff Atwood discussed about the publication of a book he helped co-author (congratulations, Jeff!), writing a general software book is hard. Writing a deeply technical book that involves a ton of code, as I write, borders on masochistic. The first book I wrote, Debugging Applications, I did full time, as I quit my job at NuMega to write it. That experience was only mostly painful because I was being like Charles Petzold and writing full time. The next two books I wrote, I had a job. That turns the writing experience from masochistic to all seven circles of Dante’s hell combined. However, I was proud of how they came out. Even with all the hassle, late nights, and missed vacations, when you get an unsolicited email from a developer who says, “I just wanted to thank you for writing this book,” it’s the highest honor you can get in this business. Those emails from you make all the difference in the world to an author. Thank you for all who’ve ever taken the time to email me.
As you can see from the title to this entry, I won’t be doing a native C++ debugging book. There are a few reasons: first, book sales are declining, and second, because of piracy. Also, a small part of my decision is that Wintellect is growing and we have these wonderful people I work with that deserve to have me focus on the company. I want to discuss the two main reasons in more detail.
There are many reasons that book sales are declining. In his blog entry, Jeff Atwood says that technology-specific books are dead because everything’s online. The plethora of information available online definitely has made it easier to quickly find an example of how to fill out a DataView. For quick and simple things, no book can compete with the immediacy of Google. (Jeff also said not to buy his book. At first I thought he was crazy for saying that, but then I realized it might be a good marketing tactic. If it’s working for Jeff’s book sales, please don’t buy mine either.)
What I think Jeff has glossed over in his blog entry is that superficial usage certainly does not equal understanding. I have always tried to write my books and columns with a focus on showing the technology, but also discussing all the trials and tribulations as to why I chose the implementation I did when using the technology. A good technical book will give the reader the tools to make informed decisions about the technology after they put the book down and head into implementation. Jeff says that he only recommends books that are “timeless” and skips those that are deeply technical because he feels you can find that stuff on the web. I think that’s shortsighted.
There is so much information that developers need to know about technology. For example, with native development, if you haven’t read the discussion of memory management in Windows Internals, 4th edition, by Solomon and Russinovich, you aren’t effectively doing native development. For .NET, if you haven’t read Jeffrey Richter’s discussion of the garbage collector in his CLR via C#, you’re not effectively doing .NET development. No amount of hand waving discussions on the hot agile methodology du jour will help you implement a scalable and maintainable code base if you don’t have a solid understanding of the underlying technology in detail.
At this point, I have to make a confession. As a company who debugs other people’s toughest problems, we don’t mind that developers are not buying books and slapping any random code they find on the web in their application. It just means lots more opportunity for Wintellect to grow. However, as a member of the development community and a computer user it worries me. I don’t want to sound like a curmudgeon, but I have the distinct feeling that fewer developers have a solid understanding of the technologies they are using than in the past.
The final issue is the one that bothers me the most, piracy. Writing deeply technical books is hugely time consuming and I know that it’s crazy talk, but content producers deserve to be compensated for their time if they so choose. For some reason, the bank that holds the loan to my house doesn’t accept the argument that since I’m not being paid for some of my work because of piracy, they should let me slide on some of my payments. I was sad to see Jeff Atwood stoop to piracy. I don’t buy his argument of “What’s a poor, law-abiding citizen of the United States of America to do?” because a particular TV show was not available. If I understood my elementary school civics classes, a law-abiding citizen does not violate the law. I certainly don’t agree with a lot of the copyright law and think some of the infinite extensions some companies are pushing for are absolutely ridiculous. However, if a lawyer catches you pirating something, that’s the same as a state trooper catching you for speeding on the highway. If you don’t like the copyright laws, work to get politicians elected that will change them in your favor. Not liking a law does not give you the unalienable right to violate it without consequences.
I’m proud to say I have purchased every single piece of software and music on any of the computers in my house. It would have been far cheaper to get everything through Bit Torrent, but that was not the correct and moral action. Sadly, I think I’m one of the few left.
The piracy of my books is quite stunning. I haven’t released an electronic version of the last two books because of it. Frustratingly, that hasn’t stopped the pirates. Someone took my second book, scanned in all 850 pages and went to all the trouble of recreating all the screen shots in color! I guess someone’s time is free. Mine is not.
Because of fewer developers buying deep technical books, and many people feeling that pirating my books is perfectly legitimate, I’ve come to the conclusion that writing a native C++ debugging book, or any other book, really isn’t in my best interest. I’ll focus my efforts on the Mastering Windows Debugging and Mastering .NET Debugging classes to help Wintellect grow and pay my mortgage. If our onsite classes are too expensive, we do offer those classes in a virtual format. We also have our excellent Devscovery conference where you can learn tons about all the technologies in the Microsoft .NET space. I’m terribly sorry for those of you who may not be able to afford one of our classes or conferences, and would have bought a book instead. While many like to argue that draconian copyright laws stifle innovation, rampant piracy means that content providers have to find other means to make a living. I’m doing just that.