[comp.software-eng] American Programmer

warren@psu-cs.UUCP (Warren Harrison) (03/18/88)

The recent discussion in this newsgroup regarding the poor quality of
software engineering in the US today is quite interesting.  Before we
end up gnashing all our teeth into stubs, I'd like to point out that
hardly an automaker has yet to have at least one model recalled due
to faulty brakes or whatever. This will no doubt become more and more
common as mechanical systems begin to become more and more complex
(I can't think of a single mechanical system today which is anywhere
close to as complex as even a moderate sized compiler, much less an
operating system or C3 system).

Perhaps what is most amusing is the universal agreement that "management"
(whoever they are) is to blame.  The general feeling seems to be that if
only managers would let us programmers have our head, everything would be
right with the world.  In the first issue of American Programmer (a new
magazine that Ed Yourdon is publishing out of his Mac II and office in NY)
this issue is dealt with as frankly as I have seen so far.  Yourdon points
out that the average programmer isn't all that great anyway, and should
share at least part of the blame.  This is no doubt due to the great influx
of people who wanted secure, high paying jobs in the early 1980's, but who
really weren't cut out for writing software (I must have taught 500 of them
from 1979 to 1984, at various universities from Missouri to Oregon).

While I agree that management must share the blame on the general state of
things, we (ie, programmers) have to bear some of the burden.  Almost every
company I have seen represented in this newsgroup has had at least one major
fiasco (publicized or not).

There is lots more to do with this topic in the American Programmer.
For more info about Ed's new venture, write him at:

161 West 86th Street
New York City, NY  10024-3434

this new magazine is by far one of the best I've yet to see, and I suggest
everyone interested in the state of the American Programmer look into it!
(I am not affiliated in any way with Ed Yourdon, Yourdon Press, Children's
Software [the ones that publish AP], or anything else east of the Oregon-Idaho
state line).

Warren Harrison
The University of Portland
Portland, OR 97203-5798

msir_ltd@ur-tut (Mark Sirota) (03/20/88)

In article <555@psu-cs.UUCP> warren@psu-cs.UUCP (Warren Harrison) writes:
> Perhaps what is most amusing is the universal agreement that "management"
> (whoever they are) is to blame. ... Yourdon points out that the average
> programmer isn't all that great anyway, and should share at least part of
> the blame.  This is no doubt due to the great influx of people who wanted
> secure, high paying jobs in the early 1980's, but who really weren't cut
> out for writing software (I must have taught 500 of them from 1979 to
> 1984, at various universities from Missouri to Oregon).
>
> While I agree that management must share the blame on the general state of
> things, we (ie, programmers) have to bear some of the burden.

I dunno who's been saying that it's management's fault, I fully disagree.
There are far too many bad programmers out there.  Some of them are really
bad.  I've had to work UNDER some of them, since I only work summers.

Some of the software you see out there boggles the mind - how many times
have you said, "God, I would never have released anything like that!"

Of course, part of the problem may be that I consider myself a good
programmer - and so does everyone else.  It's hard for non-programmers to
tell who's better.  In that respect, it is management's fault.  They're
the ones doing the hiring...
-- 

Mark Sirota
 msir_ltd%tut.cc.rochester.edu@cs.rochester.edu (rochester!ur-tut!msir_ltd)

rmac@well.UUCP (Robert J. McIlree) (03/20/88)

In article <555@psu-cs.UUCP> warren@psu-cs.UUCP (Warren Harrison) writes:
>
>Perhaps what is most amusing is the universal agreement that "management"
>(whoever they are) is to blame.  The general feeling seems to be that if
>only managers would let us programmers have our head, everything would be
>right with the world.  In the first issue of American Programmer (a new
>magazine that Ed Yourdon is publishing out of his Mac II and office in NY)
>this issue is dealt with as frankly as I have seen so far.  Yourdon points
>out that the average programmer isn't all that great anyway, and should
>share at least part of the blame.  This is no doubt due to the great influx
>of people who wanted secure, high paying jobs in the early 1980's, but who
>really weren't cut out for writing software (I must have taught 500 of them
>from 1979 to 1984, at various universities from Missouri to Oregon).
>
No argument that programmers should share part of the blame for failures.
I think the majority of blame *does* lie with management, though. 
Realize that software projects are, more often than not, political
ventures as opposed to technical ones. Programmers, like all other
employees, need *direction and guidance* at various intervals. Who
is to provide that? Large software projects need organization, planning,
and expertise in various capacities to come out right. The programmer
is only part of the solution.

What do we have in a project besides programmers and managers? System
test people, technical support (both internal and external),
documentation/tech writing, secretaries, clerks, and system
engineers immediately come to mind. Examining what went wrong
on a particular project involves more than looking at the
bugs and inadequacies in delivered software. Defects must
(and can) be traced to various phases of the software lifecycle
that programmers have little to do with! Like requirements
definition, test plans, effective management and leadership
of the project team, and so on.

As to the 500 or so people you mention that weren't cut out for writing
software, how many were writing software after they graduated? I'd
take a guess that a good number of them went to positions similar
to those mentioned above. What formal instruction did they receive
at their institution to prepare them for a software QA, system
engineering, tech writing, or tech support job? Did the CS
departments in which you were affiliated with even approach these
subjects? Or is it left to those one-day to one week seminar courses
employers pay for to turn BSCS grads into one week wonders of system
test?

To summarize, programmers represent a portion of the solution in
delivering high quality software systems on-time and within
budget. They, like any other resource, are controlled by managers.
When placing the blame on project failure, one must also analyze
the other components of the solution, the other groups involved
in that effort, and their management. You'd be surpsised at
how many failures *do not* involve the prgrammers.

Bob McIlree
(ihnp4, lll-crg}well!rmac

shap@bunker.UUCP (Joseph D. Shapiro) (03/22/88)

In article <555@psu-cs.UUCP> warren@psu-cs.UUCP (Warren Harrison) writes:
> Perhaps what is most amusing is the universal agreement that "management"
> (whoever they are) is to blame. ... Yourdon points out that the average
>
> While I agree that management must share the blame on the general state of
> things, we (ie, programmers) have to bear some of the burden.

I think that one of the many ways that programmers must improve is in
standing up and saying NO to unreasonable expectations on the part of
management.

If management says "I need this in X weeks", but you know it can only
be done in 3*X weeks, or maybe you can glue something together in X
weeks if you work nights and weekends, what can you do?

a) work nights and weekends.  This might get you in good with the
boss.  Your boss may not even realize that you are doing something out
of the ordinary.  It is likely that management will expect the same
sort of productivity when they set the next deadline.  Also consider
that such efforts often leave some things "to clean up later", but that
you seldom get the luxury of going back and cleaning them up.  This is
can lead to a most vicious circle.

b) be willing to take a little heat and explain to management exactly
how long it will take to do the job right and WHY.

c) work extra hours but make damned sure that management understands
how much work is being done AND WHAT IT COSTS THEM both in terms of
overtime or burn-out, and in terms of lower quality in the resulting
product.

I seems that too many programmers are more willing to do (A) than (B).
(C) would seem to be the best of both worlds, but is actually a double
negative to most programmers -- "I gotta work late AND talk to
management?"

BTW, I was a programmer (still am under the skin) and am now a manager,
so I feel that I can see both sides.
-- 
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
Joe Shapiro					"My other car is a turbo...
Bunker Ramo Olivetti				 too."
{decvax,yale,philabs,oliveb}!bunker!shap

shebs%defun.utah.edu.uucp@utah-cs.UUCP (Stanley T. Shebs) (03/22/88)

In article <3415@bunker.UUCP> shap@clunker.UUCP (Joseph D. Shapiro) writes:

>If management says "I need this in X weeks", but you know it can only
>be done in 3*X weeks, or maybe you can glue something together in X
>weeks if you work nights and weekends, what can you do?
>
>a) work nights and weekends. [...]
>
>b) be willing to take a little heat and explain to management exactly
>how long it will take to do the job right and WHY.
>
>c) work extra hours but make damned sure that management understands
>how much work is being done [...]
>
>It seems that too many programmers are more willing to do (A) than (B).

One reason I've observed is hubris - programmers have heard all about "Real
Programmers" and imagine themselves either to be such, or they aspire to the
position.  Given such feelings, it's very easy for managers to manipulate the
programmers - "What, you can't do all that on time?  Old Joe Fortran would
write the whole thing in two days!".  Of course, the programmers get indignant
and insist they're just as good as Joe Fortran, but without stopping to
consider that Joe Fortran (now departed for greener pastures) was also the
person who wrote such disastrous code that millions are now being spent to
keep up with the continual stream of bugs.  The managers' comments also
have a vague air of threat - "If you can't do the job, we'll replace you
with somebody who can," in case any of the programmers have resisted the
appeal to their egos.

Schools are part of the problem, since it has become habitual to assign
students to write massive amounts of code as weekly exercises. Of course,
(ahem) I've never made up such an assignment. :-)  Needless to say, the
best grades go to the students who hack the fastest, and I get howls of
complaint (not just from students!) for counting off on "minor" bugs or
(heaven forfend!) style.  Trying to teach better programming practices is
definitely an uphill battle...

							stan shebs
							shebs@cs.utah.edu

UH2@PSUVM.BITNET (Lee Sailer) (03/23/88)

