[comp.object] How to pay for reusable software

johnson@cs.uiuc.EDU (Ralph Johnson) (04/04/91)

For the last few years I have been learning how to make software
reusable.  I have followed the object-oriented road using Smalltalk
and C++.  Software is not naturally reusable, and it is not easy
to write reusable software.  In fact, I have decided that the
biggest problem with software reuse is that reusable software is
so hard to make.  Lots of people seem to be worried about problems
like cataloging software components and how to retrieve a component
from a library of million of components.  I wish that were the
problem!  The real problem is that it is so hard to create reusable
software.

This leads to an interesting problem: how can we afford to pay the
costs of developing reusable software?  If a company is going to 
build several of something then it might be cheaper for it to first
develop a system for producing systems of that kind.  However, it
will certainly not save money on the first system built.  Some
application domains, like graphical user interfaces, are popular
enough that a company can build a set of reusable components and
sell it and make lots of money.  I don't think there are many of
these application domains, and in any case most people seem to
undervalue software and don't want to pay a fair price for it.
Thus, it is only cost-effective to sell software if you can sell a
lot of it, which rules out specialized application domains.

The problem that I see is that there will be many areas where
it would be valuable for us to develop standard libraries of
software components, but there will be no economic incentives
to do so.  Does anybody have any ideas on how to solve this
problem, whether it is a problem, or (better yet) references to
papers that discuss it?

Ralph Johnson -- University of Illinois at Urbana-Champaign
		 johnson@cs.uiuc.edu

rsw@cs.brown.EDU (Bob Weiner) (04/05/91)

In article <1991Apr3.231849.13410@m.cs.uiuc.edu> johnson@cs.uiuc.EDU (Ralph Johnson) writes:

> For the last few years I have been learning how to make software
> reusable.
...
> The real problem is that it is so hard to create reusable
> software.
> 
> This leads to an interesting problem: how can we afford to pay the
> costs of developing reusable software?

The same way we afford anything else.  We convince ourselves or become
convinced that the benefit outweighs the cost.  How do we do that?  In the
industrial world, we gather believable examples of where company A with an
established reusability program is trouncing competitor company B who writes
most of their software from scratch.  The correlation becomes especially
believable if company A points to this program as their main success strategy
and if they used to trail company B.

Electrical engineers have learned the value of standardization, though they do
not always apply it.  Computer scientists, software engineers, and programmers
generally do not show this same understanding, at least as it applies to
program generation.  Their mindset will also shift as startling examples
of technology advancement arrive.  And if they don't, then maybe many people
will find that they have been promoting the wrong crusade.

> Some application domains, like graphical user interfaces, are popular enough
> that a company can build a set of reusable components and sell it and make
> lots of money.  I don't think there are many of these application domains,
> and in any case most people seem to undervalue software and don't want to pay
> a fair price for it.  Thus, it is only cost-effective to sell software if you
> can sell a lot of it, which rules out specialized application domains.

I think this is a forest-and-trees issue.  The development of standardized sets
of reusable software components should not be about the commercialization of
the components but about their use as enablers in the construction of needed
applications within real world constraints of time and resources.

People don't make much money selling me a few screws, bricks, or 2-by-4s, but
the person who builds a house with such things often gets a very good markup.
Because people place much more value on the product he delivers than on the
components from which it is made.

Further, I submit that there will never be a shortage of software applications
for people to work on, since we will forever raise our expectation thresholds
for the functionality needed within programs.  This in turn means that we will
have to invent new components and even re-engineer the old ones as they become
dated.

All of this is just as true for any industry that society keeps vital through
its demands.  Since software spans virtually every industry, I see no need for
you to worry that component standardization will finish the job once and for
all.

> The problem that I see is that there will be many areas where it would be
> valuable for us to develop standard libraries of software components, but
> there will be no economic incentives to do so.

Even were this at all true, there are many organizations, even technical ones,
which do things mainly for society's benefit.

> Does anybody have any ideas on how to solve this problem, whether it is a
> problem, or (better yet) references to papers that discuss it?

Sony doesn't make a lot directly selling their media or miniaturized circuitry.
They settle for market dominance in application areas:  computer storage,
consumer electronics, profession video, and so forth.  The tree view is that
they make this money from their competence in the underlying technology areas.
The forest view is that they are good at drawing on these strengths to deliver
well engineered, timely products in which they locate or develop solid demand.

If you do sell non-standalone components, your only market is software
developers.  This market may be large enough to satisfy many entrepeneurs, but
the applications market is insatiable.  Remember, no one, in the figurative
sense, wants an echo canceler but everyone wants a telephone, making it
a popular target of both entrepeneurial and engineering talent.  Easy to see
why, isn't it? 


				Bob
--
Bob Weiner				   rsw@cs.brown.edu

locke@paradyne.com (Richard Locke) (04/05/91)

In article <1991Apr3.231849.13410@m.cs.uiuc.edu> johnson@cs.uiuc.EDU (Ralph Johnson) writes:

Ralph asks some good questions:

<...how can we afford to pay the costs of developing reusable software?  

<Does anybody have... (better yet) references to papers that discuss it?

