In <[EMAIL PROTECTED]>, [EMAIL PROTECTED] (Aaron Sherman) wrote:
>This bit of POD made me think about POD's lack of tabular formatting, a
>common idiom in technical documentation. I know POD is still in the
>wings, as it were, but I wanted to say this before I forget....
/me flings coffee cup against the wall [no, not Larry!].
Perl is getting a major overhaul. POD is... well... now we have
=COMMENT.
If anything drastic is happening to POD, I've missed it, but if Perl can
be made over, why not POD? Or rather, why not the concepts and attitudes
pertaining to documentation in general, and documenting Perl code in
particular? (Yes, one of the nifty things about POD is its simplicity,
so maybe it should be left alone -- and something new added to the mix;
after all, There Is More Than One Way To Document It.) Adding extra
=head levels and =tables (and rudimentary support for tables sounds like
a good idea to me) is evolutionary; all well and good, but surely there
are some grand revolutions waiting to be instigated.
One of the selling features (or one of the features that is always sold)
of POD is that you can mix it with your code. Except nobody does, at
least I can't recall that last time I saw a module that did that, and I
don't think I've ever really done that myself. The POD usually sits in
a lump at the end of the file.
Having the documentation next to the code it describes means when you
change your function, you can't as easily forget to update the docs, the
way you would with a separate file. It's a terrific idea, but the user
docs you typically get with a module don't necessarily match your
functions that closely, or in the same order. I suppose one idea was
that programmers' docs (like Input, Process, Output) would go in POD so
that you when you printed out your code, you got something nice to look
at instead of lots of lines of #blahblah. Except I never print out my
code, not nowadays, not very often. So it's easier (both reading and
writing) to just put a bunch of #comments in the code itself.
OK, there's one non-incremental idea: documentation that you can write
in one place and display in some completely different order. (Shades of
literate programming!) And although there are good reasons for keeping
the docs in the same file as the code, there are equal but opposite
reasons to keep it separate (if it's all piled up at the end of the file
anyway). What gets presented to the user as "one page" could be bits
and pieces from all over the place.
Another problem with plain old-fashioned documentation -- and no small
influence on programmers' dislike of such, I wager -- is that you're
always duplicating work: first you have to explain to the computer how
to do something, then you have to explain it again to the user. Not
conducive to laziness, impatience, and hubris. I don't know how much
can be done about this, because computers and humans think in such
different ways, but I have in mind things like Getopt::Declare. (Stuff
like Pod::Usage probably fits in here somewhere, too.)
Having a nice, compact way to declare sub signatures is good. Being
able to document those signatures, not just "nearby", but
*simultaneously*, would be great. It saves a bit on typing (probably),
a LOT on procrastination (probably -- I think the psychological aspects
cannot be emphasised too much in the conventional wisdom that
programmers are reluctant to document their work), and the impossibility
of the docs getting out of sync with the code is priceless.
Well, easier said than done. In the end, the answer might have to be
"Yeah, there are lots of brilliant things that *could* be done, but P6
and Parrot already take up so much effort that it ain't gonna happen --
unless you actually contribute something yourself, in which case Show Us
the Code, mister!" But hey, rousing a bit of rabble is easy, and
there's always the possibility that someone really clever will come up
with an idea that is brilliant *and* feasible.
- David "what's up, docs" Green