In article <5359@utah-cs.UUCP>, shebs%defun.utah.edu.uucp@utah-cs.UUCP (Stanley T. Shebs) says:
>
>Schools are part of the problem, since it has become habitual to assign
>students to write massive amounts of code as weekly exercises. Of course,
>(ahem) I've never made up such an assignment. :-)  Needless to say, the

I have been trying to make this point here.  Imagine this freshman programming
course---start with data flow diagrams, strucutre charts, and walk-throughs---
add egoless programming---teach symbolic debuggers and syntax directed editors
from day one.

Sure, you might hate some of these techniques.  But the point is that we
need to teach professional skills from day one, sort of like chemistry
teaches basic lab skills in freshman chemistry.

Just a thought.  Flame away...

shebs%defun.utah.edu.uucp@utah-cs.UUCP (Stanley T. Shebs) (03/24/88)

In article <36845UH2@PSUVM> UH2@PSUVM.BITNET (Lee Sailer) writes:

>[...]  Imagine this freshman programming
>course---start with data flow diagrams, strucutre charts, and walk-throughs---
>add egoless programming---teach symbolic debuggers and syntax directed editors
>from day one.

Sounds good to me...  The main objection that comes to mind is the increased
volume of material.  If you go to a simpler language like Scheme (flame flame)
then you would have to spend less time on random syntax and semantics.

Another thought that comes to mind is that courses of study in many
disciplines are extremely long, lasting perhaps several years before
the students are ready to do things on their own (think about when EEs
do their first nontrivial circuit designs).  In CS, it seems to be assumed
that one intro course and one data structures course makes an educated
programmer, and everything after that can be electives.  On the other
hand, while I "know" that students should understand the theory of sorted
algebras before writing an abstract data type, I don't "feel" that so
much theory is essential to training professional software engineers.
A dilemma...

							stan shebs
							shebs@cs.utah.edu

raveling@vaxa.isi.edu (Paul Raveling) (03/24/88)

In article <3415@bunker.UUCP> shap@clunker.UUCP (Joseph D. Shapiro) writes:
>
>I think that one of the many ways that programmers must improve is in
>standing up and saying NO to unreasonable expectations on the part of
>management.
>
>If management says "I need this in X weeks", but you know it can only
>be done in 3*X weeks,  ...

	A variant of this is the occasional management decision
	to simply throw more people at a problem.  In software,
	as in real life, there are projects that can't be accelerated
	this way.  Nine women can't necessarily do in one month
	what one woman can do in nine.


---------------------
Paul Raveling
Raveling@vaxa.isi.edu

dtraver@macomw.ARPA (George Andrew Traver) (03/25/88)

>In article <36845UH2@PSUVM> UH2@PSUVM.BITNET (Lee Sailer) writes:
>
>[...]  Imagine this freshman programming
>course---start with data flow diagrams, strucutre charts, and walk-throughs---
>add egoless programming---teach symbolic debuggers and syntax directed editors
>from day one.
>


I graduated from UCSD with a CS degree.  The problem I found with my
education was that problem solving techniques were never covered in
depth.  My first two years of work I impressed everyone I worked for
except  myself.  My code was not clean and did not always flow logicaly.
But it always met or exceeded functional requirments.
Just lately I've been working with some PHD people with tons of
experience and I fell I'm just now starting to learn how to code.

The reason this problem exist in school is because it would take 
a lot of time to realy understand each program turned in and grade
them on there logical flow.  This is why prof's wont do it.  The
TA's who grad the programs are just as porly trained as the students.
The whole grade is placed on comments and correct output.  Well
thats no problem for me, I've done it in the past for employers.
I've handed them well commented programs that run correctly but
I would hate to be someone else who had to modify it.



*******************************************************************************

Success has many fathers :-), while failure is an orphan. :-(

------------------------------------------------------------------------------

The views expressed in this article are shared by no other living being
or organization I know of. ( especialy my girlfreind )

	   		dtraver@macomw.arpa
	  
			FLAMES > /dev/null

*******************************************************************************

lishka@uwslh.UUCP (Christopher Lishka) (03/25/88)

     I too think that this is a great idea.  All too often the real
skills in programming are left aside in favor of theory, and theory
does not necessarily a good programmer make.  As a current
undergraduate who has learned most of his real "skills" from my
current job (from an excellent, well-versed programmer who also works
here), I am now amazed that what I thought were good programming
skills (i.e. knowing all of the commands of a language, etc.) are only
a small part of a much wider base.

     One problem I see, however, is that there really isn't much of a
standard OS to work from in teaching the practical aspects of
programming.  For instance, where I work I use tools such as
Gnu-Emacs, several C compilers, Perl, Yacc, Lex, Ksh, Csh, Sh, RCS,
Gprof, Dbx, etc. all running on 4.3BSD Unix.  Now, at school I have
used such a wide variety of systems (from Xerox InterLisp workstations
to archaic local OS's) that the vast array of tools can be
overwhelming, especially when they are written to work with systems
that differ in *philosophy* as well as implementation.  A structured
Lisp editor is not like Vi.  An interpretive Lisp environment can be
much different from, say, the edit-compile-run-edit cycle so typical
of many C projects.  Using RCS can be much different than saving
backup directories as well as using Tar with a 9-track tape drive.
There is a lot of "theory" involved in organizing programs as well as
modifying and writing them, and it is this kind of theory that seems
to be left to the student to discover.

     Maybe there should be a course on this sort of thing.  I think a
mandatory course titled something like "Program Writing" should be
offered (at least at this University) where issues such as programming
environments and project management should be discussed.  At very
least it could give the prospective CS undergraduate major a set of
"rules" or "guidelines" to go about organizing and writing a general
program.  This course could be a 2nd or 3rd course, after a standard
language or two has been taught, so that something well known like
Pascal, Scheme, or whatever can be assumed to be already known, in
order to focus on program writing styles independent of any language.

     Well, those are just a few thoughts.  Any comments or criticisms?

						-Chris

-- 
Chris Lishka                    /lishka@uwslh.uucp
Wisconsin State Lab of Hygiene <-lishka%uwslh.uucp@rsch.wisc.edu
"My cockatiels control my mind!"\{seismo, harvard,topaz,...}!uwvax!uwslh!lishka

warren@psu-cs.UUCP (Warren Harrison) (03/25/88)

> 
> Sure, you might hate some of these techniques.  But the point is that we
> need to teach professional skills from day one, sort of like chemistry
> teaches basic lab skills in freshman chemistry.
> 
> Just a thought.  Flame away...

This is a very good suggestion.  However, here is my problem ... how do you
justify to a student that a program to compute the sum of a list of numbers
uses a procedure?  Or a Warnier Orr (or data flow) diagram?  I guess I'm saying
that my experience leads me to believe that the tools have to be motivated
by something other than saying "... it's good for you ...".  At the intro level
it gets really hard (for me) to motivate the use of such tools.  Even something
as simple as commenting is difficult to justify for a three or four line
program.  On the other hand, maybe my examples and assignments are overly]
simple compared to those of the rest of you. One approach that I have found
to work quite well however is in the COBOL programming course.  The first few
programs involve the (extensive) modification of a working program of several
hundred lines of code. The students really appreciate the existence of comments
and meaningful variable names then.  Also, the program tends to serve as an exa
example of the type of commenting and style I expect from the students' programs

I'd like to hear the approach others take to this problem ... do most people
simply mandate the use of tools like DFD's and modularity, or do you provide
motivation (besides saying you'll be glad you did it this way next semester)?
Also, does anyone address th eissue of program maintenance in their classes
by having students modify a non-trivial program?  It is ironic that so little
attention is paid to maintenance in school when the majority of graduates
start off in this activity.

Warren Harrison
The University of Portland

pase@ogcvax.UUCP (Douglas M. Pase) (03/25/88)

In article <36845UH2@PSUVM> UH2@PSUVM.BITNET (Lee Sailer) writes:

>[...]  Imagine this freshman programming
>course---start with data flow diagrams, structure charts, and walk-throughs---
>add egoless programming---teach symbolic debuggers and syntax directed editors
>from day one.

This sounds like it might be a reasonable idea.  There is, however, at least
one difficulty which must be overcome.  Walk throughs and egoless programming
are targeted for large, multi-person projects.  Beginning course assignments
generally need to be geared towards small, single person programs.

My own personal opinion is that the earliest courses need to familiarize
students with the machine, languages, and tools.  Many freshmen still think
of computers as black boxes where wonderous things are done by magic.
Structured programming can certainly be taught to students at this level.
Flow diagrams, structure charts, and symbolic debuggers are all appropriate
here.  Syntax directed editors are a two-edged sword and might be saved for
later.  Once they become familiar with the nature of the computer -- they
see what a language is, they understand how programs work -- teach them hard
core software engineering, and insist they use it!

I know you all have been asking for my opinion on this, and there, at last,
you have it!
-- 
Doug Pase  --  ...ucbvax!tektronix!ogcvax!pase  or  pase@cse.ogc.edu (CSNet)

UH2@PSUVM.BITNET (Lee Sailer) (03/26/88)

In article <5367@utah-cs.UUCP>, shebs%defun.utah.edu.uucp@utah-cs.UUCP (Stanley T. Shebs) says:
>
>In article <36845UH2@PSUVM> UH2@PSUVM.BITNET (Lee Sailer) writes:
>
>>[...]  Imagine this freshman programming
>>course---start with data flow diagrams, strucutre charts, and walk-throughs---
>>add egoless programming---teach symbolic debuggers and syntax directed editors
>>from day one.
>
>Sounds good to me...  The main objection that comes to mind is the increased
>volume of material.

At first, it sounds like *more* material, but look what it might mean (if
it worked):  By spending two weeks up front, teaching them to use a symbolic
debugger, they'd save 5 hours per week for the rest of the term because
they would be faster debuggers, for a net gain of about 60 hours.

During this 60 hours, they can learn about lots of other keen stuff 8-)

smith@cos.com (Steve Smith) (03/26/88)

In article <312@uwslh.UUCP> lishka@uwslh.UUCP (Christopher Lishka) writes:

>     Maybe there should be a course on this sort of thing.  I think a
>mandatory course titled something like "Program Writing" should be
>offered (at least at this University) where issues such as programming
>environments and project management should be discussed.  At very
>least it could give the prospective CS undergraduate major a set of
>"rules" or "guidelines" to go about organizing and writing a general
>program.  This course could be a 2nd or 3rd course, after a standard
>language or two has been taught, so that something well known like
>Pascal, Scheme, or whatever can be assumed to be already known, in
>order to focus on program writing styles independent of any language.

>     Well, those are just a few thoughts.  Any comments or criticisms?
>
>						-Chris

It sounds like a great idea to me.  Doing it properly may be a problem,
however.  Two of the main characteristics of commercial programs are (1)
they tend to be big, worked on by a group rather than by one person, and
(2) they are designed to last a long time, with upgrades along the way.
This type of environment is *very* difficult to simulate.

Simply attending lectures and reading books is no substitute for being
given a huge, greasy mass of ten year old spaghetti code and being told
"Add these ten simple features.  You've got three weeks."  After taking
the course, you know about modular design, documentation, and
testability in your head.  After untangling that spaghetti, you'll know
it in your stomach.

On a smaller scale, I've found the venerable "Software Tools" to be an
excellent guide to the how and (more importantly) why of small program
writing.  Unfortunately, I don't know anything nearly as good that
addresses larger system development.

-- 
                -- Steve
(smith@cos.com)    ({uunet sundc decuac hqda-ai hadron}!cos!smith)
"Truth is stranger than fiction because fiction has to make sense."

mjl@ritcv.UUCP (Mike Lutz) (03/28/88)

In article <36845UH2@PSUVM> UH2@PSUVM.BITNET (Lee Sailer) writes:
>
>I have been trying to make this point here.  Imagine this freshman programming
>course---start with data flow diagrams, strucutre charts, and walk-throughs---
>add egoless programming---

Problem: it's awfully hard to motivate freshmen (or anyone else who hasn't
worked on large programming projects) of the importance of these techniques
(or even what the techniques really mean).  They have know experience base
to fall back on; no examples to provide a context for understanding any
of this.  Or, as a colleague once said "We try to expose students to all
of these important concepts, only to find that most of them are immune."

