This post originated from an RSS feed registered with Agile Buzz
by Martin Fowler.
Original Post: DslBookRoadmap
Feed Title: Martin Fowler's Bliki
Feed URL: http://martinfowler.com/feed.atom
Feed Description: A cross between a blog and wiki of my partly-formed ideas on software development
I've hit a significant, if purely internal, milestone in the DSL
book recently. I also find that people regularly ask me what the
status is of the book is. So it seems like a good moment to post a
note about where I am with the book and where I see things going.
The most common question I get is "when will the book be out?"
The way things look at the moment, I'd estimate it appearing some
time in 2010. That's an estimate, with all the usual hedges that
apply to such things.
To help see how the current state meshes in with that estimate,
I'll describe the general progress of how books work, at least for
me. The first phase is writing the First Review Draft. This means
writing all the material in the book, to the level that I can submit
it to peer review. For my larger books (eg Refactoring, P of EAA)
this takes about 12-18 months. This book is taking longer, I've
already been at it for nearly two years, and I suspect there's
another year to go. Once I have the First Review Draft, it goes out to
review. This takes time for people to read it, get their comments to
me, and for me to modify the text based on the review. I usually do
two rounds of review - and it takes around 6 months for that to
happen. Once I'm done with formal review the book is a Final
Draft. At this point it goes off for production - which
includes copy-edit, indexing, layout, printing, etc. That takes
another 6 months. So I estimate that the book will appear about a
year after I get a First Review Draft.
Not all authors work this way, some write a few chapters and sent
them for review while they write a few more chapters. I use the
approach I do because it was how I did my first book and it seemed
to work very well.
To describe the current state of the book, I need to talk a bit
about its structure. The final structure of the book will be a
DuplexBook, but while I'm working on it I tend to think
of it in terms of a set of subject areas, where each subject area
will end up as a set of narratives and topics within the duplex
structure.
My recent milestone was completing my first coherent pass at the
internal DSL subject area. By this I mean I now have what I think
is a coherent draft of the that subject area. It will still need
more work before I get to the First Review Draft, but reaching
a coherent draft is a big point for me because it means I have reached a
point where it's looking in good shape. Here's my current list of
subject areas and their status:
Introduction: coherent (this is the first three
narratives: An
Introductory Example, Using Domain Specific Languages, and
Implementing DSLs).
External DSLs: incoherent
Internal DSLs: coherent
Code Generation: coherent, but with some important bits missing
Alternative Computational Models: incoherent
Error Diagnostics: open.
Language Workbenches: open.
I've been working since March on getting the internal DSL section
into a coherent state. I suspect it will take me a similar amount of
time to get external DSLs into coherence, and a similar time again
to get alternative computational models into coherence. This is why I
think I'm at least a year off First Review Draft. These are also the
next two subject areas that I'm going to work on, in that order.
As well as those two subject areas to make coherent, I also have
some holes to fill and a couple of elephants to deal with. The holes
are topics within subject areas that aren't really complete yet,
although the overall structure is reasonable. Code generation is a
good example of that. I'm pretty happy with what I have, and it is
coherent. But I need to address at least one topic (the Generation
Gap pattern) before I can really say that subject area is done. These
holes don't take a huge amount of time to fill and I tend to work on
them as the mood takes me - often I like to take a break in the
middle of a major topic for something like this.
The two elephants are the open topics of error diagnostics and
language workbenches. These are elephants because I don't know how
I'm going to tackle them, or indeed if I'm going to put much effort
into tackling them. It may be that I'll do little more than a skimpy
overview chapter, or I may spend six months each on them. I'm
deliberately putting off those decisions while I work on the next
two subject areas.
Of course this road-map could all change. One of the reasons I
don't like doing incremental review (eg sending off the internal DSL
section for a formal review now) is that working on one section can cause
me to completely rethink another. This has already happened. I did a
substantial chunk of work on the internal DSL section late in 2007
and then worked for a while on what is now the Computational Network
and Dependency Network patterns at the end of 2007. Working on those
patterns made me realize my internal DSL thinking was all wrong and
I thus needed to rewrite that whole section. This kind of thing is
common with a topic area like this where there is no pre-existing
structure. (This is different to a book on an existing technology,
eg UML Distilled, where the thing I'm describing already has an
understood structure before I start.)
Having said that, if you're interested in what I'm doing I think
I'm at the point where you can take a good look at the introductory
and internal DSL sections and it should make sense. I'd certainly be
happy for feedback on those sections. Just beware that there are
cross links between those and other sections that may still get
worked on.
I'll update this page when I hit a major milestone or major
re-plan. If you want more granular updates I have a more detailed
feed. If you want to send me comments on work so far, please do
so. I have a mailing list for the book, I'd prefer all comments to
go to that mailing list so that there's an opportunity for
discussion. So if you do send me comments, please let me know if
you're happy with them going on the list or not and whether you wish
to join the list.