Though the book is at work & I'm at home, I recall the "Programmer
Productivity" by Capers Jones has a reasonably extensive discussion
on the economics of reusable software.  Jones points out the the
world leaders in software productivity are good at reusing both
designs and code.  He goes through a sample exercise of justifying
a large initial investment and showing the payback.


-dick

p.s. Note that Jones defines productivity (I'm paraphrasing here) in
terms of functionality delivered per unit of effort on the "version"
of the delivered software.  You could define productivity differently
(like new lines of code/unit time) and this changes ;-)

EGNILGES@pucc.Princeton.EDU (Ed Nilges) (04/06/91)

In article <1991Apr5.040312.29351@pdn.paradyne.com>, locke@paradyne.com (Richard Locke) writes:

>In article <1991Apr3.231849.13410@m.cs.uiuc.edu> johnson@cs.uiuc.EDU (Ralph Johnson) writes:
>
>Ralph asks some good questions:
>
><...how can we afford to pay the costs of developing reusable software?

A government or government-sponsored effort is one possibility.  The
U. S. Government printing office has long made a variety of information
on various scientific topics cheaply available.  It could start selling
book/diskette combinations of reusable tools for various areas.

This would prevent horrors such as runaway patenting of obvious
algorithms (including blinking cursors.)  It would also make it
possible for small startups to concentrate development efforts on
the end-user problem they were chartered to solve without having to
buy collections of software typically priced past 200.00 per
single-use package.  Too many programmers in small businesses of
all types are faced with a cruel choice: "wasting time" by developing
documented reusable components or creating huge, unmaintainable
agglomerations of single-purpose code.

Private companies are loth to fund reusability since reusability
entails clear documentation of procedures that are in many cases
trade secrets.  This costs these companies money in the form of
too many programmers and it results in a poor product for the end
user.

brnstnd@kramden.acf.nyu.edu (Dan Bernstein) (04/07/91)

In article <1991Apr3.231849.13410@m.cs.uiuc.edu> johnson@cs.uiuc.EDU (Ralph Johnson) writes:
> This leads to an interesting problem: how can we afford to pay the
> costs of developing reusable software?

Easy: You *don't*.

The problem in software today isn't code that's written once. As you
observed, it is absolutely pointless to take a unique section of code
and make it reusable---or even to start by writing it reusably.

But as soon as the code is written twice, it should never have to be
written again. As soon as you see that you're *reusing* software, you go
back, make the original *reusable*, and then *reuse* it. Any competent
programmer will assume that what he uses twice, he'll use again, and so
he'll put in the extra effort so that it's easy to use.

Never do this before you realize that the software will be reused, and
you won't waste any money.

(As many people have observed, there is a problem of communication here:
if programmer X and programmer Y independently need something---once---
then neither of them will realize that it should be made reusable. The
only way to improve this situation is to distribute code.)

---Dan

cox@stpstn.UUCP (Brad Cox) (04/08/91)

In article <RSW.91Apr4182149@tahiti.cs.brown.EDU> rsw@cs.brown.EDU (Bob Weiner) writes:
>In article <1991Apr3.231849.13410@m.cs.uiuc.edu> johnson@cs.uiuc.EDU (Ralph Johnson) writes:
>
>> For the last few years I have been learning how to make software
>> reusable.
>...
>> The real problem is that it is so hard to create reusable
>> software.
>> 
>> This leads to an interesting problem: how can we afford to pay the
>> costs of developing reusable software?

