David Megginson writes:
>  > I am willing to accept a little lag but one can of course take the 
>  > 'exteme-programming' approach of writing the documentation 
>  > first before you code :-)
> 
> Actually, they write the unit tests before they code.  Kent Beck, at
> least, doesn't seem to be a big fan of detailed documentation.

This could take us down the road towards a discussion of underlying
philosophies of software engineering.  I took my software engineering
class back in the late 80's when everyone was young and idealistic and
before open-source really took off.

I was always taught: 1) Make a requirements specification 2) Make a
perfect and complete design (implies documentation could or should be
written at this point), 3) Impliment, 4) Test.  When you finish one of
these steps, you move forward and never go back (too costly and
time-consuming to back track and redo.)

If things went astray in this process, then obviously you didn't do 1)
or 2) correctly.  Either you are a screw up or you need a better
design methology to follow.  Obviously no one wants to be a screw up
so we need to think up better methodologies to follow to help us do a
perfect requirements spec and design up front.  I was taught several
goofy methologies that I have always ignored because they seemed
exceedingly lame. :-)

The underlying fear is that the later a bug or insufficiency is
discovered in the process, the more costly it is to fix.  That is
still true, but ...

It's really really hard to do a perfect design up front that
encompases every future whim of your customer.  In fact, beyond
trivial class room examples and maybe a few rare cases when all the
planets line up, I'd argue that it is impossible to do a perfect
requirements spec and perfect design before any coding happens.

My inside sources tell me that these days people in software
engineering classes are thinking about a "spiral" approach.  You still
have the same basic steps of doing a requirements spec, design,
impliment, test.  But you permit yourself to iterate through the steps
and refine them as many times as it takes ... spiraling slowly towards
the finished product.

The assumption here is that we probably have to give up on the idea of
doing a perfect design up front ... that has similar difficulties and
challenges to predicting the future.  There are some things we can
predict pretty reliably (ie. the sunrise) but usually the things we
want/need to predict are a lot more complex than that.  Instead you do
the best you can at each stage understanding that you will undoubtedly
return to rework or refine the requirements spec and design and
implimentation ... probably many times.

To me this sounds a lot like what people often fall into naturally
with open-source software development projects.

Of course, what I was taught isn't complete bunk; the better job you
do at each stage (even if you plan to return and refine later) the
more quickly you arrive at a correct and finished product.

Regards,

Curt.
-- 
Curtis Olson   IVLab / HumanFIRST Program       FlightGear Project
Twin Cities    [EMAIL PROTECTED]                  [EMAIL PROTECTED]
Minnesota      http://www.menet.umn.edu/~curt   http://www.flightgear.org

_______________________________________________
Flightgear-devel mailing list
[EMAIL PROTECTED]
http://mail.flightgear.org/mailman/listinfo/flightgear-devel

Reply via email to