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 * * / \ * * +