>teach symbolic debuggers and syntax directed editors
>from day one.

No! no! no! If you want anyone to learn the discipline of program
design, then the *last* thing you want them to have is a fancy
debugging environment.  That is, unless your idea of modern programming
practice is to spend most of your time debugging sloppily conceived
code.  Make debugging easy and attractive, and I guarantee that's the
message you'll send the next generation of CS grads!  I'm in full
agreement with Harlan Mills here - we definitely need better tools, but
interactive debuggers are not in this class.

Mike Lutz
-- 
Mike Lutz	Rochester Institute of Technology, Rochester NY
UUCP:		{allegra,seismo}!rochester!ritcv!mjl
CSNET:		mjl%rit@csnet-relay.ARPA

karenc@amadeus.TEK.COM (Karen Cate;6291502;92-734;LP=A;60kC) (03/29/88)

    At this point in the discussion, I think I'll add my $.02 worth.  This
    discussion has sort of meandered to an educational sidetrack, but so
    many educators read this group, that I wanted to keep it going here.
    After all, you don't HAVE to read it...

    I have now been out of college for 1 year.  I graduated in CS from
    Oregon State University - whose CS dept was in a constant state of 
    flux the entire time I was there.  (No flames, please, that was only
    an opinion -- I think it's better now.)  Anyway, there are some out-
    standing individuals there who had some good ideas.  Here is a list
    of things I felt helped me the most:

    1.  Internships:  First and foremost.  I wish everyone could have the
	wonderful and varied experiences I had.  90% of what was presented
	to me in class would have been useless (misunderstood) if I hadn't
	already been in the "real world" -- at least the world I wanted to
	work in.  I'm not kidding here.  Never in school did I do anything
	vast enough to really justify real design work (Warnier Orr diagrams,
	or other design documentation techniques).  Since I had already 
	done a project that these would have been a tremendous help, I 
	understood it.

	A reasonable alternative:  We had an "Applications Programming"
	class.  It was a two term sequence in which the students solved
	a real world problem for someone.  The nature of the class changed
	from term to term, but because it was two entire quarters devoted
	to one programming project, it could be large and thorough.

    2.  One teacher had us write a program and hand it in.  He then randomly
	distributed them back to the class.  We then had to add/modify this
	other students' program.  This was the second CS class we took, so
	we:  a) learned a whole lot, and b) none of ours was good enough that 
	we took offence at the comments of our peers (as a general rule).
	There was not one complaint about requiring comments after that.
	It also taught us the difference between helpful comments and the
	stuff you put in to please the TA.

    3.  Someone has already mentioned modifying an existing piece of code.
	This is a wonderful technique.  Especially with a language like
	COBOL, and especially if the students already know another language.
	After they've dealt with a well written program.  Give them a 
	poorly written one without comments.  [My second internship was to 
	modify (re-write) a program that was written in basic by a non-
	programmer EE (I don't mean to say that EE's can't program, just that
	this individual was not particularly adept).  Then it was ported 
	three times through three different basics.  Gads what a nightmare!]

    4.  Try being a grader.  I spent many long nights grading lousy COBOL
	code.  It taught me a LOT.  I feel kind-of sorry for whoever 
	hired some of those students, they would have to do a lot of re-
	training.  It made my experiences all the more meaningful.

    
    I have some other miscellaneous comments:

    - We changed computers/OS's virtually every class.  This was good and
      bad.  Bad:  The teachers were also changing often, and knew nothing 
      about the machines we were working on (They had a vax they used...).
      Whatever documentation came with <pick-yer-box> was not available
      for anyone to use.  We spent many precious hours fighting syntax
      problems.  Good:  We graduated with a diverse experience base.  We
      may not have known a lot about any individual, but we knew enough
      to get ourselves in trouble.  Give us a manual and we could be
      dangerous!

    - I strongly feel that there should be a "program" at any given school.
      Instead of having a bunch of classes, some of which are required.
      There should be a continuous thread of classes where the curriculum
      is set for the whole four years.  Hopefully, you should not have to
      fight to get into these.  No, they shouldn't all be taught by the
      same instructor, but SOME projects should be the same, and each
      student should be at about the same place at the same time.  Then
      you could pick up a program that was written a couple of months 
      ago, etc.  The theory can be developed in stages, instead of all
      in your junior or senior year.  Then students could customize their
      programs with their choice of electives.  I could write pages on 
      how I would do it...  But, then again, what do I know?


    Ok.  I'll give up now.  Remember, this is all my opinion, and I'm 
    not sure that I claim it.  Don't blame Tek or OSU for any of this.

    Karen Cate
    tektronix!amadeus!karenc -OR- karenc@amadeus.LA.TEK.COM

daveb@geac.UUCP (David Collier-Brown) (03/29/88)

  The University of Toronto does/did a course on software
engineering where teams of students add features to each other's
programs, which they have to buy (using marks from a previous
assignment for dollars, of course)
 --dave (I went to UofW, fortunatly) c-b

jetzer@studsys.mu.edu (jetzer) (03/29/88)

In article <1232@cos.com>, smith@cos.com (Steve Smith) writes:
> In article <312@uwslh.UUCP> lishka@uwslh.UUCP (Christopher Lishka) writes:
> 
> >     Maybe there should be a course on this sort of thing.  I think a
> >mandatory course titled something like "Program Writing" should be
> >offered (at least at this University) where issues such as programming
> >environments and project management should be discussed.  At very
> >least it could give the prospective CS undergraduate major a set of
> >"rules" or "guidelines" to go about organizing and writing a general
> >program.  This course could be a 2nd or 3rd course, after a standard
> >language or two has been taught, so that something well known like
> >Pascal, Scheme, or whatever can be assumed to be already known, in
> >order to focus on program writing styles independent of any language.
> 
> 
> It sounds like a great idea to me.  Doing it properly may be a problem,
> however.  Two of the main characteristics of commercial programs are (1)
> they tend to be big, worked on by a group rather than by one person, and
> (2) they are designed to last a long time, with upgrades along the way.
> This type of environment is *very* difficult to simulate.
> 

Marquette University offers a course much like the one discussed above.  It's
a one semester, one credit class that compsci majors take right after
Intro to Structured Programming in Pascal.

Each semester a 'typical real-world' program is selected; the semester that
I took the course, it was to keep track of a database of magazine addresses
and expiration dates.  My (heavily commented) source code was about 2400
lines long; this may or may not seem long to professional programmers, but
it's a far cry from the < 200 line programs that are typically assigned in
the intro to pascal course.

