For a very long time, I have been tempted to write a book, save it for the fact that books don’t sell and nobody is going to read it anyway. However, I’m thinking that if I write, say, one page a day, I might actually get somewhere within the course of a year or two. It requires amazing discipline, of course, but maybe I can muster some – after all, I have several journals (Moleskine and Epica) that I have been writing in for about 5 years, every day, without fail. So persistence is not something I’m lacking.
What I’m lacking is something else – a good idea for a book. After all, there are already plenty of books on programming languages (e.g., C#, F#, C++) and technologies. What can I write that could be useful and people would read? Just off the top of my head, here are some ideas:
Write about a language for which no book exists, such as Nemerle or Io. Alternatively, I could write something on mixing and matching languages in the .NET stack. The trouble is, this requires a lot of experience with different languages.
Write about an unreleased or up-and-coming product such as Azure or Visual Studio 2010.
Write about DSLs. There aren’t that many books on DSLs, and I’m sure that many people are wondering why there’s been so much talk of DSLs lately, and many are interested how and where to use them. The most intriguing option is to use JetBrains MPS, which looks to be a complicated and powerful DSL technology (too bad it’s Java-driven).
Write a methodological book on something like AOP or metaprogramming that people kind of like but aren’t sure about.
Write about some tech that’s a bit far out than people are used to. For example, there is a book on DocBook and, let’s face it, not many people (even experienced developers) know what DocBook is, and there’s probably an even smaller number of people using it.
Write an algorithms book. This is a good idea because, apart from going over implementation of various algorithms (e.g., correlation calculation or A*) it’s also possible to cover various programming languages and contrast, e.g., imperative vs. functional approaches. Unfortunately it also requires explaining about the basics of numeric computation, e.g. what double.Epsilon means.
Write a statistics book. After all, collective intelligence of the type used on social networking websites is the kind of material that’s subject to statistics, so it could be a good topic.
Unmanaged parallelization. This is a subject of interest for me primarily because I want to write algorithms that scale, and the whole TaskManager related .NET 4.0 business consistently fails to impress me.
At the moment, I’m not prepared to start writing anything major. I prefer to sit on the ideas and write a few articles to explore the field and try to determine what people really want to read about. And who knows—I might find something that’s worth a long-term effort.