Thanks, Bob, for reposting Ralph's question...I'd missed it somehow.
(@#$$% usenet gremlins)

The organizational motivation for reusability is specialization of
labor; making a tree-structured industry of what was previously a
monolithic collection of cottage industry skilled craftsmen; a
heterogeneous tree of specialized craftsmen instead of a homogeneous
collection of programmers all with the same skill set.

But Ralph has his finger on the key obstacle to doing this...finding a
way to keep the roots of this tree from starving.

I believe the demand for a market in reusable components is high, but
the supply is low, because of exactly what Ralph has identified; that
the costs of building reusable components is extremely high, higher
than those who have not tried to do this for a living is probably
realize.

For example, in my own experience (these are measured numbers based on
nearly a decade of actually doing it), the costs of building something
reusable are at least ten times higher than the costs of building it in
the first place, and possibly much more. I'm referring to the costs of
testing, documenting, porting (and retesting and sometimes
redocumenting), advertising, marketing and selling. Note that the 10x
costs are not easily amenable to technological assistance.

If I'm right that the demand exceeds the supply, the situation will
develop in a fashion economists are familiar with...prices will rise
until reusable component producers decide that the gain exceeds the
risk.

-- 

Brad Cox; cox@stepstone.com; CI$ 71230,647; 203 426 1875
The Stepstone Corporation; 75 Glen Road; Sandy Hook CT 06482

egnilges@phoenix.Princeton.EDU (Ed Nilges) (04/08/91)

In article <6761@stpstn.UUCP> cox@stpstn.UUCP (Brad Cox) writes:
>
>I believe the demand for a market in reusable components is high, but
>the supply is low, because of exactly what Ralph has identified; that
>the costs of building reusable components is extremely high, higher
>than those who have not tried to do this for a living is probably
>realize.

Darn right, Brad.  As one who frequently gets into hot water for 
spending too much time making things reusable, I find that reusability
is quite beneficial in ways that cannot always be quantified or
cost-justified.  Especially in contract programming, you are paid to
do exactly what the customer wants, and it is the kiss of death to
bill for reusable software.  

Nonetheless, a software system built out of reusable components seems
always to work better and to be easier to maintain than one that is
not so built, once you've tuned critical sections for efficiency.

I am currently working on reusable environments in C and in REXX.  REXX
is a language for writing glue procedures in the IBM mainframe
environment that is also useful for general programming and which
also has implementations on the Amiga, the PC and unix.  REXX at this
writing is mostly interpreted.  I find that it is much easier to make
things reusable in REXX, because writing a reusable tool has only
these steps:


     1.  Document
     2.  Code
     3.  Test using a standard harness (called TRY) which displays
         the before and after environment
     4.  Place on public disk


Note that we document prior to coding.  Normally, these components are
so simple that this phase is the analysis phase in which we determine
our requirements.  Note, also, that these are NOT end-user tools: if
they were, a "step 0" requirements phase would have to be added.  To
do a needs determination for these types of tools, we talk to
ourselves.

Developing C reusable components of equivalent simplicity is a con-
siderably more daunting task in that we are using a compiler.  This
means that we have to set up libraries and worry about porting issues
that do not arise in REXX.

This does not mean that it is a waste of time to develop reusable C,
just that it's more expensive in ways that the theoreticians do not
see.

rh@smds.UUCP (Richard Harter) (04/09/91)

In article <1991Apr3.231849.13410@m.cs.uiuc.edu> johnson@cs.uiuc.EDU (Ralph Johnson) writes:
> This leads to an interesting problem: how can we afford to pay the
> costs of developing reusable software?

There have been some studies that show that one of advantages of
the more productive programmers is that they reuse their own code.
When one thinks about it, this is the optimal situation for reusability.
I.e. the programmer is already familiar with the way the code works,
its style, and its limitations.  Furthermore she/he knows that the code
exists and where to find it.  Moreover "resusable code" in this context
often consists of sections of code rather than complete modules.  It
might be profitable to think in terms of bridging the gap between
programmers so that programmer X can reuse the code of programmer Y
in much the same way that a programmer reuses her own code.
-- 
Richard Harter, Software Maintenance and Development Systems, Inc.
Net address: jjmhome!smds!rh Phone: 508-369-7398 
US Mail: SMDS Inc., PO Box 555, Concord MA 01742
This sentence no verb.  This sentence short.  This signature done.

jls@rutabaga.Rational.COM (Jim Showalter) (04/10/91)

>The problem that I see is that there will be many areas where
>it would be valuable for us to develop standard libraries of
>software components, but there will be no economic incentives
>to do so.  Does anybody have any ideas on how to solve this
>problem, whether it is a problem, or (better yet) references to
>papers that discuss it?

It's largely the same infrastructural defect that afflicts companies
in other areas: short-term focus. Clearly it costs money up front to
write reusable software, and yet, amortized over several projects,
such an effort pays for itself. But if a company only thinks 3 months
ahead, there is no basis for such multi-year payback.

Consider a concrete example: every air traffic control system and
every air defense system in the world does "track management" (a
track is a flying object's trajectory over time). Every such project
I've ever been involved with has rewritten track management from
scratch (at best scavenging bits and pieces from other iterations).
Yet, it is clearly a reusable--and quite large--chunk of the overall
problem. A company that noticed this and put such things on a multi-year
accounting basis could solve the track management problem once and for
all, and realize significant savings over the medium to long term.

A few companies have realized that reusable software (particularly
application-specific stuff) can provide a competitive advantage, and
have started to budget appropriately. I hope the trend continues.
--
* The opinions expressed herein are my own, except in the realm of software *
* engineering, in which case I borrowed them from incredibly smart people.  *
*                                                                           *
* Rational: cutting-edge software engineering technology and services.      *

emv@ox.com (Ed Vielmetti) (04/10/91)

In article <jls.671247772@rutabaga> jls@rutabaga.Rational.COM (Jim Showalter) writes:

   >The problem that I see is that there will be many areas where
   >it would be valuable for us to develop standard libraries of
   >software components, but there will be no economic incentives
   >to do so.  

   It's largely the same infrastructural defect that afflicts companies
   in other areas: short-term focus. Clearly it costs money up front to
   write reusable software, and yet, amortized over several projects,
   such an effort pays for itself. But if a company only thinks 3 months
   ahead, there is no basis for such multi-year payback.

I suspect there are good rational reasons why companies don't invest
in the extra time and effort to make their code reusable.  Consider an
interface to a proprietary system (e.g. a stock ticker) which is a
relatively small part of a greater whole (e.g. a trading system).  

Since the upstream interfaces are all proprietary, there is no
guarantee that they won't change in a relatively short time; you would
not want to spend time writing code that was reusable but obsolete.
It may be difficult or even impossible to find potential buyers for
your code if you were to want to sell it; most development of this
sort is done in-house, because it's relatively cheap compared to the
rest of the entire system.  And you really don't want to sell or give
anything away to your competitors in this market, since it might
endanger your core profit centers.

So whereas it might be nice to have a set of standard libraries for
dealing with the output of the Telekurs Ticker Service Adapter, the
number of users is sufficiently small and they are ignorant of (or
hostile to) each other and chances are none of them are going to ever
know enough about each other to make any reuse or resale possible.

--Ed
emv@ox.com

weide@elephant.cis.ohio-state.edu (Bruce Weide) (04/11/91)

In article <6761@stpstn.UUCP> cox@stpstn.UUCP (Brad Cox) writes:
>
>But Ralph has his finger on the key obstacle to doing this...finding a
>way to keep the roots of this tree from starving.
>

Just to reiterate one of Ralph's important points that Brad goes on to
observe later in the above article...  The economic question is A key
obstacle to practical software reuse, but there are also serious
technical impediments to designing good reusable components.  People
who haven't tried it (seriously) often don't realize that.  Even if we
figure out how to solve the economic, psychological, sociological,
managerial, ..., problems that impede reuse, we STILL have to solve
the technical ones, too (e.g., how to design high-quality reusable
components).

So the economic question is not THEY key issue, IMHO.  It is just one
of many.  In fact, if we solve all the other problems without having
good reusable components, we may be worse off than we are now.  People
will then be able to reuse inappropriate, incorrect, inefficient
software components more easily than they can now!

	-Bruce

pkr@media01.UUCP (Peter Kriens) (04/11/91)

I have been involved in a project where a CD was made with thousands of
fonts on it. The fonts were encrypted so if you wanted access, you called
a number and got a decryption key. This key allowed you to get the
font from the disk and use it. On the disk there was also a presentation
of all the fonts so that it was easy to find the one you want. Also 
cross references made life a lot easier.

What I could dream of is a product like that where hundreds of companies
deliver standard libraries for (~rwell Smalltalk would be great, but
C++ would be nice too) C++. So you bought the CD for $25 or something like
that, then when you needed a reusable component you just paid what you needed.
It could be possible to supply the header files as always readable so that
you can design and try without coding.

Ofcourse that would mean distributing source code. But I think that it should
be possible to distribute non commented, symbol replaced C code, jus the way
like a lot of programmers write. Would a product like that be feasable? And
if so how much could you charge, and how many people would be interested?

Peter Kriens
pkr@media01

jls@rutabaga.Rational.COM (Jim Showalter) (04/12/91)

>So whereas it might be nice to have a set of standard libraries for
>dealing with the output of the Telekurs Ticker Service Adapter, the
>number of users is sufficiently small and they are ignorant of (or
>hostile to) each other and chances are none of them are going to ever
>know enough about each other to make any reuse or resale possible.

I think there are two kinds of reuse here. The first, which seems to
be the one everyone is focusing on, is INTER-company reuse: writing
software that other companies will buy and reuse on their projects.
There is certainly some progress in this area (witness the Booch
components from Rational's very own Grady Booch, not to mention stuff
like X-windows, off-the-shelf mathematical/financial/database software,
etc). But what I was specifically referring to in my original post was
INTRA-company reuse: reuse from project to project within the same
company. And here is where my comments about companies not thinking
more than one fiscal quarter into the future apply. I've seen companies
that are almost exclusively in the business of writing air defense systems
write each new such system from scratch. This is clearly nuts, not to
mention extremely expensive, but so it goes.
--
* The opinions expressed herein are my own, except in the realm of software *
* engineering, in which case I borrowed them from incredibly smart people.  *
*                                                                           *
* Rational: cutting-edge software engineering technology and services.      *

diamond@jit345.swstokyo.dec.com (Norman Diamond) (04/12/91)

In article <2238@media01.UUCP> pkr@media01.UUCP (Peter Kriens) writes:

>What I could dream of is a product like that where hundreds of companies
>deliver standard libraries for (~rwell Smalltalk would be great, but
>C++ would be nice too) C++. So you bought the CD for $25 or something like
>that, then when you needed a reusable component you just paid what you needed.
>... Would a product like that be feasable?

I think not really.  When one customer purchases the decryption key,
30 pirated copies will be made.  You might as well deliver plaintext
source to begin with.

Also, since the code on a CD would likely become obsolete, it might be
better to allow FTP access for a fee.  However, the pirating problem
remains unchanged.
--
Norman Diamond       diamond@tkov50.enet.dec.com
If this were the company's opinion, I wouldn't be allowed to post it.

johnson@cs.uiuc.EDU (Ralph Johnson) (04/13/91)

In article <3318:Apr705:51:2391@kramden.acf.nyu.edu>, brnstnd@kramden.acf.nyu.edu (Dan Bernstein) writes:
|> 
|> The problem in software today isn't code that's written once. As you
|> observed, it is absolutely pointless to take a unique section of code
|> and make it reusable---or even to start by writing it reusably.
|> 
|> But as soon as the code is written twice, it should never have to be
|> written again. As soon as you see that you're *reusing* software, you go
|> back, make the original *reusable*, and then *reuse* it. Any competent
|> programmer will assume that what he uses twice, he'll use again, and so
|> he'll put in the extra effort so that it's easy to use.

I agree that you should never try to write reusable software unless
you have already written the software once.  It takes a lot of experience
with the application domain to understand what abstractions are important,
There are a few areas, such as data structures, parsing, and now user
interfaces, where there is a lot of community experience and you can
learn about the application domain from books, but that is not common.
The right way to develop reusable software is to generalize from a couple
of non-reusable versions.

However, I disagree that this solves the problem.  Often it is not the
components (i.e. subroutines or data structures) that you want to
reuse, but higher level patterns and the overall architecture of the
program.  It is difficult to detect these patterns and to abstract them
successfully.

Putting it another way, you are never going to get InterViews by simple
rewriting of X-based programs.  

In any case, my experience (and that of many others) is that you
have to reuse software two or three times (in addition to the one
or two times that it took to recognize its value in the first place)
before all the "reusability bugs" are out.

Many corporations have recognized the value of reusable software and
are developing their own libraries.  Sometimes this is the best
strategy, especially for narrow application domains in which they
have, and want to keep, a dominant position in the marketplace.
However, a lot of what is being put in these libraries is the same
as what everybody else is putting in.  We would be a lot better off
developing industry standard packages that students could learn, to
minimize the cost of retraining new programmers, and to reduce the
overall cost of software.  There is a lot of reuse going on within
single companies, but the marketplace for reusable software is not
nearly as large as lots of people thought it would be.

Is the marketplace for reusable software destined to be small?

Ralph Johnson -- University of Illinois at Urbana-Champaign

marc@dumbcat.sf.ca.us (Marco S Hyman) (04/14/91)

In article <1991Apr12.182420.18587@m.cs.uiuc.edu> johnson@cs.uiuc.EDU (Ralph Johnson) bemoans:
 > Is the marketplace for reusable software destined to be small?

Possibly, Ralph, but not for the reasons you give.  I am constantly amazed at
the number of re-implementations of standard library functions I see in C
code.  (Especially the number of broken re-implementations of bsearch.) If
today's programmer (excuse me -- software engineer) can not learn what simple
functions exist in today's standard C library how can we expect them to learn
entire inheritance trees from multiple sources in the reusable software world
of tomorrow.

I can foresee a time when problems are being solved yet one more time simply
because the programmer doesn't know that a tried solution is available.
(Hindsight is usually 20/20.)

IMHO the real question is one of training and indexing.  Training to look for
an existing solution first.  Indexing to find the solution once you've decided
to look for it.  With current methods too many find it easier to just solve the
problem again.
-- 
// marc
// home: marc@dumbcat.sf.ca.us		pacbell!dumbcat!marc
// work: marc@ascend.com		uunet!aria!marc

EGNILGES@pucc.Princeton.EDU (Ed Nilges) (04/15/91)

In article <291@dumbcat.sf.ca.us>, marc@dumbcat.sf.ca.us (Marco S Hyman) writes:

>In article <1991Apr12.182420.18587@m.cs.uiuc.edu> johnson@cs.uiuc.EDU (Ralph Johnson) bemoans:
> > Is the marketplace for reusable software destined to be small?
>
>Possibly, Ralph, but not for the reasons you give.  I am constantly amazed at
>the number of re-implementations of standard library functions I see in C
>code.  (Especially the number of broken re-implementations of bsearch.) If
>today's programmer (excuse me -- software engineer) can not learn what simple
>functions exist in today's standard C library how can we expect them to learn
>entire inheritance trees from multiple sources in the reusable software world
>of tomorrow.

Usually re-implementations of existing library functions are the result
of ignorance of what's available, but not always.  In the past, not all
C compilers came with a complete library and you may be looking at code
written in an environment lacking bsearch.  The best course would be
to replace the re-implementation with the Real Thing, but the re-imple-
mentation may have features on which the rest of the code depends
or worse it may have bugs on which the rest of the code depends.

We badly need a "Programmer's Desk Reference."  This would be a book and
perhaps an accompanying compact disk which would list languages,
compilers, tools and (on the model of the Physician's Desk Reference)
their interactions and contraindications.

However, in the existing world, such a tool is not likely to be made
available.  This is because although some company can publish such a
book, PART of the authoritative nature of the Physician's Desk Reference
was the willingness of physicians and the public to accept it as a
neutral authority.  I claim that any company publishing a Programmer's
Desk Reference will be perceived as biased towards some way of developing
software even if it does not have a bias.

There is a refreshing consensus right now on the value of C as a
programming language, but even C is not The Language of the Gods.
The proponents of C++ claim that this language is better and I
view REXX as the dark horse of the Nineties, and C is genuinely
technically inferior to these languages...perhaps also to Modula and
to Oberon.  The train will be standing at Babel for the foreseeable future.

It's popular nowadays to go to industrial history for software paradigms,
but ripping paradigms out of historical context is dangerous.  The
medical profession as we know it today only arose in the 19th
century (my own father was a neurosurgeon who studied under a man
who studied under the first neurosurgeon, Cushing of Boston.)
It arose in a Progressive matrix in which people were able to believe
that a man who sold you Science and Truth was doing so out of an
altruistic desire to Serve Mankind (the very sexism of my phraseology
dates it, doesn't it?)  Nowadays, when a person tries to sell us a
programming language, we ask what's in it for you?

Professor John Conway on our math department here at Princeton claims
he's had to prove theorems many times because he FORGETS he
proved them before.  Perhaps the excellent programmer of the
future will be a skilled reinventor of the wheel, able to create
libraries from the ground up in the manner of a barn-raising on
the frontier.  Perhaps she will be assisted by programming languages
powerful enough to do this, and the benefit will be that she won't
have to worry about reusing someone else's bugs.

I am not saying that this will be so and that it is not a good thing
to use the library function whenever possible.  But skilled
programmers are skilled at BOTH reusing code AND creating reusable
libraries: not just the former.  In the world of REXX, IBM has
just released the ability to support pipes in the manner of unix
when this could have been done ten years ago, and the pipe tutorial
lauds something called "pipethink".  This Orwellian word means
that programmers will ALWAYS reuse code, and I believe it is
deskilling.  "Pipethink" will create programmers good at fitting
together confusing pipe expressions which may (or may not) do a
particular job, but able to survive ONLY in environments where (1)
all the tools are in place and (2) all of the tools work as
advertised.

Reusability AND the ability to make things reusable are both
attributes of the skilled programmer!

objtch@extro.ucc.su.oz.au (Peter Goodall) (04/15/91)

pkr@media01.UUCP (Peter Kriens) writes:

Hi Peter,

[...]


>Ofcourse that would mean distributing source code. But I think that it should
>be possible to distribute non commented, symbol replaced C code, jus the way
>like a lot of programmers write. Would a product like that be feasable? And
>if so how much could you charge, and how many people would be interested?

>Peter Kriens
>pkr@media01

Digitalk has provided a Smalltalk specific type of Dynamic Link Library
which allows distribution of Smalltalk classes (and data) with Souce code
missing, available or restricted. 

I think that this is a particularly powerful tool. Have a look folks!
 As an aside have a check out the workload difference in programming a MS
Windows user interface in C++ and Smalltalk/V windows. 

I'm only going to use C++ for systems programming and primitives, forget
writing an application.


Peter Goodall

--



Peter Goodall			| INTERNET:

objtch@extro.ucc.su.oz.au (Peter Goodall) (04/15/91)

pkr@media01.UUCP (Peter Kriens) writes:

>Ofcourse that would mean distributing source code. But I think that it should
>be possible to distribute non commented, symbol replaced C code, jus the way
>like a lot of programmers write. Would a product like that be feasable? And
>if so how much could you charge, and how many people would be interested?

>Peter Kriens
>pkr@media01
 
Digitalk has Smaltalk specific DLLs available for your use now! 
You can include code and/or data. Source can be missing restricted or
available. This is very powerful stuff!


--



Peter Goodall			| INTERNET:

sakkinen@jyu.fi (Markku Sakkinen) (04/16/91)

In article <12676@pucc.Princeton.EDU> EGNILGES@pucc.Princeton.EDU writes:

(Sorry, I am commenting on a small side issue of the long article.)

>There is a refreshing consensus right now on the value of C as a
>programming language, but even C is not The Language of the Gods.

What consensus?  If I have an approximately correct picture of
American school grading, perhaps the name of the language is well chosen.
And I think C is really more suited for Gods (and daemons) to program in
than humans.

Markku Sakkinen
Department of Computer Science and Information Systems
University of Jyvaskyla (a's with umlauts)
PL 35
SF-40351 Jyvaskyla (umlauts again)
Finland
          SAKKINEN@FINJYU.bitnet (alternative network address)

frank@grep.co.uk (Frank Wales) (04/16/91)

In article <12676@pucc.Princeton.EDU> EGNILGES@pucc.Princeton.EDU writes:
>We badly need a "Programmer's Desk Reference." 

I'd love one.  Thanks for offering to put it together. ;-)

>However, in the existing world, such a tool is not likely to be made
>available.  This is because although some company can publish such a
>book, PART of the authoritative nature of the Physician's Desk Reference
>was the willingness of physicians and the public to accept it as a
>neutral authority.  I claim that any company publishing a Programmer's
>Desk Reference will be perceived as biased towards some way of developing
>software even if it does not have a bias.

I think this fear is overstated; I'd lay you money that aromatherapy,
homeopathy and other fringe stuff don't feature large as recommended
treatments in the PDR.  There's as much a mainstream in medicine as
in software, although software's is maybe more Mississippi-like.

An alternative example is the position of Encyclopaedia Britannica
as the canonical general knowledge reference; it has its biases and
problems, but it's still tremendously valuable nonetheless.

>Perhaps the excellent programmer of the future will be a skilled
>reinventor of the wheel, able to create libraries from the ground
>up in the manner of a barn-raising on the frontier.

I do hope not; I've written enough low-level bootstrap code for
n lifetimes already.  Don't ask about list and table stuff. :-(

>Perhaps she will be assisted by programming languages
>powerful enough to do this, and the benefit will be that she won't
>have to worry about reusing someone else's bugs.

Any re-invention must include re-inventing bugs; unless you're
advocating the Holy Grail of programming languages, so "powerful"
(do you mean expressive?) it prevents you from writing wrong programs.
[I don't think you are -- I'm just checking :-).]

>But skilled programmers are skilled at BOTH reusing code
>AND creating reusable libraries: not just the former.

Definitely.  The twin legacy of good programming is both useful
approaches to development and useful code for re-use.
--
Frank Wales, Grep Limited,             [frank@grep.co.uk<->uunet!grep!frank]
Kirkfields Business Centre, Kirk Lane, LEEDS, UK, LS19 7LX. (+44) 532 500303

rh@smds.UUCP (Richard Harter) (04/18/91)

In article <291@dumbcat.sf.ca.us>, marc@dumbcat.sf.ca.us (Marco S Hyman) writes:
> In article <1991Apr12.182420.18587@m.cs.uiuc.edu> johnson@cs.uiuc.EDU (Ralph Johnson) bemoans:
>  > Is the marketplace for reusable software destined to be small?

> Possibly, Ralph, but not for the reasons you give.  I am constantly amazed at
> the number of re-implementations of standard library functions I see in C
> code.  (Especially the number of broken re-implementations of bsearch.) If
> today's programmer (excuse me -- software engineer) can not learn what simple
> functions exist in today's standard C library how can we expect them to learn
> entire inheritance trees from multiple sources in the reusable software world
> of tomorrow.

There is much to what you say.  However...

There is a general problem for the writers of portable code that standard
C libraries aren't standard across the universe of platforms that support
C.  Someday, maybe, all vendors will supply a standard C with standard 
libraries.  In the meantime is it memcpy or bcopy?  Strings.h or string.h?
Etc.  In fairyland all vendors are ANSI and POSIX compliant and you can
write portable C programs using standard libraries that compile, link, and
execute correctly.  Meanwhile back in the U.S. of A. in 1991 life for
software developers who develop code that runs across a multiplicity of
platforms is (most unfortunately) simpler if you roll your own.  A side
benefit is that you don't get unpleasant little surprises from bugs in
vendor supplied library routines.  [Instead you get to invent your own.]

I not disagreeing, mind you.  Re-implementing basic algorithms is a
waste of time and effort.  However it does point out that reusable code
must either be available in complete source, self-contained source code
or as part of a standard implementation that is actually standard.
-- 
Richard Harter, Software Maintenance and Development Systems, Inc.
Net address: jjmhome!smds!rh Phone: 508-369-7398 
US Mail: SMDS Inc., PO Box 555, Concord MA 01742
This sentence no verb.  This sentence short.  This signature done.

jls@rutabaga.Rational.COM (Jim Showalter) (04/18/91)

%What consensus?  If I have an approximately correct picture of
%American school grading, perhaps the name of the language is well chosen.

You do, and it is.

%And I think C is really more suited for Gods (and daemons) to program in
%than humans.

Not gods--idiot savants.
--
* The opinions expressed herein are my own, except in the realm of software *
* engineering, in which case I borrowed them from incredibly smart people.  *
*                                                                           *
* Rational: cutting-edge software engineering technology and services.      *

marc@dumbcat.sf.ca.us (Marco S Hyman) (04/20/91)

In article <396@smds.UUCP> rh@smds.UUCP (Richard Harter) writes:

 [my comments on programmers who don't know what's in the standard libraries
  deleted.]

 > There is a general problem for the writers of portable code that standard
 > C libraries aren't standard across the universe of platforms that support
 > C.  Someday, maybe, all vendors will supply a standard C with standard 
 > libraries. 

Several people have pointed out that bsearch was not the best example for me
to use since it's not in everyone's "standard" library.  True. I'll use
another example.

More than once I've had to show people developing software on UNIX platforms
and using vi as their editor how to use the ctags command because I got
frustrated watching them constantly escape to the shell and run grep to find
what file a function was defined in.  Apparently none of them ever made it
through the letter C in the man pages.

If these programmers were too lazy to learn their own programming environment
what makes anyone think they will read the library manuals?  Portability is
not the issue here.  More libraries just leads to more documents not being
read.
-- 
// marc
// home: marc@dumbcat.sf.ca.us		pacbell!dumbcat!marc
// work: marc@ascend.com		uunet!aria!marc

jimad@microsoft.UUCP (Jim ADCOCK) (04/21/91)

In article <1991Apr16.123527.2854@jyu.fi> sakkinen@jytko.jyu.fi (Markku Sakkinen) writes:
|In article <12676@pucc.Princeton.EDU> EGNILGES@pucc.Princeton.EDU writes:
|
|(Sorry, I am commenting on a small side issue of the long article.)
|
|>There is a refreshing consensus right now on the value of C as a
|>programming language, but even C is not The Language of the Gods.
|
|What consensus?  If I have an approximately correct picture of
|American school grading, perhaps the name of the language is well chosen.
|And I think C is really more suited for Gods (and daemons) to program in
|than humans.

I don't know about a "consensus" or not, but I try to keep an honest
picture in my mind about the relative size and importance of various
products in the marketplace -- including the relative market impact of
various languages.  I do this by performing various kinds of primary
source numeric studies.  For example, below find some word-hit-counts and
document-hit-counts based on searching the Computer Select database
for various computer language names.  [The Computer Select database
is a monthly CD-ROM based database that contains full text from 40 of
the most popular programming journals, as well as abstracts from 110 
others.  In addition is contains product information on thousands of
software and hardware products.  If you haven't checked it out yet --
I strongly recommend it]


		journal articles	software products

hit-counts:	#words	#articles	#words	#product-descriptions

C		21482	 6507		 7956	 6922
C++		 3111	  578		  178	  117
Ada		 2322	  510		  334	  174
Pascal		 2284	  772		 1809	 1635
Cobol		 1850	  633		 3814	 3459
Fortran		 1364	  558		 2193	 1925
Smalltalk	  741	  212		   15	   11
Modula		  665	  112		   87	   62
Objective-C	  186	   40		   14	    7
Eiffel		  158	   34		    1	    1
Oberon		   28	    3		    0	    0
Modula 3	   20	    4		    0	    0

[Caveat: these are raw numbers from my hit searches.  In the case of 
 "C" only, the "C" word is such a small word that about half the total
 hits represent mis-hits -- articles for example, where the "C" word
 doesn't refer to the "C" programming language, but rather refers to
 Howard "C" Smith, or the like.  [So you may want to mentally divide the
 "C" numbers by about 2]]

Statistics can be interpreted many ways by many people.  I leave it
to the reader to get what they want out of these numbers.  Below are
*my own personal* conclusions:

----

C really is the dominant programming language for today -- but not so 
dominant that a "consensus" could be said to have formed behind it.

C++ is the dominant "object oriented" programming language.

*Some day* there really are going to be "Object Oriented" Cobol and
"Object Oriented" Fortran compilers [because the market is big enough
that *someone* is going to do it]

To date there's still more talk about object-oriented programming than
software products using it.  [IE OOP is still not a mainstream programming
approach]

Some well-known OOPLs aren't going to garner enough market-share to make
them a commercial success.  Programmers would do well to choose an OOPL
that stands a chance of making the cut.  [Just because your favorite
language above doesn't have large numbers doesn't necessarily mean
that its failing -- if its a language that's only come out in the last
year or two, it could simply mean that that language hasn't caught on yet]

---

[If your favorite language isn't in the above list, its simply because
 I did not think of it while compiling the above numbers.  All languages
 that I did search on are included in the above list]

jls@rutabaga.Rational.COM (Jim Showalter) (04/23/91)

Word counts are quasi-useless. A two paragraph article announcing yet-another
dinky routine on a UNIX platform is hardly of the same importance as a
paper on a successful delivery of a 2 million line of code Ada program
on time and under budget.
--
* The opinions expressed herein are my own, except in the realm of software *
* engineering, in which case I borrowed them from incredibly smart people.  *
*                                                                           *
* Rational: cutting-edge software engineering technology and services.      *

dlw@odi.com (Dan Weinreb) (04/28/91)

In article <293@dumbcat.sf.ca.us> marc@dumbcat.sf.ca.us (Marco S Hyman) writes:

   If these programmers were too lazy to learn their own programming environment
   what makes anyone think they will read the library manuals?  Portability is
   not the issue here.  More libraries just leads to more documents not being
   read.

That's a very good point.  I'd like to extend it.  I was one of the
first users of the original Emacs at MIT.  When Emacs was first
gaining popularity among some people, other people frequently objected
to Emacs, saying that its biggest problem was that it "had too many
commands".  Now, there was no need for any user to learn all of those
commands, and certainly no need to learn them straight away.  You
could edit quite reasonably using no more than 25 or so Emacs
commands, and never learn any more if you didn't want to.

The reason Emacs had so many commands is that it contained a large
library of reusable functionality.  Some users liked this a lot, and
learned quite a few of the commands.  But it was very interesting to
see how others never bothered, and some were actually put off by their
presence.

Your comments above made me realize that there may be a useful analogy
between this phenomenon and the issue of large reusable code
libraries.

It takes time to learn how to use a reusable library.  You have to
read the documentation, and try it out a bit, and get some experience
and familiarity.  All this is a like capital investment: you have to
spend time directed not towards your immediate objective, with the
idea that over the long run, you'll be paid back many times over.  So
you have to be convinced that the library is worth the effort of
learning it.  But it's often very hard to know in advance how hard the
library will be to learn, and how much trouble it will save you.
Sure, when you know that you need to solve linear equations, and
there's a library routine lying around that's well-debugged and
numerically stable, you'll know.  But it's not always so obvious.

It's also a matter of preference.  I like learning to use reusable
software and functionality; the learning itself is fun.  Not everyone
feels that way.  And when I'm in a hurry and under pressure, I
sometimes don't feel that way.

The real point is that making libraries that will really be accepted
and used is not only a matter of the actual writing of the software,
and the software technology (such as parameterized types), even though
these things are quite important.  You also have a lot of real-world
human issues to deal with in order to make these things easy and
enticing and so on.  I hope we'll all learn more about how to succeed
in these matters as well.