Emphasis is placed on making sure the program is easy to maintain and
program modularity.  (Even to day I pull out certain procedures from this
program for other programs I write for other classes.)

The programming schedule was broken down into several 'benchmarks,' at which
time our program was supposed to be able to do a certain set of tasks.  The
next benchmark required another set of tasks.  This more or less simulated
maintenance.  It was, however, required that the project was the effort of
only one student.

As far as 'programming environments' (I assume development environment) are
concerned, I found that my humble Apple //e far and away blew out any
online editor available (but then, I had to use these editors over a 1200
baud modem).  I also found out that it takes a l*o*n*g time to up/download
a 90K source code.
-- 
Mike Jetzer
"If you can't be right, be forceful"
uwvax!uwmcsd1!marque!studsys!jetzer

friedl@vsi.UUCP (Stephen J. Friedl) (03/30/88)

In article <3326@zeus.TEK.COM>, karenc@amadeus.TEK.COM (Karen Cate) writes:

>     2.  One teacher had us write a program and hand it in.  He then randomly
> 	distributed them back to the class.  We then had to add/modify this
> 	other students' program.  This was the second CS class we took, so
> 	we:  a) learned a whole lot, and b) none of ours was good enough that 
> 	we took offence at the comments of our peers (as a general rule).
> 	There was not one complaint about requiring comments after that.
> 	It also taught us the difference between helpful comments and the
> 	stuff you put in to please the TA.

What a great idea!  How many times have you heard (or said!) in
school "Yea, I'm done with the program, now I have to put in the
comments".  Even after almost three years of heavy commercial
development I am still learning how to put in good documentation
that *means* something to a maintainer (i.e., me) a year down the
road.  Students need to learn what the word "maintenance" means...

The rest of Karen's comments are equally good as well.

-- 
Steve Friedl           V-Systems, Inc.            *Hi Mom*
friedl@vsi.com {uunet,ihnp4}!vsi.com!friedl attmail!friedl

jwg1@bunny.UUCP (James W. Gish) (03/31/88)

There have been a number of comments indicating that you can't get the
experience in school that you can get in industry doing large scale
system development.  I agree.  However, a large part of this has to do
with the traditional mode of thinking about how courses are
structured, i.e. one or two self contained semesters centered around
closely related topics.  If you break out of this traditional
structure and choose a large complex system that is continually
evolving as the focus of the design, programming, maintenance, project
management, enhancement, testing, prototyping... assignments over a
four year period you could better address some of the concerns about
getting a feel for realistic system development.  You could still have
one or two semester self contained courses, but the projects could
revolve around this large system.  Naturally, it would be hard to
manage, but isn't that the point?  It also would "never be done"
(another characteristic of many/most real software products).  Of
course, subsystems would get done.  I can see lots of opportunity here
for addressing the concerns raised in this discussion group.

Possible projects:
   OS, DBMS, programming environments (CASE, rapid prototyping,
visual,...), object management systems, ... 


   



-- 
Jim Gish
GTE Laboratories, Inc., Waltham, MA
CSNET: jwg1@gte-labs    UUCP:  ..!harvard!bunny!jwg1

chris@metavax.UUCP (Chris Collins ) (03/31/88)

In article <87@studsys.mu.edu> jetzer@studsys.mu.edu (jetzer) writes:
>                       My (heavily commented) source code was about 2400
>lines long; this may or may not seem long to professional programmers, but
>it's a far cry from the < 200 line programs that are typically assigned in
>the intro to pascal course.
   
>Mike Jetzer
>uwvax!uwmcsd1!marque!studsys!jetzer

This class sounds like a good start, but it must a) increase the complexity
of the software to approximately 10,000 lines, and b) should be increased to
more than 1 credit hour accordingly.
 
It is my experience that a programmer only begins to appreciate comments, 
design, modularity, etc. when the software he is working on exceeds the
amount of lines of code he could mentally assimilate.  For me, and for 
others I have discussed such things with, this is about 10,000 lines.  The
language doesn't matter too much for this limit.

The increase in credit for such a course is for 2 reasons.  First, to cover
the increased work in handling 10,000 line programs.  Secondly, at the U
of Michigan, where I attended, one credit courses were not looked upon
by students as ""real"" classes.  This may not be true at other institutions
of learning.

    ------ 
   /MM/\MM\          META SYSTEMS, LTD.
  /MM/  \MM\         315 E. Eisenhower
 /MM/ /\ \MM\            Suite 200
 ===  ==  ===       Ann Arbor, MI  48108
 \SS\ \/ /SS/
  \SS\  /SS/        Chris Collins, Senior Programmer
   \SS\/SS/
    ------          My colleagues chastised me for not saying these aren't
		    my company's opinions. Companies don't have opinions.

msir_ltd@ur-tut (Mark Sirota) (03/31/88)

It would seem that the gist of this conversation is that college CS
departments aren't teaching proper programming skills.  I have two major
points to make on this:

(1) As has been pointed out by several people, you can't just "teach"
    programming skills; experience is really the only tutor here.  (You can
    teach *techniques*, but I claim that they're not learned until they're
    used.  You can tell a student what to use, but he/she hasn't learned it
    until he/she has done so.)

    To get around this, people have suggested writing 10,000 line
    programs, or continually working on the same program for 4 years.
    This is fine; it closely mirrors what actually happens out there in
    the programming world.  However, I really don't think it will ever
    happen in colleges; these things are really too hard to manage.
    
    In the real programming world, you spend 8 hours a day (more or less)
    working on distinct projects, with a goal and deadline in mind,
    frequently with other people, taking care to make this well-done
    enough for other people to work on once you're done with this job.

    In school, you write a program to cater to the audience that will read
    it, much as you write an English paper.  In this case, the audience is
    usually just the grader.  You can usually assume the grader knows the
    language you're using, so you can skip those silly comments, but in
    the real world this may not be the case.  (Note that this is just one
    simple example; differences like this abound.)

    Another example is the introductory programming course - You can tell
    people what a linked list is, but they're never gonna understand until
    they use one.

    What I'm getting at is that work experience is really the only way to
    properly teach programming skills; classes can only approximate it.

