20080417

The Document is the Program (转寄)

发信人: Quixon (Now or Never), 信区: Linux
标 题: The Document is the Program
发信站: BBS 水木清华站 (Sat Jan 1 22:04:02 2000)

这是我在www.freshmeat.net上看到的一篇文章, 很有道理.

Over the years, desktop computer users have thrown up a number of
straw men to explain why they can't use Free operating systems. The
community has shot them down one by one, from "It doesn't support
my hardware" to "There's no business software available", but there's
still one complaint that too often goes unanswered: "I can't make heads
or tails of this manual!" In today's editorial, Hairy Larry discusses the
need for documentation and the three types of documents he thinks are
essential to any program.


Copyright notice: All reader-written material on freshmeat is the property and responsibility of
its author; for reprint rights, please contact the author directly.


Just how important is documentation to the success of your program?
Without a doubt, the documents are the most important pieces of your
code.

Specifications Documents

Before you write a line of code, you should have at least a preliminary
version of your specifications document. This does not mean that you
shouldn't write toy programs as feasibility studies. (It's nice to know
that something is possible before you commit to a lot of work.) It does
mean that before you start on your .001 Alpha version, you should have
a pretty good idea of where you are going.

And here's the reason why: Algorithms + Data Structures = Programs.
Or, as I have heard it said, the database is the program. I really don't
know of any substantial programming project that doesn't rely on data.

Getting your data structure right is hard. Mistakes in your data
structure lead to massive rewrites. You have to put a lot of thought into
how your database will work and how your code can access it. How can
you even think about this until you have a pretty good idea about where
you are going?

Of course your specifications document will change. It's a good idea to
add version control to your specs from the outset. I'm sure you plan on
enhancing your program by adding new features and bringing out new
versions. These features will have to be specified, so track the changes
in your specs just like you track the changes in your code.

Programmer Documents

I learned that even on projects on which I was the only programmer, I
would often come back a month later (or the next day) and wonder
"Just what was I doing there?" Now I'm assuming that if you are
working on an open source project you are hoping that other
programmers might get involved. How can you possibly expect them to
figure out "What is he doing there?"

Each piece of source code should be documented at the top. Describe
its overall function, what modules call it, and what modules it calls. I
find it helpful to write this before I start coding to focus my attention on
the problem at hand. In the source, each block of code should be
documented with inline comments. What does this variable do? What
algorithm am I using here? Why does this piece of code even exist?
These questions and more should all be answered by inline comments.

You also need a single large document for the entire project. This
document should describe the data structure and the overall structure of
the program. Each module and its function should be included. You
also need a list of all the documents for the project. Include a way to get
in touch with you. Just because you understand what you are trying to
say doesn't mean that the programmers reading the document will.
Make it easy for them to ask questions and include your clarifications in
the document.

By providing good programmer documents, you make it possible (not
easy, just possible) for other programmers to come on board and help
you with your project.

End User Document

The end user document (AKA the Manual) is the most important
single piece of your entire project. It's more important than the data
structure. It's more important than the code. It's more important than
the documents described above. It is also, unfortunately, the most
neglected.

Write your manual in plain, simple English. (French, German,
Japanese, etc.) Use no jargon. Assume nothing. Describe the purpose
of the program. List the major areas of functionality. Include
step-by-step instructions on how to get from point A to point B.

How can you possibly expect the user without a manual to know that
he has to click on the frammistran before going to the screen where he
enters the stuff describing the fujitron? It may be obvious to you, but
it's certainly not obvious to me.

I know most users won't read the manual. Instead of shouting "RTFM,
RTFM", include context-sensitive help. Online help is the other side of
the end user documents. Let your user hit the F1 key and view the
portion of the manual appropriate to the task at hand. This is certainly
easier than digging out a book or searching through a text file.

Quality end user documentation requires both a single large manual
with all the documentation that a user can read or refer to and
context-sensitive help at the touch of the finger when he needs it.

Closing

When a student in the Department of Math and Physics, I remember
well the gearheads sneering at the English Majors who were having so
much trouble with their required math courses. At the same time, there
were no required writing courses for the Computer Science degree
beyond Freshman English.

After I graduated, I realized that the most important skill leading to
advancement was not the ability to do calculus. It was not being able to
churn out tons of hot shot code. It was not the ability to design elegant
data schema.

The most important skill is the ability to write well and communicate. It
doesn't matter how good you are and how hard you work. If you can't
communicate what you are doing and why you are doing it, you will be
passed over for advancement. The reason for this is simple. The
managers making the promotion decisions are not computer scientists;
they are managers. They can't read code. They read English. If you
can't write English, you just remain a cog in the machine.

Applying this to the world of open source software, it doesn't matter
how good your code is. Most of your users will never read your code.
They will read your documents. If your documents are well written, the
users will find it easy to run your program. If not (or worse, if there's no
documentation at all), potential users will hit a stumbling block and
falter. They will then decide that the program is hard to use and look for
another one. After all, they haven't made a major financial investment,
so it's easy for them to walk away and try something else.

--
※ 来源:・BBS 水木清华站 smth.org・[FROM: 166.111.161.104]