Path: utzoo!utgpu!water!watmath!clyde!att!osu-cis!tut.cis.ohio-state.edu!mailrus!ames!ucsd!ucsdhub!hp-sdd!nick
From: nick@hp-sdd.HP.COM (Nick Flor)
Newsgroups: comp.software-eng
Subject: Re: Basics of Program Design
Message-ID: <1326@hp-sdd.HP.COM>
Date: 4 Jul 88 05:46:58 GMT
References: <900@td2cad.intel.com>
Reply-To: nick@hp-sdd.UUCP (Nick Flor)
Distribution: na
Organization: Hewlett Packard, San Diego
Lines: 58

In article <900@td2cad.intel.com> brister@td3cad.UUCP (James Brister) writes:
>
>For the past few years my professors have rambled on about data
>structures, compiler design and more, ad nauseam. But none of them
>have ever mentioned the best way, (or any way really) to go about
>sitting down and actually writing a program.
>
>What I mean is: do experienced programmers usually write flow charts,
>or pseudo code. Do they write the whole program out by hand first or
>build it up in their favorite editor?

Yikes.  It is kind of scary reading some of the responses to your posting James.
Seems like there are a lot of programmers employing ad hoc methods in the
development of their software.  Reminds me of a story Professor W. Howden
told us about a conference he attended where a speaker said something like
"Newton said 'if I have seen farther, it is only because I've stood on
the shoulders of giants'.  The problem with programming is that everyone's
stepping on each others toes'".

But I digress.  Anyways, let me see if I can shed some light on the topic:

To understand what tools are needed to develop a program, one first needs
to understand the techniques humans use to solve complex problems.
For things that are too complex, humans use two main techniques:

1) Abstraction
2) Decomposition

When developing a large program whose entirety you cannot fathom off the top
of your head, the best thing to do is to decompose it into a bunch of
more manageable abstract entities.  After more thinking, you can then
decompose these abstract items even further, until you have a concrete
realization of the solution, ie. code.

Programs consist of a variety of functions working on a variety of data.
Most languages support functional abstraction, but not data abstraction.
This is why you cannot just sit down and start programming for languages
like 'C' and Pascal.

Good tools for software development are those that support both functional
and data abstraction in addition to provisions for decomposition of
both functions and data.

The most common tools used today for software engineering are
dataflow diagrams & structure charts.  But by no means are they
the best.

Anyways, I could go on and on and on.  Your best bet is to read a
book on software engineering.  

Hope this helps.. and let's have more discussion on this subject.

Nick
-- 
+ Disclaimer: The above opinions are my own, not necessarily my employer's.   +
+ Oh, sure. Sure. I'm going. But I got  | Nick V. Flor           * * o * *    +
+ your number, see? And one of these    | Hewlett Packard SDD   * * /I\ * *   +
+ days, the joke's gonna be on you.     | ..hplabs!hp-sdd!nick  * * / \ * *   +