(2) Computer Science departments *shouldn't* be teaching programming
    skills anyway; leave that to the Software Engineering department.
    Other disciplines haev separate Science and Engineering departments,
    like Physics/Mechanical Engineering, Chemistry/Chemical Engineering,
    and the like.  Why not have Computer Science/Software Engineering?
    (Hardware Engineering exists too; it's usually called Computer
    Engineering, which I don't think is really very fair.)

Here at the University of Rochester, the CS department churns out some
damn good computer scientists.  Most of them can't program to save their
lives, and they often hate the programming courses in the curriculum.  It
is important to recognize the difference between a software engineer (some
call it a "programmer" and a computer scientist.
-- 

Mark Sirota
 msir_ltd%tut.cc.rochester.edu@cs.rochester.edu (rochester!ur-tut!msir_ltd)

shebs%defun.utah.edu.uucp@utah-cs.UUCP (Stanley T. Shebs) (03/31/88)

In article <5775@bunny.UUCP> jwg1@bunny.UUCP (James W. Gish) writes:

>[...]  If you break out of this traditional
>structure and choose a large complex system that is continually
>evolving as the focus of the design, programming, maintenance, project
>management, enhancement, testing, prototyping... assignments over a
>four year period you could better address some of the concerns about
>getting a feel for realistic system development. [...]

This is actually rather common, at least on an informal basis.  Good
students (mostly grads, but some undergrads) will get involved in some
major ongoing research project, at the level of maintenance/enhancement.
The experience can be extremely realistic, depending on the project!

Problems are several: employers may not consider such activities to be
"real experience", students not participating will be handicapped later
on, perhaps without realizing it, time can be consumed by clerical work
that would have been better spent on classes, and so forth.  It's not
clear that a formal mechanism for projects would be any improvement, though.

							stan shebs
							shebs@cs.utah.edu

hollombe@ttidca.TTI.COM (The Polymath) (04/02/88)

Just to add another aspect to the discussion of education vs. real world
experience, the following ad appears in the positions offered section of
the Communications of the ACM, March 1988, page A-36 (spelling, grammar
and punctuation are theirs, elipses are mine):

                         INDUSTRIAL POSTIONS FOR
			 COMPUTER PROFESSIONALS

		  Positions nationally.  Fees paid by em-
		  ployers.  U.S. citizens or permanent res-
		  idents.  PhD or minimum three years,          <== Note
		  experience.  Call or write ... [etc.]

Of course, that's just one recruiter's opinion.  Makes you wonder, though.
My experience has been that CS degrees and CS competence are not closely
related.

I agree with the need to bring more of the real world into the class room.
I've had to clean up too many messes that would probably have received a
passing grade because they worked (until a boundary condition, or
something else unexpected, tripped them up).

I'm cross-posting to misc.jobs.misc because the degree question often
comes up there.  Please edit the Newsgroups line appropriately before
following up.


-- 
The Polymath (aka: Jerry Hollombe, hollombe@TTI.COM)   Illegitimati Nil
Citicorp(+)TTI                                           Carborundum
3100 Ocean Park Blvd.   (213) 452-9191, x2483
Santa Monica, CA  90405 {csun|philabs|psivax|trwrb}!ttidca!hollombe

shebs%defun.utah.edu.uucp@utah-cs.UUCP (Stanley T. Shebs) (04/03/88)

In article <2218@ttidca.TTI.COM> hollombe@ttidcb.tti.com (The Polymath) writes:

>		  Positions nationally.  Fees paid by em-
>		  ployers.  U.S. citizens or permanent res-
>		  idents.  PhD or minimum three years,          <== Note
>		  experience.  Call or write ... [etc.]
>
>Of course, that's just one recruiter's opinion.  Makes you wonder, though.

Based on my recent experience in jobhunting, equating a PhD with however
many years it took you to get it is quite common.  Based on observation of
PhDs in industry, if you take a job where they think that way, you will
deserve whatever you get, which generally means almost zero creative work.
The main use of your degree will be to pad proposals ("we're going to have
45 PhD researchers working on this project, if you give us the bucks").
Personally, I've sweated over my PhD too much to have it counted the same
as warming a chair for five years.

>My experience has been that CS degrees and CS competence are not closely
>related.

s/CS//g - this isn't some special defect of CS degrees.  A while back I read
some flame in an IEEE rag about how EE grads don't know the right things, and
my dad the non-degreed (not even BS) research chemist has told some amusing
stories about the ignorance of new chemistry PhDs.  A degree is more like
some minimum requirement than a glowing recommendation.  If you can't manage
to get a BS these days, you've got to be really defective somehow, like maybe
you can't tear yourself away from a terminal long enough to find out that
bubble sorts aren't the only choice!  (flames launched, sir - tracking...)

							stan shebs
							shebs@cs.utah.edu

g-rh@cca.CCA.COM (Richard Harter) (04/04/88)

In article <5388@utah-cs.UUCP> shebs%defun.utah.edu.UUCP@utah-cs.UUCP (Stanley T. Shebs) writes:
>In article <2218@ttidca.TTI.COM> hollombe@ttidcb.tti.com (The Polymath) writes:

		  Positions nationally.  Fees paid by em-
		  ployers.  U.S. citizens or permanent res-
		  idents.  PhD or minimum three years,          <== Note
		  experience.  Call or write ... [etc.]

This is clearly a typo -- it should read "PhD and three years experience
or no PhD".  :-)
-- 

In the fields of Hell where the grass grows high
Are the graves of dreams allowed to die.
	Richard Harter, SMDS  Inc.

stank@orca.TEK.COM (Stan Kalinowski) (04/04/88)

In article <5388@utah-cs.UUCP> shebs%defun.utah.edu.UUCP@utah-cs.UUCP (Stanley T. Shebs) writes:

>Based on my recent experience in jobhunting, equating a PhD with however
>many years it took you to get it is quite common.

I think industry equates the time to earn a degree with equivilent
time in the field because it is looking for results.  Having a PhD
does not necessarily guarantee results, having a good track record of
results usually does.  Industry tends to lay blame on our educational
system.  The hiring policy makers say that PhD's with no industry
experience have difficulty making the transition from theoretical
science to applied science and that PhD's don't know how to translate
ideas into dollars.  The following observation might illustrate what
I'm getting at:

A couple of years ago I read an article in the Sunday New York Times
that said PhD's in Artificial Intelligence graduating from a leading
school could earn something like $70,000.  The article said that the
starting salary was so inflated because of high demand for, and a
small supply of Ai PhD's.  I take this to mean that industry has spent
a great deal of money on developing AI expertise.  So far, I haven't
heard of any companies reaping an acceptable gain on their investment
in AI technology.  AI has been applied mostly to internal systems
development having only limited cost saving value.  The few comercial
products that use AI technology have met with only limited success.
Perhaps it's too soon to tell, but it seems that in these days of
"quick buck" business investment the AI PhD's have not been able to
convert their knowledge into bottom line bucks.

Who's to blame?  Industry says that the fault lies with the
educational system for not teachiing students how to apply technology
profitably.  Educational institutions blame industry for not providing
enough financial support for education, for not fostering creative
application of ideas, and for expecting too much from technology.

The only conclusion I can make from all this is: IF WE DON'T CHANGE
THE WAY WE ARE DEVELOPING AND MARKETING TECHNOLOGY WE WILL ALL LOSE!

<< DISCLAIMER >>

The above opinions are my own, and are not necessarily representative
of the company I work for (Tektronix).  Please don't FLAME me if you
diasgree with my analysis.  I have merely stated my current opinion
and I am open to calm, open-minded, discussion of these issues.  I can
even be persuaded to change my opinions when given a resonable counter
argument.
-- 
US Mail: Stan Kalinowski, Tektronix, Inc.	
         Information Display Group, Graphics Workstations Division
         PO Box 1000, MS 61-028, Wilsonville OR 97070   Phone:(503)-685-2458
uucp:    {ucbvax,decvax,ihnp4,allegra,uw-beaver}!tektronix!orca!stank

jmm@thoth20.berkeley.edu (04/04/88)

(Disclaimer:  I'm not any variety of engineering major, nor have I much
experience in the world of business.)

I always thought that universities were supposed to teach theory more than
practice.  There are going to be lots of different types of systems out there
in the 'real world,' and if your educational background only prepares you
to use one of them then it doesn't do you much good.  If your education
teaches you the general way that systems are built, why they're built that
way, and leads you to think about new ways they could be designed, 
then your chosen place
of employment can teach you the specific way it's implemented.

Universities should not be expected to teach people the uses of any particular
set of tools.  That's what vocational schools are for.

/ James Moore		/    	|  jmm@bartleby.berkeley.edu
/ 			/	|--------------------------------------------|
/ Ma ta Gaeilge agut,	/	|   Nil aon speis ag Ollscoile na	     |
/ scriobh i!		/	|   California im bharulacha fein.           |

shebs%defun.utah.edu.uucp@utah-cs.UUCP (Stanley T. Shebs) (04/04/88)

In article <2524@orca.TEK.COM> stank@orca.UUCP (Stan Kalinowski) writes:

>I think industry equates the time to earn a degree with equivilent
>time in the field because it is looking for results.  Having a PhD
>does not necessarily guarantee results, having a good track record of
>results usually does.  Industry tends to lay blame on our educational
>system.  The hiring policy makers say that PhD's with no industry
>experience have difficulty making the transition from theoretical
>science to applied science and that PhD's don't know how to translate
>ideas into dollars.

What's the definition of "results"?  Published papers or software profits?

There are at least two assumptions here: one, that PhDs do "theoretical
science", and that a PhD is necessary to do "applied science".  Of course,
people have differing ideas of theoretical vs practical - I've been
accused of being "too theoretical" and "too practical" at the same time
(but, fortunately, not by the same person :-) ).  As I said previously,
there is a habit of companies specifying "PhD" when they really want a
good person with a master's.  So let me ask this: does anybody actually
know why companies specify PhDs when they have no intention of letting
the employees do either basic or applied research?  Or is it that the
definition of "applied research" covers anything more creative than buying
a commercial software package?

>The only conclusion I can make from all this is: IF WE DON'T CHANGE
>THE WAY WE ARE DEVELOPING AND MARKETING TECHNOLOGY WE WILL ALL LOSE!

I don't understand who is going to lose what.  Technology transfer is
already incredibly efficient, so much so that many senior people in the
field worry about loss of academic freedom because of companies insisting
on funding only short-term work with clearly-defined goals.

							stan shebs
							shebs@cs.utah.edu

ee4011ab@ariel.unm.edu (Mark P. Martin) (04/05/88)

In article <8295@agate.BERKELEY.EDU> jmm@thoth20.berkeley.edu.UUCP () writes:
>I always thought that universities were supposed to teach theory more than
>practice.  

They do, greatly in  error and to the disadvantage of the student.  Employers
are not looking for people with extroardinary skills in practicing theory,
but for people with extensive experience in a multitude of systems,
languages, and environments.  NO, strike that!  They are looking for
experience on *their particular system*.  Presumeably, this experience has
been acquired elsewhere, as the employer finds it economically advantageous
to hire capable people, rather than train new people.  

Some college programs seem to be realizing the fallacy of teaching extensive
theory with no practical application, but in general the effort put forth
is not effective.  Consider the course in which the senior project is to
develop and market a large software project:  the primary objective in the
course was to satisfy the instructor's emotional need for the use of
non-sexist pronouns.  :-)  The secondary objective was to produce appealing
packaging (never mind what went in) for the project.  With so much emphasis
on satisfying the instructors requirements, the true needs of the paying
client were seen as "soft requirements."  Not that packageing and user
interface are unimportant, but I believe that employers looking for engineers
would be more interested in academic work writing UNIX device drivers than
poetic prose with little technical content.

>Universities should not be expected to teach people the uses of any particular >set of tools.  That's what vocational schools are for.

I have yet to hear about a vocational school that teaches all the aspects
of the internal design, programming and operation of computers, and still
maintains a quality reputation.  Vocational schools are not recognizeable
degree granting institutions in such fields as engineering.  And
engineering is more ability to apply knowledge than the straightforward use
of tools and techniques.  The word "engineer" derives from "engenious man"
(no sexism flames please, I have a reference).


*-----------------------------------------------------------------------------*
|  "People can be divided into three categories: |   Mark P. Martin           |
|  Those who make things happen,                 |   B.S.Comp.E - UNM         |
|  Those who watch things happen...              |   ee4011ab@ariel.unm.edu   |
|  and those who wonder what happened."          |                            |
*-----------------------------------------------------------------------------*

cramer@optilink.UUCP (Clayton Cramer) (04/05/88)

> In article <2218@ttidca.TTI.COM> hollombe@ttidcb.tti.com (The Polymath) writes:
> 
> >		  Positions nationally.  Fees paid by em-
> >		  ployers.  U.S. citizens or permanent res-
> >		  idents.  PhD or minimum three years,          <== Note
> >		  experience.  Call or write ... [etc.]
> >
> >Of course, that's just one recruiter's opinion.  Makes you wonder, though.
> 
> Based on my recent experience in jobhunting, equating a PhD with however
> many years it took you to get it is quite common.  Based on observation of

I can remember some years back seeing an ad in the LA Times that said,
"Minimum five years experience.  Will consider two years graduate work
equivalent to six months paid experience."  And from my own days as a
headhunter, a quote from a woman who was data processing manager for a
major cosmetics manufacturer, "Don't send me anyone with a M.S.  They
don't know how to DO anything."

Clayton E. Cramer

klee@daisy.UUCP (Ken Lee) (04/06/88)

Graduate degrees can be very valuable.  Sometimes they're worthless.  It
all depends on the position.  A research lab or university may require a
PhD for certain positions, perhaps under the assumption that the
education you received will add to your performance.  Hacker houses may
not care if you have any degree.

It's up to you to choose a job that matches your career goals.  You may
also want to consider a degree that matches.

Ken
-- 
New simplified tax form:
	Line 1:  how much money did you make?
	Line 2:  send it in.

rhj@wdl1.UUCP (Bob Jones) (04/06/88)

Some observations on commented code:

> What a great idea!  How many times have you heard (or said!) in
> school "Yea, I'm done with the program, now I have to put in the
> comments".  Even after almost three years of heavy commercial
> development I am still learning how to put in good documentation
> that *means* something to a maintainer (i.e., me) a year down the
> road.  Students need to learn what the word "maintenance" means...
> 
I have been writing code for over twenty years, now and couldn't agree
more with the above sentiments.  My basic rule of thumb is:

	I always maintain a healthy paranoia of having to maintain 
	my own code. 

Healthy comments make this paranoia managable.

In 1978 and 1979, I wrote Tandem's DDL compiler.  In 1986 I returned
to Tandem as a consultant to help enhance the DDL compiler.  The 
comments I wrote in '79-'79 made it possible for me to relearn the
code very easily.  And the places I had failed to comment came back
to haunt me.

The premise that one will put comments in later is in a class with
comments like "the check is in the mail".  Believers in this premise
most likely still believe in the tooth fairy. 

Adding comments as you go is the only way to fly. It may require a
small amount of additional time up front, but the payoff is huge down
the road.  Poorly commented code is, in my personal opinion, one of 
the key indicators of an immature and impatient programmer.

Bob Jones
Ford Aerospace

msir_ltd@ur-tut (Mark Sirota) (04/06/88)

In article <3850007@wdl1.UUCP> rhj@wdl1.UUCP (Bob Jones) writes:
> The premise that one will put comments in later is in a class with
> comments like "the check is in the mail".  Believers in this premise most
> likely still believe in the tooth fairy. 
>
> Adding comments as you go is the only way to fly. It may require a small
> amount of additional time up front, but the payoff is huge down the road.
> Poorly commented code is, in my personal opinion, one of the key
> indicators of an immature and impatient programmer.

Agreed, but allow me to break this up a little further.

I *never* add in-line comments until I'm done writing and testing the
algorithm or procedure in question.  There is such a thing as
over-commenting, and the threshold is much lower when the code is
incomplete.  Sometimes comments just get in the way and make the code
harder to read, so I generally prefer a "how" and "why" (as opposed to
"what") comment at the top of a section of code, with nothing inside.
"what" comments can be added later, as appropriate, to clarify complicated
code for the future.

So I think it's a mistake to make a blanket claim that adding comments
later reflects an immature programmer; sometimes it simply makes more
sense to do it that way.
-- 

Mark Sirota
 msir_ltd%tut.cc.rochester.edu@cs.rochester.edu (rochester!ur-tut!msir_ltd)

dalamb@qucis.UUCP (David Lamb) (04/07/88)

This discussion has wandered into CompSci/SoftEng differences, and
theory versus practice at universities.  Last year I finished writing a
SoftEng textbook (apologies for implied commercial message), so had to
do some thinking about these issues.  All these "statements" are really
opinions.

1. Most undergraduate programs don't have a serious distinction between
   CS and SE;  if we reorganised the curricula to make a distinction, there'd
   be a lot fewer people in CS programs.
2. A University is supposed to put more emphasis on education than on training.
   Nobody can draw a sharp boundary between the two, but there are differences:
   training gives you more specific and thorough understanding of something
   particular and concrete, education gives you mental tools to understand,
   learn, and adapt.
3. The engineering disciplines teach you how to apply principles to solve
   problems, using existing technology mainly to have a means to talk about
   the principles.  That's what makes an engineer different from a technician;
   the technician typically learns only a particular technology, and needs
   retraining every few years.  A job interviewer that puts a lot of weight
   on to want experience with a particular collection of tools is asking for
   a technician, not a University grad.
4. There is nothing so practical as a good theory - one that gives you a
   framework for understanding and solving your problems.  The problem with
   too many "theoretical" courses isn't that they are theory, but that they
   don't connect the theory very well with practice.
5. A Ph.D. is only evidence of research ability in a specialised field.  From
   some institutions you are also made to learn a lot about a much broader
   field first, as part of the comprehensives.  A lot of "Advanced Development"
   jobs asking for Ph.D.'s probably only need the broad (but reasonably deep)
   background - which plenty of people without Ph.D's can develop on their own.

						David Alex Lamb
						Queen's University
						Kingston, Ont, K7L3N6

al@gtx.com (0732) (04/07/88)

In article <2000@optilink.UUCP> cramer@optilink.UUCP (Clayton Cramer) writes:
->
->I can remember some years back seeing an ad in the LA Times that said,
->"Minimum five years experience.  Will consider two years graduate work
->equivalent to six months paid experience."  And from my own days as a
->headhunter, a quote from a woman who was data processing manager for a
->major cosmetics manufacturer, "Don't send me anyone with a M.S.  They
->don't know how to DO anything."
->

One of the reasons for getting an advanced degree is so you don't have to
work in the data processing division of a large cosmetics manufacturer.

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 ( Alan Filipski, GTX Corp, 8836 N. 23rd Avenue, Phoenix, Arizona 85021, USA )
 ( {ihnp4,cbosgd,decvax,hplabs,amdahl,nsc}!sun!sunburn!gtx!al  (602)870-1696 )
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

doug@edson.UUCP (Doug Konrad) (04/07/88)

In article <1664@ur-tut.UUCP>, msir_ltd@ur-tut (Mark Sirota) writes:
> In article <3850007@wdl1.UUCP> rhj@wdl1.UUCP (Bob Jones) writes:
> > The premise that one will put comments in later is in a class with
> > comments like "the check is in the mail".  Believers in this premise most
> > likely still believe in the tooth fairy. 
> 
> Agreed, but allow me to break this up a little further.
> 
> I *never* add in-line comments until I'm done writing and testing the
> algorithm or procedure in question.  There is such a thing as
> over-commenting, and the threshold is much lower when the code is
> incomplete.  Sometimes comments just get in the way and make the code
> harder to read, so I generally prefer a "how" and "why" (as opposed to
> "what") comment at the top of a section of code, with nothing inside.
> "what" comments can be added later, as appropriate, to clarify complicated
> code for the future.

The problem with Mark's technique arises in situations where there is
significant deadline pressure... Do you really think that adequate time will
be spent commenting code when the boss is breathing down your neck? Even if
the boss grudgingly agrees to allow you the time, how many programmers will
resist the temptation to cut corners (and keep their job) when the boss drops
by their cubicle and says, "Just about done? We've got to finish project 745 -
project 746 is a rush..."

Suggestions that one needs a new boss are not particularily constructive - any
organization must watch its efficiency closely if it is to succeed. Any boss
will have to be careful that his department wastes little time. The difficulty
is that so many people have trouble seeing the work that occurs after a
product seems to work according to spec as crucial as work that occurs before.

So... my suggestion is that you comment while you code. Then, when it runs, its
done.

Doug

doug@edson.UUCP (Doug Konrad) (04/08/88)

In article <2705@charon.unm.edu>, ee4011ab@ariel.unm.edu (Mark P. Martin) writes:
> In article <8295@agate.BERKELEY.EDU> jmm@thoth20.berkeley.edu.UUCP () writes:
> >I always thought that universities were supposed to teach theory more than
> >practice.  
> 
> They do, greatly in  error and to the disadvantage of the student.  Employers

Compare this statement with the ones below.

> are not looking for people with extroardinary skills in practicing theory,
> but for people with extensive experience in a multitude of systems,
> languages, and environments.  NO, strike that!  They are looking for
> experience on *their particular system*.  Presumeably, this experience has
> been acquired elsewhere, as the employer finds it economically advantageous
> to hire capable people, rather than train new people.  

In other words, employers want people with skills in the straightforward use
of tools and techniques.

> I have yet to hear about a vocational school that teaches all the aspects
> of the internal design, programming and operation of computers, and still
> maintains a quality reputation.

There is a reason for that. Such is the domain of an institution which
teaches theory. If you try to design something, and don't understand the
underlying theory governing that something, you aren't an engineer, you're
a parrot.

>                                  Vocational schools are not recognizeable
> degree granting institutions in such fields as engineering.  And
> engineering is more ability to apply knowledge than the straightforward use
> of tools and techniques.  The word "engineer" derives from "engenious man"
> (no sexism flames please, I have a reference).

Here you come around and agree with me. (How can we have a good argument if
you insist on agreeing with me?) However, this wasn't what you said in your
first paragraph.

I am reminded of the statement of a character from the TV program "Paper
Chase". The show centred around a law school. "You will teach yourselves the
law. I will teach you how to think." A bit pretentious, but it captures the
role of a university. When I had finished my undergraduate degree, I had
learnt how to design microprocessor hardware, and how to think like an
engineer. The latter made a lot more money for my employer than the former.
Even if he didn't think so.

By the way, I am taking a broad view of theory. I mean much more than those
interminable classroom lectures on quicksort. For software engineering, it
includes examination of large systems. And it includes looking at challenges
where the theory is incomplete.

Doug

rhj@wdl1.UUCP (Bob Jones) (04/08/88)

Responding to comments by:
	/ msir_ltd@ur-tut (Mark Sirota) / 11:03 pm  Apr  5, 1988 /

> I *never* add in-line comments until I'm done writing and testing the
> algorithm or procedure in question.  There is such a thing as
> over-commenting, and the threshold is much lower when the code is
> incomplete.  Sometimes comments just get in the way and make the code
> harder to read, so I generally prefer a "how" and "why" (as opposed to
> "what") comment at the top of a section of code, with nothing inside.
> "what" comments can be added later, as appropriate, to clarify complicated
> code for the future.
> 
> So I think it's a mistake to make a blanket claim that adding comments
> later reflects an immature programmer; sometimes it simply makes more
> sense to do it that way.

Let me categorize comments into four groups:

	1) Descriptive comments on the entire module
	2) Descriptive comments at the begining of each function
	3) Block comments at the begining of significant sections
	   of logic
	4) Line comments describing a variable or line of code

