I've been thinking about writing a book. It won't be a popular success -- trust me -- but that raises the question of how I should publish it.
I've never written a book, although I've written a lot of papers and edited a couple of conference proceedings and other collections: writing is one of the things academics do for a living. But I've been thinking for a while about writing a book on how to build a programming language. This isn't something that JK Rowling (my neighbour in Morningside) needs to worry will eat into her royalties, obviously, but it's something that'd be of interest to a certain group of people. I've been teaching programming, compilers, language principles and the like for several years, and have sometimes shown classes how to build interpreters and compilers from the ground up. I'd like to share this with a wider audience, and show how the tools and techniques of languages can be used to make a whole class of problems easier and more fun to solve. There's something very liberating and exciting (to me, anyway) about understanding the tools of programming in their most raw, and of being able to change them to suit particular circumstances. It also brings a new perspective to things one might encounter in particular languages, that can encourage experimentation and invention and the re-purposing of tools to new domains.
It's not the writing that's the problem: the problem is the publishing. Clearly, no matter how excited I get about these things, it's going to be a pretty minority interest: not even most computer scientists write compilers. So it's hardly going to be a best-seller. But that then raises an interesting question. Traditional book publishing is about getting visibility and distribution for your work, with a view to maximising circulation, impact and royalties. If there's no money to be had, and the target audience is by definition computer- and internet-aware, are there better ways of getting the same (or better) visibility, distribution and impact, and reaching the audience more effectively than one can by traditional means?
What, in the 21st century, is the most effective way to publish an unpopular book?
In one way the internet answers this question in an obvious way: put a file on a web server. But that still leaves the visibility and impact parts to be solved -- and there are half-a-dozen ways to make the text available on a web server, too. We can split the problem between these two parts, though: how to write and represent the text, and how to let people know it's there.
Distribution and formatWeb site. A lot of books have associated web sites, for errata and additional material, sometimes freely available and sometimes behind a paywall. Clearly one could put a whole book up on a site, as well as any associated software, with a suitable licence to allow for downloading and whatever copying seems permissible. I use this approach for this site: all the content is under a Creative Commons licence that allows non-commercial sharing with attribution, and allows re-mixing as long as the derived work is also shared under the same or similar terms.
Most web sites require that you be on-line to read them, although that's not necessarily the case for systems like TiddlyWiki that download in one file. And one can get all the benefits of non-linear browsing and re-purposing by using proper hypertext as opposed to PDF.
E-book. E-books have a lot to recommend them, especially their portability and download-ability. PDF is a popular format, but EPUB is probably a better choice: you get reflowing, hyperlinking and portability to small devices with no effort, in a way that's hard for a PDF.
Of course these formats aren't mutually exclusive, and one could easily come up with a writing system that can generate PDF, EPUB and indeed HTML from the same sources.
Blog. The above are still fairly traditional approaches, varying in terms of delivery medium. What about blogging a book, allowing it to evolve over time?
I can think of one immediate disadvantage, which would be the danger of a lack of flow and a disjointedness that comes from not wrapping-up a work as a single entity. But of course there are some significant advantages: there's no reason one couldn't write large chunks of text and them blog them over time, and refine the text using comments before generating an e-book or re-linking into a more conventional web site.
Wiki/group blog. If we accept the no money/lots of copying philosophy, then perhaps there's no reason to be precious about authorship either. A group blog or a wiki that encourages participation and updating might make sense: a sort of Wikipedia for programming languages, in which chapters can be commented on and edited by a community (if one forms). This might generate a work that's more complete than one I could wrote myself, if one got contributions from the appropriate, knowledgeable people. It could also degenerate into a farce without clear editing guidelines and proper curation: essentially the problems of a normal blog, writ large.
Wikis, and especially Wikipedia, often get trashed by academics. This isn't an opinion I completely share. At their best, wikis harness the best people with an interest in a subject. Their content needs protection from the stupid, vain, deluded, vicious and malicious, but none of that outweighs the benefits of having potentially every expert in the world contributing. A traditional encyclopaedia is not necessarily more reliable -- look up "anthropology" in an early Encyclopaedia Britannica to see how fallible expert opinion is to modern eyes -- and with care there's no reason why a wiki need be less exacting than a more traditional medium. (Encyclopaediae aren't a good way to learn a subject, for which you really need a structured and knowledgeable guide -- but that's another story.)
Visibility subsumes impact, in a sense: if something is very visible and easily-found, then it's popularity is a direct measure of its significance in its community of interest. And if something is highly visible and still unpopular: well, that's just something to live with. We can split visibility between pull and push: people finding what they're looking for versus being told that there's something they might be interested in.
SEO. Search engine optimisation has evolved from being a valuable skill, through a commodity, to an arms race in which sites try to get search engines to notice them and search engines try not to be manipulated away from whatever they regard as their core metric for importance. (PageRank in the case of Google.) Most content managers have SEO packages built-in or available that can help.
Blogs. There are a number of great programming language blogs out there, through which one could solicit help and readers. If the internet does anything, it's demonstrate that any small community or interest is globally large -- or at least large enough to keep most people happy. Even language hackers.
Software. For a book about writing languages, I suspect the most effective advertisement is the software that one can develop with the techniques described, or the tools one could use to follow them. The sincerest recommendation is for the software to be used, found useful, and improved by someone else, who's then willing to share their experiences back with the net.
Having written all of the above, I'm still not sure where it leaves me. I'd welcome any comments or descriptions of experiences before I start putting hand to keyboard in the wrong way. Who'd have thought it's be so complicated? -- although I must say that having these sorts of choices is in itself a major draw, and a great indication of how the web's changing the world.