[net.lang.c] Comments on book review

peters@cubsvax.UUCP (04/27/84)

Below are excerpts from fortune!crane's review of a new book on C programming.
I haven't seen the book, but the author's basic idea of how to program, which
crane shares, is the common textbook version that comes with the idea
of structured programming.  I've reproduced crane's comments below.

Now, my question is, does anyone really program this way?  I really want to
know!  I certainly *mostly* do what the author (see below) calls BUGGING.  When
I try to think everything out ahead of time, I find that before I get very far
I start being uncertain what the compiler, programming tools, etc., are
really going to do with the overall method I have in mind, and so I go in
and try it on elementary examples.  Then I end up extending these elementary
examples over and over, and combining them with other extended elementary 
examples, to make a program or package.  Then I clean it up at the end.  The
point is, it's an *iterative* process, not one in which I first plan, then
implement.

I'm sure that part of the reason I work this way is that I'm still not
completely comfortable with C and UNIX, but I tended to work this way even
in languages in which I felt very much at home.

{philabs,cmcl2!rocky2}!cubsvax!peters            Dr. Peter S. Shenkin 
Dept of Biol. Sci.;  Columbia Univ.;  New York, N. Y.  10027;  212-280-5517

>> From philabs!cmcl2!floyd!harpo!ihnp4!fortune!crane Wed Dec 31 19:00:00 1969
>> 
>> This is a review of the book "C Programmer's Library" by Jack J.  Pudrum
>> (author of "C Programming Guide"), Timothy C.  Leslie (Dir.  SWD @
>> Ecosoft), and Alan L.  Stegemoller (coauthor of Ecosoft's Eco-C C
>> compiler), published by Que Corporation, Indianapolis, 1984.
>> 
>> 0. Laying the Groundwork
>> 
>>         This chapter introduces the philosophy of the book and presents a
>>         methodology for developing generalized C functions.
>> 
>>*         This chapter comes down heavy on people who, having been given the
>>*         basic requirements for a program, immediately rush off to their
>>*         terminals and start entering source code.  The authors say: "These
>>*         students are not programming; they are BUGGING.  They will spend
>>*         ten minutes bugging and another DEBUGGING (that is, correcting) the
>>*         mess they will make in the first ten minutes." What you should do,
>>*         they say, is to spend 10-15 minutes anayyzing the problem (the
>>*         problem, by the way, is to write a program to sort 100 ZIP codes),
>>* 	then spend another 15 minutes coding and testing the program."
>>* 
>>* 	(I agree with the above.  I am not totally familiar with the term
>>         "hacking", but to me hacking is analogous with "bugging".  Somebody
>> 	correct me if I'm wrong.  In my opinion, both are to be avoided in
>> 	favor of a planned, deliberate approach to solving a problem.)
>> 

dgary@ecsvax.UUCP (05/01/84)

   The referenced article refers to the textbook approach to programming, i.e.
design, program, debug.  The book in question even suggests that failing to
plan the program out carefully before writing is dangerous and bug-prone.  The
author of the article asks if anyone actually programs that way, and what people
think of that approach.
   Well, I for one subscribe to the notion of "stepwise refinement" or
(more poetically) "creeping elegance."  The idea is to write a program that
(1) is small (2) does at least some of what you want the final program to
do, or shoots in that direction (3) works and (4) is easy to modify.
   This makes it possible to program almost bug-free, and to catch bugs almost