I would agree with Mark's observation about the value of putting
some  comments in after the algorithm is completed, but I would
insist that the function header and module header comments should
always preceed the writing of the code itself.  This doesn't
necessarily mean that you write these comments only once and
never update them; however, if you don't know what a function
or a module (i.e. a collection of related functions) is going
to do before you start writing the code, then you really have
not thought the problem through well enough to start coding it.

I find that the very act of writing the comments forces me to
think the problem through; and I often find that while I am
writing these function level comments, I see a design problem 
that I can still correct easily.  Correcting it after it has
been coded is much harder.

The block logic comments can be put in either before or after
you have coded the logic without much impact on the end result.
Line level comments are not of much use, except as used to
describe variables or standard definitions.


I must stand by my earlier assertion: Comments (in the large)
should be written before the code.  They serve to assure that
you know and understand what you are coding.  If you can't 
describe it in plain English, you probably can't code it in
a reliable and maintainable fashion either.

Bob Jones
Ford Aerospace

cdshaw@alberta.UUCP (Chris Shaw) (04/08/88)

In article <3850007@wdl1.UUCP> rhj@wdl1.UUCP (Bob Jones) writes:
>My basic rule of thumb is:
>
>	I always maintain a healthy paranoia of having to maintain 
>	my own code. 
>
>Healthy comments make this paranoia manageable.
>
>Bob Jones
>Ford Aerospace

