861087a@aucs.uucp (Andreas Pikoulas) (02/27/90)
From Paul Tom's book "Computer Information Systems" page 169 " Not only do organizations standarize programming languages, they also develop coding styles so that programs written by different programmers all follow good coding conventions. While SOME consider programming a "creative activity", a programmer should be as creative as a bricklayer following a blueprint for building a wall on a house. Creative programming , like accounting , can only get the user into trouble. " Please elaborate on this by e-mail. I plan to send your answers to the author. Thanks in advance A n d r e a s Andreas Pikoulas| UUCP :{uunet|watmath|utai|garfield}!cs.dal.ca!aucs!861087a TOWER 410 | E-MAIL : 861087a@AcadiaU.CA WOLFVILLE-NS | Phone(voice) : (902) 542-5623 CANADA B0P 1X0 | ------- IF YOU CAN'T CONVINCE THEM, CONFUSE THEM. -------- ****************************************************************************
sed@sppy00.UUCP (Steve Driscoll) (02/27/90)
It depends on what you call creative. If creativity is finding new ways to make a program run more effective (faster, more reliably, etc.) then by all means, be creative. If you mean to run off on your own to build the finest, most elegant solution to some problem, regardless of what is specified or in spite of time schedules then I'd say I could do without the creativity. -- *** ** * | | OO CC L CC // *** ** * | | O O C L C // *** ** * | | O O C L C // *** ** * | | OO CC LLL CC // Bringing information to people!
jdudeck@polyslo.CalPoly.EDU (John R. Dudeck) (02/28/90)
After a few years in the field, I have come to a personal commitment to practice good craftsmanship in everything I do. If a program is worth writing it is worth writing well. It requires great creativity to design and write good software. It also results in good business, because good software has fewer problems, and this results in less maintenance cost. The programming standards of an organization don't stifle creativity, at least not the creativity of a disciplined craftsman, any more than they would in say, a cabinet shop. -- John Dudeck "You want to read the code closely..." jdudeck@Polyslo.CalPoly.Edu -- C. Staley, in OS course, teaching ESL: 62013975 Tel: 805-545-9549 Tanenbaum's MINIX operating system.
gwyn@smoke.BRL.MIL (Doug Gwyn) (02/28/90)
In article <25eb63c7.6a42@polyslo.CalPoly.EDU> jdudeck@polyslo.CalPoly.EDU (John R. Dudeck) writes:
-After a few years in the field, I have come to a personal commitment to
-practice good craftsmanship in everything I do. If a program is worth
-writing it is worth writing well. It requires great creativity to design
-and write good software. It also results in good business, because good
-software has fewer problems, and this results in less maintenance cost.
All that is fine, and hurray for you.
-The programming standards of an organization don't stifle creativity, at
-least not the creativity of a disciplined craftsman, any more than they
-would in say, a cabinet shop.
Now, THAT depends on the standards. It definitely is not true that ANY
standard is better than none. For example, DoD contracts call for really
stupid deliverables, including documentation conforming to coding standards
that a good, experienced software craftsman would not voluntarily obey.
doerschu@rex.cs.tulane.edu (David Doerschuk) (02/28/90)
In article <1990Feb26.234217.23251@aucs.uucp> 861087a@aucs.UUCP (Andreas Pikoulas) writes: > > From Paul Tom's book "Computer Information Systems" page 169 > > " Not only do organizations standarize programming languages, they also >develop coding styles so that programs written by different programmers >all follow good coding conventions. While SOME consider programming a >"creative activity", a programmer should be as creative as a bricklayer >following a blueprint for building a wall on a house. Creative programming >, like accounting , can only get the user into trouble. " > >Please elaborate on this by e-mail. I plan to send your answers to the > author. >Andreas Pikoulas| UUCP :{uunet|watmath|utai|garfield}!cs.dal.ca!aucs!861087a Mr. Tom is describing an old problem and trying to use a sledgehammer to solve it. If programming tasks were as simple as he describes; we would have developed methods for directly mapping the requirements onto finished code. There is research going on now directed towards "natural language compilers", but the problems are significant and (IMHO) not completely solveable. *Very* interesting stuff, though. He (Tom) doesn't define "creative programming"; so I can't comment on whether I think its bad or not! Certainly there are constructs and techniques that should be avoided: relying on undocumented features of the OS, self-modifying code, etc. but to relieve programmers of all creative tasks would seem to be self-defeating...all your most productive programmers would quit! Managing programmers and dividing tasks between architects and programmers is an art/science. For a somewhat more enlightened and realistic account, I strongly recommend Frederick P. Brooks' book: "The Mythical Man-month". Brooks ran the OS/360 project at IBM in the middle 1960's, and his book describes the things he learned during this mammoth task. He's a very smart guy, and his experiences are *highly relevant* to modern programming. In summary, for what its worth, here's what I think: 1. Anyone who thinks that programmers involved in a commercial development situation should be able to do any damn thing they want is dead wrong. 2. Anyone who thinks that creativity should be suppressed in ANY employee (much less PROGRAMMERS, for god's sake!) is crazy. Thank's for the bandwidth! BTW, is Tom's book current? It sounds dated, like something from back in the late 60's or early 70's when some of the big corporate jobs were getting out of hand and a discipline (ANY discipline!) was being looked for to control the mess. Dave Doerschuk doerschu@rex.cs.tulane.edu
jcp@decuac.DEC.COM (Jolly C. Pancakes) (03/01/90)
In article <2317@rex.cs.tulane.edu>, doerschu@rex.cs.tulane.edu (David Doerschuk) writes: > Managing programmers and dividing tasks between architects and programmers > is an art/science. For a somewhat more enlightened and realistic account, > I strongly recommend Frederick P. Brooks' book: "The Mythical Man-month". > Brooks ran the OS/360 project at IBM in the middle 1960's, and his book > describes the things he learned during this mammoth task. He's a very > smart guy, and his experiences are *highly relevant* to modern programming. Another book that I would highly recommend is one that came out a little over a year ago - "Peopleware" by Tom DeMarco and another author. It concentrates on workgroup theories and the creative nature of programming (and makes some great arguments against mandatory neckties and..... The Furniture Police !). -- jcpatilla jcp@decuac.dec.com "Fling your beavers aloft!"
ggw@wolves.uucp (Gregory G. Woodbury) (03/03/90)
In article <1990Feb26.234217.23251@aucs.uucp> 861087a (Andreas Pikoulas) writes: > From Paul Tom's book "Computer Information Systems" page 169 > > " Not only do organizations standarize programming languages, they also >develop coding styles so that programs written by different programmers >all follow good coding conventions. While SOME consider programming a >"creative activity", a programmer should be as creative as a bricklayer >following a blueprint for building a wall on a house. Creative programming, >like accounting, can only get the user into trouble. " > >Please elaborate on this by e-mail. I plan to send your answers to the > author. Despite the note about e-mail elaboration, I think this really needs to be aired publicly. Here is my response.... There are two main problems with this attitude. 1) It assumes that computer programming is dealing with some exact problem that has exactly one correct solution. 2) It assumes that the bricklayer reading a blueprint for a building wall will have nothing inexact or creative to do. To pick up the 2nd point first. The "average" bricklayer (if such a person exists) may not have to challenge his ingenuity over 90% or so of a strech of wall. But, the particular patterning of bricks around a window or door, especially if the opening is of a non-conventional shape, may require a great deal of ingenuity and problem-solving. To add to the situation, sometimes the architects patterning of brick colors, or even the use of stonework other than the rectangular regularity of brick, may require several hours of thought before the placement of a particular stone, or even in the selection of which stone to put where! I have tried my hand at both bricklaying and stonemasonry (there is a difference!). I enjoyed it (except for climbing ladders) but discovered that I could earn more by sitting inside and programming computers for a living. The author exhibits the usual elitist attitude that the "blue collar" trades do not require creativity or ingenuity. A little bit of "on-the-job" research would show him why a master carpenter or a master stonemason can earn as much or more than a programmer. Now, back to point 1. In the "average" programming situation (if there is such a thing) there are probably "usual and customary" algorithims and procedures that will do what is necessary. But, in certain situations, especially when dealing with a new class of problem, or in implementing a newly invented technique (e.g. a new statistical tool or writing a compiler for a new computer architecture) the situation may require a lot of thought and ingenuity (read creativity) to "do the right thing". To add to the situation, the architects of the system may impose specific coding or documentation standards that may require several hours (or days) of thought in order to determine how to code within the requirements. I suspect that the original quotation, lifted out of its context is badly misrepresenting the authors intention. If he is trying to say that ALL PROGRAMMING is just routine laying down of one brick after another, then he is insulting the profession. On the other hand, if he is (as I suspect) classifying only a certain aspect of programming (i.e. the development of accounting packages) then he may be correct. I would like to have a little more context for this particular quotation. -- Copyright 1990, Gregory G. Woodbury, electronic re-distribution allowed -- Gregory G. Woodbury Sysop/owner Wolves Den UNIX BBS, Durham NC UUCP: ...dukcds!wolves!ggw ...dukeac!wolves!ggw [use the maps!] Domain: ggw@cds.duke.edu ggw@ac.duke.edu ggw%wolves@ac.duke.edu Phone: +1 919 493 1998 (Home) +1 919 684 6126 (Work) [The line eater is a boojum snark! ] <standard disclaimers apply>
dritchey@cbnewsc.ATT.COM (don.ritchey) (03/08/90)
in article <1990Mar3.065257.13674@wolves.uucp>, ggw@wolves.uucp (Gregory G. Woodbury) says: > In article <1990Feb26.234217.23251@aucs.uucp> 861087a (Andreas Pikoulas) writes: >> From Paul Tom's book "Computer Information Systems" page 169 >> >> " Not only do organizations standarize programming languages, they also >>develop coding styles so that programs written by different programmers >>all follow good coding conventions. While SOME consider programming a >>"creative activity", a programmer should be as creative as a bricklayer >>following a blueprint for building a wall on a house. Creative programming, >>like accounting, can only get the user into trouble. " >> > Despite the note about e-mail elaboration, I think this really needs > to be aired publicly. Here is my response.... > > There are two main problems with this attitude. > 1) It assumes that computer programming is dealing with some exact problem > that has exactly one correct solution. > 2) It assumes that the bricklayer reading a blueprint for a building wall > will have nothing inexact or creative to do. > I read this quote and the response to it a little differently. The main problem that I have seen in maintaining other people's software is excessive creativity where it is not appropriate (which is what I think the author probably intended to say). When the plan calls for simple "brickwork" with no need for fancy, convoluted "creative" code, then the programmer should write simple, non-creative code. When the time comes for the programmer to have to work around the "windows" and "doors" of the code, where the "brickwork" gets more complex, then the need arises for finding creative solutions to complex problems. What I suspect we need is what I would call "disciplined programming", which is not a blanket condemnation of "creativity", but a knowledge of when creativity is necessary. A well disciplined programmer knows how to use the conventions of coding style that places the punctuation in the expected places, follows the project guidelines for indentation and commenting, and rejects the desire to show off when the need simply isn't there. For example: If space is not a critical resource, then there is no need for fancy data packing and unpacking functions that consume run time and may actually use more memory (due to the size of the function) than they save. Similar analogies can be made for other cases. On the other hand, when creativity is essential (to overcome some limitation such as process run time, lack of heap space, or whatever) the well disciplined programmer writes the "creative code" as clearly and as cleanly as possible. The more creative and convoluted the code must be to overcome the obstacle, the greater the need for explanations and in-progress comments to let the maintenance programmer figure out what was done and how. It also helps the programmer figure out what he or she was doing when the inevitable requirement comes in to add some enhancement to that same creative code that was written 6 months ago. If the problem is sufficiently complex, the programmer may have to start from scratch to figure out "What did I do, and why did I do it THAT way." I don't think that the author of the book intended for the programmer to write code while within a straight jacket, but instead for the programmer to develop a sense of discipline of how to follow the rules of the project, and know when and how to successfully break the rules. Just like the Burger King commercial, "Sometimes you just got to break the rules!". That doesn't mean you have to break the rules all the time. For whatever that was worth, there it is. #include <std/disclaimer.h> Don Ritchey dritchey@ihlpb.att.com or don.ritchey@att.com AT&T Bell Labs, Room IH 1D-409, Naperville, IL 60566, (708) 979-6179 :-) The advice you get here is worth all that you paid for it. :-)
maclean@bcarh186.bnr.ca (Mark Maclean) (03/14/90)
In article <14203@cbnewsc.ATT.COM> dritchey@cbnewsc.ATT.COM (don.ritchey) writes: >main problem that I have seen in maintaining other people's software is >excessive creativity where it is not appropriate > >On the other hand, when creativity is essential (to overcome some >limitation such as process run time, lack of heap space, or whatever) >the well disciplined programmer writes the "creative code" as clearly >and as cleanly as possible. The more creative and convoluted the code ^^^^^^^^^^^^^^^^^^^^^^^ >must be to overcome the obstacle, the greater the need for explanations >and in-progress comments to let the maintenance programmer figure out >what was done and how. It also helps the programmer figure out what he Creative programming, for me at least, usually involves trying to simplify the problem as much as possible. If the code is extremely convoluted then it is entirely likely that the programmer was not creative enough. Creativity is a must for creating good, maintainable code. K.I.S.S. requires creativity too. - The above are not the opinions of my species, my country, or my employer. If you disagree with them then they are not your opinions either!
jdudeck@polyslo.CalPoly.EDU (John R. Dudeck) (03/15/90)
In article <2308@bnr-rsc.UUCP> bnr-rsc!bcarh186!maclean () writes: >Creative programming, for me at least, usually involves trying to simplify >the problem as much as possible. Yes!! >If the code is extremely convoluted then it is entirely likely that the >programmer was not creative enough. Creativity is a must for creating >good, maintainable code. I agree heartily. Convoluted code is *never* the best solution to any programming problem. In my programming, the only convoluted code I have ever allowed in my work was stuff that somebody else wrote and I didn't have time to fix. Maintaining "creative" code takes the creativity that the one who wrote it didn't have in the first place. -- John Dudeck "You want to read the code closely..." jdudeck@Polyslo.CalPoly.Edu -- C. Staley, in OS course, teaching ESL: 62013975 Tel: 805-545-9549 Tanenbaum's MINIX operating system.
jeffa@hpmwtd.HP.COM (Jeff Aguilera) (03/16/90)
> The > main problem that I have seen in maintaining other people's software is > excessive creativity where it is not appropriate (which is what I think > the author probably intended to say). When the plan calls for simple > "brickwork" with no need for fancy, convoluted "creative" code, then > the programmer should write simple, non-creative code. I maintain a LOT of code. The main problem is not creativity of the implementation, but rather lack of a plan.
rang@cs.wisc.edu (Anton Rang) (03/18/90)
In article <25fed2fe.1f3e@polyslo.CalPoly.EDU> jdudeck@polyslo.CalPoly.EDU (John R. Dudeck) writes: >In article <2308@bnr-rsc.UUCP> bnr-rsc!bcarh186!maclean () writes: >>If the code is extremely convoluted then it is entirely likely that the >>programmer was not creative enough. Creativity is a must for creating >>good, maintainable code. > >I agree heartily. Convoluted code is *never* the best solution to any >programming problem. I think someone pointed out earlier that there are times when convoluted code is necessary to satisfy some constraints of the problem. Especially when working on microcomputers, these seem to pop up once a year or so in the stuff I do. If you have an interrupt handler with a critical time constraint, for instance, you may have to put some real convolutions into the code to get it to run quickly enough. (This involves a lot of creativity, too--just a different kind.) Another example is working with a program with 150K of free memory and 2 MB of data, when some operations scan every record, but only a particular field--it's convoluted to maintain an array in memory which parallels part of the records stored on disk, but it may mean the difference between a program which is too slow to use and one which is workable. >Maintaining "creative" code takes the creativity that the one who >wrote it didn't have in the first place. If it's properly documented, it's not necessarily too bad. I try to avoid convolution, and when I'm writing a program I try to do it the most straightforward way. If I find something which forces me into doing convolution, I'll keep the (unconvoluted) algorithm in the docs, along with an explanation of what "tricks" have been used, and why. I've gone back to programs like this I've written, 7 or 8 years later, and (after perusing the documentation for a few minutes) it's not hard to change them. Just my $.02.... Anton +---------------------------+------------------+-------------+ | Anton Rang (grad student) | rang@cs.wisc.edu | UW--Madison | +---------------------------+------------------+-------------+