as soon as they occur (so you don't have to go on a bug-hunt later on).  The
idea is to keep adding to the program until you get what you want (or maybe
something better).  A big plus to this approach is that the program remains
modifiable - one of the reasons for the high cost of software maintenance
(I suspect) is the tacit assumption that the program will never have to be
changed.  If you know for a fact from the word go that mods are coming, you'll
write a better program most of the time.  And certainly one that is easier to
fix and improve.
   So no, I don't believe in plan-code-test.  I believe in plan a little, code
a little, test a little, plan a little, code a little, test a little....
   Long live Yourdon!

   Best,  D Gary Grady, Duke University
   {decvax or whatever}!mcnc!ecsvax!dgary

chenr@tilt.UUCP (Raymond Chen) (05/02/84)

>>   The referenced article refers to the textbook approach to programming, i.e.
>>design, program, debug.  The book in question even suggests that failing to
>>plan the program out carefully before writing is dangerous and bug-prone.  The
>>author of the article asks if anyone actually programs that way, and what 
>>people think of that approach.
>>   Well, I for one subscribe to the notion of "stepwise refinement" or
>>(more poetically) "creeping elegance."  The idea is to write a program that
>>(1) is small (2) does at least some of what you want the final program to
>>do, or shoots in that direction (3) works and (4) is easy to modify.
>>   This makes it possible to program almost bug-free, and to catch bugs almost
>>as soon as they occur (so you don't have to go on a bug-hunt later on).  The
>>idea is to keep adding to the program until you get what you want (or maybe
>>something better).  A big plus to this approach is that the program remains
>>modifiable - one of the reasons for the high cost of software maintenance
>>(I suspect) is the tacit assumption that the program will never have to be
>>changed.  If you know for a fact from the word go that mods are coming, you'll
>>write a better program most of the time.  And certainly one that is easier to
>>fix and improve.
>>   So no, I don't believe in plan-code-test.  I believe in plan a little, code
>>a little, test a little, plan a little, code a little, test a little....
>>   Long live Yourdon!
>>
>>   Best,  D Gary Grady, Duke University
>>   {decvax or whatever}!mcnc!ecsvax!dgary

Fine.  Incremental programming can be a wonderful thing.  I think, though,
that you're missing the point of the book and that is that you don't start
putting code into your computer until you know *exactly* what that code
is going to do.  After all, the idea behind programming incrementally is
to do it in small steps so you can make sure that each step works.  What
that book was coming down on was what a lot of people tend to do and that
is to sit down at a terminal with the specifications/goals and start
typing a program without taking some time to make sure that what they're
going to do will work, or even to make sure that they understand in toto,
what the program is supposed to *do*.  No matter how you write the system,
the idea should be to avoid design/logic errors, and in most cases, make
it extendable and maintainable.

-- 

The preceding message was brought to you by --

		Ray Chen
		princeton!tilt!chenr

mark@umcp-cs.UUCP (05/03/84)

>   Well, I for one subscribe to the notion of "stepwise refinement" or
> (more poetically) "creeping elegance."  The idea is to write a program that
> (1) is small (2) does at least some of what you want the final program to
> do, or shoots in that direction (3) works and (4) is easy to modify.

That is a wonderful way to program, and I am an advocate of it myself.
However, it has an actual name in the computer science literature and it is NOT
"stepwise refinement", which means something totally different.  You
are describing "iterative enhancement". [Basili and Turner.  "Iterative
Enhancement: a practical technique for software development".  IEEE
Transactions on Software Engineering.  December 1975].

Stepwise refinement is Edgar Dijkstra's programming method, in
which each refinement is a "pearl", and all the pearls together
form a beautiful string of beads which (a) prove the program
correct (b) explain why each refinement was made.  The idea
is to start with a program which is provably correct but inefficient
(or not yet in an actual programming language) and refine it into
final form, preserving correctness along the way.  (And when
Edgar says correctness, he means CORRECTNESS).

For what its worth, I think stepwise refinement is only for
programs that can fit in a couple of textbook pages, and iterative
enhancement is for anything bigger.
.
-- 
Spoken: Mark Weiser 	ARPA:	mark@maryland
CSNet:	mark@umcp-cs 	UUCP:	{seismo,allegra}!umcp-cs!mark

mark@elsie.UUCP (05/04/84)

<>
The most complicated program I ever wrote was conceived just before I went on
a two week vacation to the north coast of Maine. The nearest terminal was
100 miles away (that I knew of). For two weeks I carefully planned the
program and wrote out the code long hand. Raising before dawn, before wife and
child, hacking, hacking hacking (no, I'm not divorced, at least not yet).
Carefully, I packed pages and pages into by suitcase and could hardly wait
till I got home. My daughter's teddy bear is still in the cabin -- a victim
of scientia.

I may have gotten as far as "main(argc,argv)" before I realized it wouldn't
work. And the final product looks nothing like what I planned in the wilds
of Maine.

It was actually a good experience, and not all wasted time. There is such a
thing as over planning. Now I sit down and work out a general plan for the
program; make sure I have math right; have an idea of what my input should
be and my output should look like; use LOTS of subroutines and VERY FEW
globals; and proceed, more or less, by the interitive programming technique.

Of course, not all my programming is like this and different people have
different techniques. How you proceed also depends on how well you know the
language and how good your memory is (mine's bad). There probably is no such
thing as the best programming technique, just the best for you personally.

-- 
Mark J. Miller
NIH/NCI/DCE/LEC
UUCP:	decvax!harpo!seismo!rlgvax!cvl!elsie!mark
Phone:	(301) 496-5688

henry@utzoo.UUCP (Henry Spencer) (05/06/84)

John Crane comments:

   If you built a house the way some of you seem to think you should build
   a program, we'd be in trouble. The software sevelopment cycle is more
   that just a textbook approach. It is a reality in the commercial world
   of industrial-strength business software.

The contention that the software development cycle is more than just
a textbook approach is half true, but only half.  If one defines "textbook
approach" as "a long and convoluted procedure that is unnecessarily
complex for any real purpose", then clearly the s.d.c. is more than
this.  Advance planning is a real necessity.

Unfortunately, the s.d.c. is a "textbook approach" in another, related
but not identical, sense:  "something that sounds good in the textbook
but ignores important real-world complications".  Specifically, John
says:

   You gotta plan ahead. If not how do you know what you are going to
   build and how will you know when you've built it?

What we're going to build is "something that satisfies the customers".
We know we've built it when the customers are happy.  Since the customers
*INVARIABLY* cannot specify exactly what they want in advance, the idea
of "plan first, then implement" is preposterous.  An iterative approach
is inevitable and necessary.  Places that claim to follow the s.d.c. but
still produce quality software are always REALLY following an iterative
approach, even if they don't admit it or recognize it.

The classic symptom of rigid adherence to the s.d.c. is that the first
release of the new software package is a piece of garbage, the second
release is starting to be useful, and by the third or fourth release
the thing is actually fit for humans.  Note that what we have here is
the iterative approach in disguise, usually at far greater expense (to
both the suppliers and the customers) than if it had been done explicitly.
The prevalence of this approach within the industry is clearly indicated
by the intense reluctance of many organizations to be the first customers
for a new product.

Note that when I say "the customers *INVARIABLY* cannot specify exactly
what they want in advance", I don't mean that they have absolutely no
idea what they want.  They generally do have a rough idea, and some
advance planning based on this is wise.  But even if they are willing
to write exact specs for everything in advance, using the system will
change their perceptions of how they want the details to work.  In the
prevailing s.d.c. approach, the result is major rework jobs before
subsequent releases, rendering obsolete much of the detailed advance
planning done during the "development" phase.

This is not to say that advance planning is futile for major software
packages.  On the contrary, it remains very important.  But the pretense
that every detail can be spec'ed in advance is silly.  Advance planning
time is best spent identifying issues, gathering data, running experiments
with real users, exploring general approaches, and generally doing things
that will be valuable regardless of how the final details come out.  There
is nothing wrong with trying to draw up a detailed spec in advance -- it
can be a very useful way to explore the problem -- provided you recognize
that it's unlikely to bear much relation to the final result.

I can hear the system-development-cycle folks lighting their afterburners
now.  Just remember, folks:  you, too, use the iterative approach.  Your
users know that, even if you don't.  And they wish you'd admit it.
-- 
				Henry Spencer @ U of Toronto Zoology
				{allegra,ihnp4,linus,decvax}!utzoo!henry

rcd@opus.UUCP (05/06/84)

<>
>If you built a house the way some of you seem to think you should build
>a program, we'd be in trouble. The software sevelopment cycle is more
>that just a textbook approach. It is a reality in the commercial world
>of industrial-strength business software.
If "a house" were no better defined than some of the problems for which we
build software, it wouldn't be built the way it is.  "Building a house" is
not a problem at the state-of-the-art.
-- 
...Relax...don't worry...have a homebrew.		Dick Dunn
{hao,ucbvax,allegra}!nbires!rcd				(303) 444-5710 x3086

gwyn@brl-vgr.UUCP (05/08/84)

It is the job of the analyst to properly define the problem to be
solved, among other things.  Perhaps there is simply not enough
care being taken with problem definition before program design
starts...

gwyn@brl-vgr.UUCP (05/08/84)

My favorite approach to large-scale software system design is DeMarco's
Structured Design.  It addresses all the issues raised by Henry, mainly
through producing a design that is actually AMENABLE to iterative change.

per@erix.UUCP (Per Hedeland) (05/08/84)

>> If you built a house the way some of you seem to think you should build         
>> a program, we'd be in trouble.

Sure. Everyone knows that the right way to build a house is to start with
the roof. :-}

henry@utzoo.UUCP (Henry Spencer) (05/08/84)

While I agree with most of Mark Miller's comments (as anyone who saw
my comments on the same issue should know), I have minor reservations
about one thing:

   Of course, not all my programming is like this and different people have
   different techniques. How you proceed also depends on how well you know the
   language and how good your memory is (mine's bad). There probably is no such
   thing as the best programming technique, just the best for you personally.

The one aspect of this statement that I'm a bit unhappy about is the
implication (which may not have been there by intent) that it doesn't
really matter what technique you use, so long as it suits you.  This
denies the possibility that there may be real differences in effectiveness
between different techniques, over and above individual variation among
the programmers using them.

I've heard too many people say "well, everybody knows that <THING> is
all just a matter of personal taste, so I'll do <THING> any way I damn
well please and you have no right to object".  Admitting the importance
of personal factors does not imply admitting that they are the only
important factors.
-- 
				Henry Spencer @ U of Toronto Zoology
				{allegra,ihnp4,linus,decvax}!utzoo!henry

crane@fortune.UUCP (John Crane) (05/10/84)

If you built a house the way some of you seem to think you should build
a program, we'd be in trouble. The software sevelopment cycle is more
that just a textbook approach. It is a reality in the commercial world
of industrial-strength business software.

You gotta plan ahead. If not how do you know what you are going to
build and how will you know when you've built it?

cwc@uw-june.UUCP (05/11/84)

/**/

Interesting that a Fortune employee would lecture on how to
build software systems, when Fortune has unleashed some of the
buggiest, trashiest software the world has ever seen ...

Put thine own house in order, Mr. Crane.

henry@utzoo.UUCP (Henry Spencer) (05/11/84)

Doug Gwyn comments, in part:

   It is the job of the analyst to properly define the problem to be
   solved, among other things.  Perhaps there is simply not enough
   care being taken with problem definition before program design
   starts...

Sorry, Doug, but to my mind the whole role of the "systems analyst" is
part of the "software development cycle" mythology:  "of course we can
get it right the first time".  Nonsense.  The whole idea of "properly
defin[ing] the problem to be solved" implies that the nature of the
problem can be nailed down once and for all beforehand.  For the main
reason why this doesn't work, see my previous comments about users'
views of the problem changing once they are exposed to a first-draft
solution.

Mind you, I agree that properly defining the problem to be solved is
important.  Lack of effort towards this has led to a number of pieces
of software that "solve" important problems in thoroughly brain-damaged
ways; Berkeley job control comes to mind.  [Before I get roasted from
all sides, let me urge job-control enthusiasts to re-read that last
sentence carefully:  I'm not saying that job control isn't useful, but
that the importance of solving the problem (orderly interaction with
multiple simultaneous processes) has blinded people to the fact that
Berkeley solved it very poorly.]  My point is that the insight needed
to understand problems comes from experimenting with solutions (with,
preferably, real users as the experimentees), not from abstract
contemplation of specifications.
-- 
				Henry Spencer @ U of Toronto Zoology
				{allegra,ihnp4,linus,decvax}!utzoo!henry

gwyn@brl-vgr.ARPA (Doug Gwyn ) (05/14/84)

I suspect we are more in agreement than it appears.  By suggesting that
a professional software designer get involved in problem definition
before the solution is designed, I do not mean ANY sort of irrelevant
abstraction.  Through good communication with the clients of the
software system being designed, and after careful study of their
current and expected methods and requirements, one should be able to
ITERATIVELY present system designs (data flow diagrams and other
documents that the clients can COMPREHEND) and work with the clients to
make sure that what is going to be built is in fact what is really
needed.  Then later, when requirements change (as they will), the
original design documents serve as the starting point for discussion
of what to change in the system and how it affects the overall
operation.

The few times I have seen this tried it has been substantially more
successful than either older traditional design approaches or hacker
design.  (MY definition of a hacker is a person whose attempt to
solve a problem is to immediately start writing code.)

gwyn@brl-vgr.UUCP (05/14/84)

Relay-Version: version B 2.10.1 6/24/83; site decvax.UUCP
Posting-Version: version B 2.10.1 6/24/83; site brl-vgr.ARPA
Message-ID: <2003@brl-vgr.ARPA>
Date: Mon, 14-May-84 11:16:22 EDT

 book review
Organization: Ballistics Research Lab
Lines: 18

I suspect we are more in agreement than it appears.  By suggesting that
a professional software designer get involved in problem definition
before the solution is designed, I do not mean ANY sort of irrelevant
abstraction.  Through good communication with the clients of the
software system being designed, and after careful study of their
current and expected methods and requirements, one should be able to
ITERATIVELY present system designs (data flow diagrams and other
documents that the clients can COMPREHEND) and work with the clients to
make sure that what is going to be built is in fact what is really
needed.  Then later, when requirements change (as they will), the
original design documents serve as the starting point for discussion
of what to change in the system and how it affects the overall
operation.

The few times I have seen this tried it has been substantially more
successful than either older traditional design approaches or hacker
design.  (MY definition of a hacker is a person whose attempt to
solve a problem is to immediately start writing code.)

robison@eosp1.UUCP (Tobias D. Robison) (05/15/84)

References:

Many houses are built the way we write programs.  I have listened to
examples in painful detail.  Consider the typical tract house --
the subcontracter assumes that the contracter has given him nice square
corners to work with.  As he builds and discovers the survey was not so
precise, he starts to make changes,  shortening roof trusses and the like,
to make the house fit together.  A friend of mine who went through this
on his first subcontract job died of mortification thinking about the
hacks he had made to make the house fit.  Then he and his crew went and
looked at the rest of the tract and decided they had built the house with
the cleanest compromises!

Then there is the fellow I know who was visting the site of a major rework
to his house when one of the workers came over to the contractor to explain
that two parts of flooring were an inch and a half apart in height where they
met.  The two of them spent ten minutes deciding what to do, and then the
worker went on his way.  My friend marveled to the contractor that such pains
would be taken over such a small misfit.
"Oh, he's well-trained,", said the contractor.  "In front of the customer,
he says 'inches' when he means 'feet'..."
					- Toby Robison (not Robinson!)
					allegra!eosp1!robison
					decvax!ittvax!eosp1!robison
					princeton!eosp1!robison

gmf@uvacs.UUCP (05/15/84)

Comment on analogy between house-building & programming:

I remember my sheet-metal-worker uncle speaking of the science of
"trimology", concerned with good changes during construction, arising
from necessary departures from specifications.  This always concerned
his own changes.  I also remember him shaking his head ruefully at
bad changes by others, and muttering "What an abortion!"  One of
his favorite bits of humor was an imitation of a carpenter rushing
from one place to another on a building site, holding one arm up high,
and the other out from his side.  "Out of my way," the carpenter says,
"I've got a measurement for a door!"

     Gordon Fisher

mwm@ea.UUCP (05/16/84)

#R:cubsvax:-21900:ea:5700004:000:1685
ea!mwm    May 15 20:15:00 1984

/***** ea:net.lang.c / utzoo!henry /  1:02 pm  May  9, 1984 */
I've heard too many people say "well, everybody knows that <THING> is
all just a matter of personal taste, so I'll do <THING> any way I damn
well please and you have no right to object".  Admitting the importance
of personal factors does not imply admitting that they are the only
important factors.
-- 
				Henry Spencer @ U of Toronto Zoology
				{allegra,ihnp4,linus,decvax}!utzoo!henry
/* ---------- */

Sorry, Henry, but in programming, the personal factor *is* the dominant
one. You should use whatever method gets the results you need, preferably
minimizing over pain to you.

However, you should consider one thing that nobody seems to have mentioned:
what do you want the code for? Is this an "I need it yesterday" program?
Is it a program to experiment with a language? Maybe to experiment with a
concept? Is it a tool you're going to use and probably modify later?

I use different styles for each of these type of programs (I tend to choose
different languages, too!). If I've got the time, I tend to design the user
interface, then choose the algorithm, choose the language, and code the
program using iterative refinement. I find that this leads to more
maintainable code than any other approach I've tried - including the
Yourdon Overplanning approach.

Of course, one of the times I worked with a team, I used the Yourdon
approach. I had to, as the other team members weren't capable of choosing
an algorithm, and just barely capable of coding it [I got code from team
members that wouldn't compile, for Finagle's sake!]. But this is just a
case of fitting the programming style to the individual.

	<mike

ron@brl-vgr.ARPA (Ron Natalie <ron>) (05/16/84)

Our favorite was when getting a piece of wood and and asked how long you
wanted it, the reply was "A long time, we're building a house out of it."

-Ron
Thank you, Used to be round.

henry@utzoo.UUCP (Henry Spencer) (05/18/84)

To rephrase my previous statement:  just because personal factors are
important does *NOT* mean they are the only important factors.  It is
an objectively-verifiable fact that some peoples' preferred styles of
programming turn out code that is poorer, by almost any realistic
measure, than other peoples' preferred styles.  It is true that personal
factors are important and programmers should have reasonable freedom
to work in the way that is most effective for them.  This does *NOT*
imply that they should have freedom to produce unreadable, unmaintainable
swill rather than clean, high-quality code.  And some people will do
exactly that if you let them.

   .....You should use whatever method gets the results you need, preferably
   minimizing over pain to you....

What about minimizing over pain to the other folks who are going to have
to maintain your code after you're gone, or maximizing over quality?  If
I have to go out of my way and undergo pain to meet these objectives, I do.
To my mind this is one of the major differences between professional-quality
work and junk:  concern for issues beyond personal convenience.

   However, you should consider one thing that nobody seems to have mentioned:
   what do you want the code for? Is this an "I need it yesterday" program?
   Is it a program to experiment with a language? Maybe to experiment with a
   concept? Is it a tool you're going to use and probably modify later?

Experiments and quick kludges are often in a different category from
production software, but I know of a good many kludges that have been
pressed into "production" service because the resources to do them
over again, right, weren't available.  A professor of mine once commented
that quick kludges should be thrown out immediately once they have served
their original purpose.  Not just marked "do not use", mind you, but
physically destroyed.

   ...........one of the times I worked with a team......................
   .......................the other team members weren't capable of choosing
   an algorithm, and just barely capable of coding it [I got code from team
   members that wouldn't compile, for Finagle's sake!]. But this is just a
   case of fitting the programming style to the individual.

On the contrary, this is a fine example of what I've been saying.  I'm
sure some of those people thought their programming was just fine, thank
you, and any differences between you and them were all a matter of personal
style.
-- 
				Henry Spencer @ U of Toronto Zoology
				{allegra,ihnp4,linus,decvax}!utzoo!henry

laura@utzoo.UUCP (Laura Creighton) (05/19/84)

From Henry Spencer (utzoo!henry)
	I've heard too many people say "well, everybody knows that <THING> is
	all just a matter of personal taste, so I'll do <THING> any way I damn
	well please and you have no right to object".  Admitting the importance
	of personal factors does not imply admitting that they are the only
	important factors.

Reply from (ea!mwm)
	Sorry, Henry, but in programming, the personal factor *is* the dominant
	one. You should use whatever method gets the results you need,
	preferably minimizing over pain to you.

Sorry mike. The assumption you are making is that everybody knows how
to minimize pain, and that one isn't valid, though  most people *think*
they know how to minimize pain. Case in point, me:

I used to write very ugly looking code (by the Henry Spencer look test,
which looks like the Indian Hill C style guide in a great many ways)
which passed lint. Now, this is to be preferred over code that doesn't
pass lint, or do error checking, but passes the look test, and at the
point in time when I was writing it I thought that it was the neatest
thing to ever come down the pipe. (Otherwise I would have been doing
it differently, you see.)

Then, on one day, Henry handed me a copy of the Indian Hill Style
Guide (with additions that he made) and let me know that my own code
could look any way I liked, but anything installed on the system
(utzoo) was going to look like that.

Did I think that this was the greatest inconveninece since Income Tax?
Yes. Did I think that Henry was an incosiderate, unnreasonable, perhaps
even tyranical monster? Yes. Did I think there was a damn thing I could
do about it? No. So after a few grumblings (to test and make sure that
there was nothing I could do about it) my code looked like the Indian
Hill Style sheet.

The trick is: Henry was right, I was wrong, it saves me much more pain
to write code the way I do now. It actually makes certain sorts of
common logical bugs harder to write and easier to find. But I sure didn't
know that before -- it is only after fixing miles of code that I now 
consider ugly that I realise *why* Henry was right. 

moral: being right is beyond all considerations of personal taste.

	
-- 
Laura Creighton
utzoo!laura

	"Not to perpetrate cowardice against one's own acts!
	 Not to leave them in the lurch afterward! The bite
	 of conscience is indecent"	-- Nietzsche
					The Twilight of the Idols (maxim 10)

dgary@ecsvax.UUCP (05/21/84)

Where and how can one obtain this Indian Hill Style Guide?  Would someone
care to post a summary of what it advises (perhaps some sample code)?

I'm sure I'm not the only one interested.

D Gary Grady  Duke U Comp Cttr
Durham, NC  27706

{decvax,ihnp4,akgua}!mcnc!ecsvax!dgary

gwyn@brl-vgr.ARPA (Doug Gwyn ) (05/23/84)

Can a copy of the Indian Hill C style guide (or Henry's adaptation
of it) be made available to the public (me, mostly! :-) somehow?
It may be helpful to lots of C programming projects.

I have been using the Plum-Hall style guide, with adaptations.
Better than nothing..

mwm@ea.UUCP (05/25/84)

#R:uvacs:-130500:ea:5700007:000:1741
ea!mwm    May 25 15:58:00 1984

>To rephrase my previous statement:  just because personal factors are
>important does *NOT* mean they are the only important factors.  It is
>an objectively-verifiable fact that some peoples' preferred styles of
>programming turn out code that is poorer, by almost any realistic
>measure, than other peoples' preferred styles.

Yes, but will those other people (the ones with the poorer code) turn out
better code if you make them use your style of programming? I write better
code using iterative refinement than I do when I try to do the design
completely and totally from the ground up. For some reason, the designed
code isn't as flexible as the refined code. The following quote from me
(which you quoted out of context) sums it up:

>   .....You should use whatever method gets the results you need, preferably
>   minimizing over pain to you....
>
>What about minimizing over pain to the other folks who are going to have
>to maintain your code after you're gone, or maximizing over quality?  If

In that case, maintainability is part of "what you need". You dropped
that when you dropped the context. If the code I wrote was unmaintainable
and maintainability was part of what I needed (it almost invariably is),
then I obviously chose the wrong method.

>Experiments and quick kludges are often in a different category from
>production software, but I know of a good many kludges that have been
>pressed into "production" service because the resources to do them
>over again, right, weren't available.

This is all to true. This is why I spend a fair fraction of my time trying
to convince the people on rug row to let me spend a little extra time doing
it right the first time. It generally saves time (and money) later.

	<mike

mwm@ea.UUCP (05/26/84)

#R:utzoo:-387800:ea:5700008:000:763
ea!mwm    May 25 16:07:00 1984

/***** ea:net.lang.c / utzoo!laura /  6:17 pm  May 19, 1984 */
Sorry mike. The assumption you are making is that everybody knows how
to minimize pain, and that one isn't valid, though  most people *think*
they know how to minimize pain. Case in point, me:

-- 
Laura Creighton
utzoo!laura
/* ---------- */

You're right, I am making an invalid assumption - I'm assuming that
people will try new things of their own free will, and use the one that
works best. This isn't true - and I blasted well know it.

Forcing people to use some style that may or may not work for them is
not the solution. Allowing people to go on using whatever hackery they
like without giving other things a chance may not work either. I don't
have a good solution; does anybody?

	<mike

liberte@uiucdcs.UUCP (05/29/84)

#R:utzoo:-387800:uiucdcs:27600034:000:913
uiucdcs!liberte    May 28 19:11:00 1984

/**** uiucdcs:net.lang.c / mwm@ea /  4:07 pm  May 25, 1984 ****/

Forcing people to use some style that may or may not work for them is
not the solution. Allowing people to go on using whatever hackery they
like without giving other things a chance may not work either. I don't
have a good solution; does anybody?

	<mike

/* ---------- */

Maybe the best solution is to find a style that does work for most people
and the teach the remaining incorrigibles how to live with it.  Most 
aspects of style hardly matter all that much and most people will go along
with whatever is choosen, if it is reasonable.  But at the same time,
it is important to allow the freedom to explore new styles that just 
might be better.  The old innovation vs. standards tradeoff.


Daniel LaLiberte          (ihnp4!uiucdcs!liberte)
U of Illinois, Urbana-Champaign, Computer Science
{moderation in all things - including moderation}

mwm@ea.UUCP (05/30/84)

#R:utzoo:-387800:ea:5700009:000:916
ea!mwm    May 30 11:10:00 1984

/***** ea:net.lang.c / uiucdcs!liberte /  7:11 pm  May 28, 1984 */
Maybe the best solution is to find a style that does work for most people
and the teach the remaining incorrigibles how to live with it.  Most 
aspects of style hardly matter all that much and most people will go along
with whatever is choosen, if it is reasonable.  But at the same time,
it is important to allow the freedom to explore new styles that just 
might be better.  The old innovation vs. standards tradeoff.


Daniel LaLiberte          (ihnp4!uiucdcs!liberte)
U of Illinois, Urbana-Champaign, Computer Science
{moderation in all things - including moderation}
/* ---------- */

The trick, of course, is getting people to use the "standard" 
style/methodology (We switched tracks somewhere in there). Given the
horror stories seen here recently, I suspect that getting people to
*teach* a style/methodology will be the hard part.

	<mike

jab@uokvax.UUCP (06/01/84)

#R:utzoo:-387800:uokvax:3000027:000:1791
uokvax!jab    May 31 22:11:00 1984

uiucdcs!liberte writes:

Maybe the best solution is to find a style that does work for most people
and the teach the remaining incorrigibles how to live with it.  Most 
aspects of style hardly matter all that much and most people will go along
with whatever is choosen, if it is reasonable.  But at the same time,
it is important to allow the freedom to explore new styles that just 
might be better.  The old innovation vs. standards tradeoff.

/* ---------- */

To which ea!mwm responds:

The trick, of course, is getting people to use the "standard" 
style/methodology (We switched tracks somewhere in there). Given the
horror stories seen here recently, I suspect that getting people to
*teach* a style/methodology will be the hard part.

/* ---------- */

Having never been good at keeping quiet (as Mike well knows), I feel
compelled to add my thirty-six cents. (It takes thirty-six cents to
go as far as two cents used to.)

The suggestion of "define a standard and stick to it" is swell, within
some reason. To define a standard that is supposed to work in all situations
is fool-hardy, and gives us such beasts as PL/I, ADA, and eventually, a
"standard operating system" (shades of OS/360). It's almost as if you expect
all mathematicians to write proofs in the same manner, or might I say, to
produce results that conform to certain styles.

(You wouldn't Ives to have had to rewrite his works to sound more like
Mahler, would you?)

Ladies and gentlemen, we aren't talking about chemical engineering here.
The term "computing science" is as contradictory as "political science".
What you really want is a way to review a program (as well as its internal
and external documentation) while it's being designed, coded, and
tested, so that pain is minimized.

	Jeff Bowles
	Lisle, IL