(ref.doc)johnson 150695

Next ark 211195 Prev: clamage 190495 Up: Usenet

From: [email protected] (Ralph Johnson)
Newsgroups: comp.object
Date: 15 Jun 1995 12:05:43 GMT

OOP is the style of programming that most helps reuse. But it is
neither necessary nor sufficient, OOP can be done in any language, and
there are a lot of other factors that are probably more important.
Lots of people seem to think that you can just get a C++ compiler and
your software will suddenly become reusable. This has been disproved
many times. You have to know how to make software reusable, you have
to live in an environment that gives you the time and resources to
make it reusable, and you have to have the domain knowledge to capture
the right abstractions. Lots of managers will not let people do the
domain analysis that is necessary for reuse, they won't let people
rewrite existing code (which is also necessary for making reusable
software), and they won't spend the money on documentation, which is
especially important for reusable software. "Haste makes waste" when
it comes to developing reusable software, though once you have it then
you can build applications much faster.

On the other hand, there is a lot to argue with in your statement. I
couldn't find my issue of CACM so I don't know how well you summarized
the article. I recall reading it and pretty much agreeing with it.
Therefore, I'm just responding to what you said.

Your statements assume that there is a dichotomy between
language/paradigm and development process. It is a complete myth that
these are independent. A development process has to be customized for
the language you use, and something that works with one language will
not work with another. Moreover, many languages have cultures that
surround them, and the cultures prescribe a particular development
process. A Smalltalk programmer uses rapid prototyping and incremental
development, they never use the military standard process of
developing software. For Smalltalk, it is impossible to separate the
way you develop programs from the programming environment, and the
programming environment from the class library, and the class library
from the language. Asking which one is responsible for the
productivity of Smalltalk programmers is like asking whether your
heart or your lungs are primarily responsible for keeping you alive.
Each aspect depends on the rest, and it is the *whole* that is
successful, not the parts.

Many successful OO developers do not really know how to develop
reusable software. You can successfully build applications just by
reusing other people's software and writing only specialized software.
Moreover, most of the people who teach courses on OOP do not really
teach how to make your software reusable. The consequence is that most
of the OO software developed is not reusable.

In fact, most of it shouldn't be. It takes a lot longer to make
something reusable than just to get it to work. You have to be fairly
sure that you will reuse the software enough to pay off the work it
will take.

However, everything else being equal, OO technology has a lot of
advantages for writing reusable software. For all its problems, C++ is
better than C for making reusable software. But technology is only one
of the things you need for making reuse happen. You should plan on
changing the way you manage projects, the way you allocate resources,
and the kinds of things that developers do. Going to a new language
often makes it easier to make these other changes.

-Ralph Johnson

automatically generated by info2www version 1.2.2.8