[comp.lang.misc] The State of Software Development

oster@dewey.soe.berkeley.edu (David Phillip Oster) (10/23/87)

The state of software devlopment is not primitive, unfortunately most
of us are using far from state of the art tools.

These tools are:

A history log of expressions typed to the system, with undo and
edit-and-redo.

Debuggers that let us set breakpoint anywhere in the program and
singlestep at the source statement and source expression level. At any
point, you can change any piece of code INCLUDING the code currently
executing without loosing the context of the calculation so far. The
debugger must run in a window independent of either to program under
test or the history log of expressions typed to the system.  The
complete source code and documentation must be available for editing
at the click of the pointing device on any sub-expression.

If the initial state of something is undefined (like order of
evaluation in many langauges, the initial state of local variables in
C, and the scheduling of tasks in a multi-tasking system,) then the
debugger should randomize them, to catch programs that work only by
coincidence. 

data structure examiners, that let us look at a data structure as a
graph a window, or as a form in a window. And let us change the data
structure with a click of a pointing device, and the typing of an
expression. Among the data structures examinable in this way is the
calling stack of nested procedures (so we can see not only globals and
current locals, but also obscured locals.) Naturally, the data
structure presentation tool uses an object oriented system so I can
override generic printing procedures within it.

regression testers, so after any change the program gets run against a
history of all previous input data that uncovered bugs, and the
outputs compared, to ensure that no old bugs are re-introduced.

languages that provide memory-management, so I don't have to worry
about buffers being too small, or so generous that my program won't
run.

langauges that provide a model of an application program, a hierarchy
of types, and default procedures with overriding, so that most program
is the overriding of inappropriate default procedures. Even a new
program is written not by debugging a blank sheet of paper until it
works, but by debugging a no-op generic application that already has
huge amounts of error-handling, and user-interface code installed and
working.

Help systems and browsers because any system in which it is easy to
write code to perform lots of functions will be big. Too big to
memorize, so it must be easy for the system to show me around those
parts I've forgotten.

Multi-media programming languages. I don't mind specifying most verbs
procedurally, but I work with nouns such as sound and artwork that are
cumbersome to specify in C. The Macintosh associates a database with
each program, programs refer to objects in the database via keys.
Objects are pictures, icons, waveforms, melodies, ... . and are
created with an extensible type specific editor. Intrinsic data of
this sort (as opposed to the more traditional input data.) can be
changed without recompiling. 


hierarchical editors, that select from a unified system the
information that you've asked for:
conceptually, these are one unit and should be stored together:
1.) The documentation you need to understand the concepts in using this unit
2.) The documentation you need to use this unit
3.) The documentation you need to understand the concepts in fixing
this unit.
4.) The documentation you need to fix this unit.
5.) The documentation of the design history of this unit, needed to
evolve it further.
6.) The actual code
7.) Earlier versions of the code
8.) The wish-list for future enhancements to the code.
9.) the test input data and output results.
10.) the academic literature on which this unit is based.

Yet, you rarely want to look at all of this at once, so a good
programmer's editor will hide all the irrelevant pieces.

Decent global optimizers and type checkers, so that code can be made
run faster at the cost of increased compile time, with no loss of
safety.

I've met no system that has _all_ these, but each of these exists in
some systems.


--- David Phillip Oster            --A Sun 3/60 makes a poor Macintosh II.
Arpa: oster@dewey.soe.berkeley.edu --A Macintosh II makes a poor Sun 3/60.
Uucp: {uwvax,decvax,ihnp4}!ucbvax!oster%dewey.soe.berkeley.edu

eugene@pioneer.arpa (Eugene Miya N.) (10/23/87)

You guys are having a really great discussion, but you should conduct it
in the gatewayed comp.software-eng group.  It really goes beyond
languages.  A good part of our problem is our parochialism to things
like editors (witness a recent resurgence of editor wars), programming
languages (C vs. Pascal vs. f77), and machines (IBM vs. DEC vs. etc.)
I will gladly forward the earliest articles in an effort to stimulate
the smart people over there.  See you there.

From the Rock of Ages Home for Retired Hackers:

--eugene miya
  NASA Ames Research Center
  eugene@ames-aurora.ARPA
  "You trust the `reply' command with all those different mailers out there?"
  "Send mail, avoid follow-ups.  If enough, I'll summarize."
  {hplabs,hao,ihnp4,decwrl,allegra,tektronix}!ames!aurora!eugene