Very true. Actually, one of my more satisfying recent software writing
experiences came last year while I was consulting. The firm I was consulted
by had a very poorly documented piece of hardware that needed a real-time
software driver. There followed a very frustrating round of interviews
with somewhat Un-professional engineers regarding the true features of
the botch I was to write software for. This process was eventually completed,
and I spent the next while writing the design document.

I then spent what seemed like three minutes coding it up. I even managed
to discover an obscure IO bug, which I spent an inordinate amount of time
working around. It's one of those interesting things. Documentation is easy
throw away, but code is hard (psychologically) to pitch. If you settle
all the design issues with text only, you will probably end up with a better
design. I imagine it's because text is a lot easier to read (and therefore
critique) than is code.

The major point being that with a solid external document, maintenance is
likely to be very straightforward. Of course, my motivation for thoroughness
was a desire to never hear from these people again, unless they had another
contract for me. As for comments, I don't recall. These people had a very
nice standard for documenting variables and so on, so I followed that fairly
carefully.
-- 
Chris Shaw    cdshaw@alberta.UUCP (via watmath, ihnp4 or ubc-vision)
University of Alberta
CatchPhrase: Bogus as HELL !

friedl@vsi.UUCP (Stephen J. Friedl) (04/08/88)

In article <3850007@wdl1.UUCP>, rhj@wdl1.UUCP (Bob Jones) writes:
> Adding comments as you go is the only way to fly. It may require a
> small amount of additional time up front, but the payoff is huge down
> the road.  Poorly commented code is, in my personal opinion, one of 
> the key indicators of an immature and impatient programmer.

Very good point.  I have found that writing function-header
comments *before* writing the described function helps in two
ways: (A) it insures that the comments go in and (B) it helps me
define *exactly* what the function does.  I describe aloud to an
imaginary officemate what the function does, then put that
description in the comment.  Many times I would need some
function but would have only a general idea what it was supposed
to do.  The documentation ahead of time helps me nail down those
important little details (resets the counter or not, closes the
file or not, increments the pointer or not, etc.).
-- 
Steve Friedl   V-Systems, Inc.   "Yes, I'm jeff@unh's brother"
friedl@vsi.com  {backbones}!vsi.com!friedl  attmail!vsi!friedl

pepper@dasys1.UUCP (Angelique Wahlstedt) (04/08/88)

In article <8295@agate.BERKELEY.EDU> jmm@thoth20.berkeley.edu.UUCP () writes:
>I always thought that universities were supposed to teach theory more than
>practice.  There are going to be lots of different types of systems out there
>in the 'real world,' and if your educational background only prepares you
>to use one of them then it doesn't do you much good.  If your education
>teaches you the general way that systems are built, why they're built that
>way, and leads you to think about new ways they could be designed, 
>then your chosen place
>of employment can teach you the specific way it's implemented.
>
>Universities should not be expected to teach people the uses of any particular
>set of tools.  That's what vocational schools are for.


Good point!

HOWEVER, sometimes I feel that half the stuff that computer science
programs in many schools teach is pretty irrelevant to the Real World.
For example, at Colorado State University, I'm taking CS-201 (Discrete
Structures) (simply cuz CSU told me to. :-) that covers all sorts of
things from binary trees to boolean algebra. Some of those, obviously,
have uses in the Real World, such as binary search trees. But, to this
day, I still can't figure out what applications some of the other things,
such as monoids and isomorphisms (if you don't know what they are, don't
ask ME :-) have in the real world. I'm also taking Symbolic Computing
(LISP and Prolog) which is fun, but I doubt that most of us in the class
would ever use either language in the Real World.

Some of the courses that I think should be required in college are Software
Engineering and Technical Writing (some colleges such as Rochester Institute
of Technology already require this). Another possibility could be Database
Concepts since so many jobs seem to involve databases.

-- 
Angeli "Ms. Pepper" Wahlstedt

UUCP: wahlsted@handel.colostate.edu  - or -  ...!hao!handel!wahlsted
      ...!dasys1!pepper (Big Electric Cat)

ee4011ab@ariel.unm.edu (Mark P. Martin) (04/08/88)

In article <121@edson.UUCP> doug@edson.UUCP (Doug Konrad) writes:
>In article <2705@charon.unm.edu>, ee4011ab@ariel.unm.edu (Mark P. Martin) writes:
>> In article <8295@agate.BERKELEY.EDU> jmm@thoth20.berkeley.edu.UUCP () writes:
>> >I always thought that universities were supposed to teach theory more than
>> >practice.  

	... deleted ...
>> engineering is more ability to apply knowledge than the straightforward use
>> of tools and techniques.  The word "engineer" derives from "engenious man"
>> (no sexism flames please, I have a reference).
>
>Here you come around and agree with me. (How can we have a good argument if
>you insist on agreeing with me?) However, this wasn't what you said in your
>first paragraph.

My original intention was in saying that there should be practical
application to accompany the teaching of theory, otherwise the theory will
have only academic value.  My earlier statements probably reflect my
somewhat jaded view if the neanderthal nature of our national job getting
system.  I have been scanning the ads searching for languages, systems and
other acronyms which match my background.  This is to say that what
employers appear to be looking for is not always the same as what they
need, and not even the same as what they will get.  And now I find at least one
individual who holds dear the same values I do which make engineering
valuable as a profession -- the desire and ability to solve problems.  I
thank you for bringing to light my ineffective presentation of our
profession.  Perhaps the lacking of this understanding in the universities
and job places indicates a vacancy which either one of us could somehow
correct, or at least use to advantage in seeking employment.

*-----------------------------------------------------------------------------*
|  "People can be divided into three categories: |   Mark P. Martin           |
|  Those who make things happen,                 |   B.S.Comp.E - UNM         |
|  Those who watch things happen...              |   ee4011ab@ariel.unm.edu   |
|  and those who wonder what happened."          |                            |
*-----------------------------------------------------------------------------*

klein%gravity@Sun.COM (Mike Klein) (04/09/88)

In article <3850008@wdl1.UUCP> rhj@wdl1.UUCP (Bob Jones) writes:
|I must stand by my earlier assertion: Comments (in the large)
|should be written before the code.  They serve to assure that
|you know and understand what you are coding.  If you can't 
|describe it in plain English, you probably can't code it in
|a reliable and maintainable fashion either.

This goes together perfectly with my own experiences.  If a module is
commented in plain English (typically with simple "verb-object" descriptive
pairs such as "initialize variables", or "allocate memory structures"),
then the writer has thought about what it is doing and has conceptualized
it well enough to express simply.  At this point, the writer understands
it, I understand it, and anyone else looking over it understands it.  That
means that any bugs, including the more pernicious ones such as logic
errors or oversights, are more easily found.  These comments should, as Bob
says, be done *before* the coding has been finished so that logic and
control flow has been thought out beforehand.
--
Mike Klein		klein@Sun.COM
Sun Microsystems, Inc.	{ucbvax,hplabs,ihnp4,seismo}!sun!klein
Mountain View, CA

geoff@desint.UUCP (Geoff Kuenning) (04/09/88)

I don't have a Ph.D. in windowing graphics;  in fact I don't have a Ph.D.
at all.  Ph.D. or not, I simply don't have the background to design a
major windowing system like X-Windows.  If I wanted to do so, I'd have
to hire somebody who *did* know, like perhaps a recent MIT Ph.D. grad.

On the other hand, those same friendly X-Windows folks recently released a
faster version of "make depend".  Only one teeny problem:  if you don't
have sources to cpp, the expression-evaluation routine (the one that handles
'#if <expression>' statements) reads, in its entirety:

	return (TRUE);

As has been said before, I'd rather have correct code than fast wrong code,
thanks anyway.

The moral:  if you have a "research-y" problem, get somebody with a
research background.  If you want professional code, though, hire
somebody with professional experience;  Ph.D. or not as appropriate.  The
average new Ph.D. graduate is a beginning programmer by professional
standards, just like the average new Bachelor's/Master's graduate.

(P.S.  Please don't get your hackles up, Bob;  it's just one of many
examples I could cite from many sources.  And yes, you'll be getting a
bug report on it.)
-- 
	Geoff Kuenning   geoff@ITcorp.com   {uunet,trwrb}!desint!geoff

peking@sfsup.UUCP (L.Perkins) (04/11/88)

In article <3763@dasys1.UUCP> pepper@dasys1.UUCP (Angelique Wahlstedt) writes:
>Some of the courses that I think should be required in college are Software
>Engineering and Technical Writing (some colleges such as Rochester Institute
>
>-- 

Yes, Yes, Yes.
However, the real world has great difficulty communicating the
necessity for good writing to faculty in Computer Science departments.
While employed at a company whose managerial problems (including LACK
of documentation of its products) was sending it down the drain, I was
simultaneously taking courses from two different instructors, both with
backgrounds in government and military systems, who said, in effect, that
documentation was unimportant and merely something that junior people
would have to put up with. Implication: as briefly as possible. Yet both
individuals were members of professional associations that identified
bad documentation as a key factor in the failure of HW and SW products
"making it" in the marketplace.



-- 

________________________________________________________________
attunix!peking 		    "The few, the proud, the red-haired"
---------------------------------------------------------------

hsd@uvacs.CS.VIRGINIA.EDU (Harry S. Delugach) (04/11/88)

In article <3850007@wdl1.UUCP> rhj@wdl1.UUCP (Bob Jones) writes:
>Some observations on commented code:
>
>Adding comments as you go is the only way to fly. It may require a
>small amount of additional time up front, but the payoff is huge down
>the road.  Poorly commented code is, in my personal opinion, one of 
>the key indicators of an immature and impatient programmer.

What about short-sighted, "bottom-line" oriented company management which
forbids you to "waste" time creating obviously non-functional comments,
particularly if the project is perceived as easy or a 
"one-shot deal". Later when the "one-shot" is revived or modified, 
your new boss wonders why in the world you didn't forsee that it would
be re-used. In such a case, it is often true that the real culprits
(former managers) never have to face their mistakes.
-- 
Harry S. Delugach   University of Virginia, Dept. of Computer Science
                    INTERNET: hsd@cs.virginia.edu
                    UUCP: ..!uunet!virginia!uvacs!hsd
                    BITNET: hsd2x@virginia

gcf@actnyc.UUCP (Gordon Fitch) (04/12/88)

In article <613@gtx.com> al@gtx.UUCP (Al Filipski) writes:
}In article <2000@optilink.UUCP> cramer@optilink.UUCP (Clayton Cramer) writes:
}->
}->I can remember some years back seeing an ad in the LA Times that said,
}->"Minimum five years experience.  Will consider two years graduate work
}->equivalent to six months paid experience."  And from my own days as a
}->headhunter, a quote from a woman who was data processing manager for a
}->major cosmetics manufacturer, "Don't send me anyone with a M.S.  They
}->don't know how to DO anything."
}
}One of the reasons for getting an advanced degree is so you don't have to
}work in the data processing division of a large cosmetics manufacturer.

Yeah, but people -- even PhD's -- want the money, and business is where
most of it is, because that's where most of it comes from.  I think this
series of postings is fundamentally about whether advanced degrees are
worth their high cost.  The answer being given seems obvious.
 

geoff@desint.UUCP (Geoff Kuenning) (04/12/88)

In article <3850008@wdl1.UUCP> rhj@wdl1.UUCP (Bob Jones) writes:

> I find that the very act of writing the comments forces me to
> think the problem through; and I often find that while I am
> writing these function level comments, I see a design problem 
> that I can still correct easily.  Correcting it after it has
> been coded is much harder.

I couldn't agree more strongly.  Recently, I discovered that my new
ispell needed a *very* tricky routine.  I spent over a week, on and off,
writing the outline of the algorithm in the routine header.  But once
I got the comments right, it was very easy to write the routine itself.
(For those who care and can remember for a couple of months until I post
it, the routine is "combinecaps" and it's in the module makedent.c).
-- 
	Geoff Kuenning   geoff@ITcorp.com   {uunet,trwrb}!desint!geoff

chris@metavax.UUCP (Chris Collins ) (04/12/88)

In article <2350@uvacs.CS.VIRGINIA.EDU> hsd@uvacs.cs.virginia.edu.UUCP (Harry S. Delugach) writes:
 
>What about short-sighted, "bottom-line" oriented company management which
>forbids you to "waste" time creating obviously non-functional comments,
>particularly if the project is perceived as easy or a 
>"one-shot deal". Later when the "one-shot" is revived or modified, 
>your new boss wonders why in the world you didn't forsee that it would
>be re-used. In such a case, it is often true that the real culprits
>(former managers) never have to face their mistakes.
>-- 
>Harry S. Delugach   University of Virginia, Dept. of Computer Science
>                    INTERNET: hsd@cs.virginia.edu
>                    UUCP: ..!uunet!virginia!uvacs!hsd
>                    BITNET: hsd2x@virginia

When management "forbids" you to do your job correctly, you have only a
couple of options: a) Look for other work immediately, and tell them
why on the spot.  Unfortunately I recognize that this is sometimes not
possible.  b) Tell them about the previous "one-shot" project that you
spent untold hours deciphering at unbelievable cost.  If you don't have
one make one up, or ask about on the net.  I'm sure many of us will gladly
donate such a horror story.  c) (my personal favorite) say, ok, and comment
the code anyway.

Somewhat humerous approach:  Remark that "non-functional comments" are
equivalent to "useful/intelligent managers".  (This could result in
option (a) above).

Chris Collins

gcf@actnyc.UUCP (Gordon Fitch) (04/13/88)

In article <3042@sfsup.UUCP> peking@/doc/dmg/pekingUUCP (xt1124-AUG881-L.Perkins) writes:
>In article <3763@dasys1.UUCP> pepper@dasys1.UUCP (Angelique Wahlstedt) writes:
>>Some of the courses that I think should be required in college are Software
>>Engineering and Technical Writing (some colleges such as Rochester Institute
>>
>Yes, Yes, Yes.
>However, the real world has great difficulty communicating the
>necessity for good writing to faculty in Computer Science departments.

One of the reasons it has this difficulty is that the said Real
World won't pay for documentation or the associated skills.

Suppose you can both write well and program well: if you go where the
money is, you'll never have anything to do with documentation.

(In saying "Real World" I assume you speak about "business"; I don't
know what the story is in academia, government, or other areas, but
I'll bet it's the same.)

daveb@geac.UUCP (David Collier-Brown) (04/13/88)

  Another response to the managerial "don't comment" dictate is very
simple: "Could you give me that in a memo please? I'd like to cover
my ass."  
  It's only slightly threatening, and expresses the risk involved to
both parties succinctly.

--dave (I've used a variant at another company, who shall remain
nameless) c-b
-- 
 David Collier-Brown.                 {mnetor yunexus utgpu}!geac!daveb
 Geac Computers International Inc.,   |  Computer Science loses its
 350 Steelcase Road,Markham, Ontario, |  memory (if not its mind) 
 CANADA, L3R 1B3 (416) 475-0525 x3279 |  every 6 months.