From: Patrick May on
"topmind" <topmind(a)technologist.com> writes:
> H. S. Lahman wrote:
>> Reuse is nice but not a major consideration in using OO techniques.
>> The real objective of OO development is to create maintainable
>> applications in the face of volatile requirements over the product
>> life cycle.
>>
>> To answer your title question, OO programming is still the only
>> game in town for producing maintainable software.
>
> I beg to differ. There is no evidence for this, at least outside of
> systems software.

Actually, there is considerable evidence that some of the
concepts typically grouped together under the term "object oriented"
provide significant benefits in managing dependencies between software
components, which results in more maintainable software. I don't know
of anyone who has used OO in a large project and regretted having
those tools available. "The only game in town" is overstating the
case a bit, because similar techniques can be applied in most non-OO
languages and functional languages, for example, offer still other
approaches.

Out of curiosity, what do you mean by "systems software?"

Sincerely,

Patrick

------------------------------------------------------------------------
S P Engineering, Inc. | Large scale, mission-critical, distributed OO
| systems design and implementation.
pjm(a)spe.com | (C++, Java, Common Lisp, Jini, middleware, SOA)
From: topmind on

Patrick May wrote:
> "topmind" <topmind(a)technologist.com> writes:
> > H. S. Lahman wrote:
> >> Reuse is nice but not a major consideration in using OO techniques.
> >> The real objective of OO development is to create maintainable
> >> applications in the face of volatile requirements over the product
> >> life cycle.
> >>
> >> To answer your title question, OO programming is still the only
> >> game in town for producing maintainable software.
> >
> > I beg to differ. There is no evidence for this, at least outside of
> > systems software.
>
> Actually, there is considerable evidence that some of the
> concepts typically grouped together under the term "object oriented"
> provide significant benefits in managing dependencies between software
> components, which results in more maintainable software.

The only examples I've seen are from people who didn't know how to use
procedural and databases well.

> I don't know
> of anyone who has used OO in a large project and regretted having
> those tools available.

I've heard mumblings of things not going so smooth. Satisfaction
surveys by Yourdon showed no improvement. Further, OOP tends to
*create* large projects. Procedural/relational projects tend to break
big problems into smaller applications that feed off of databases. The
database is the Nile and small apps are villages on the shore. Thus,
one mostly only has to know about the schemas and a few sanctioned
library routines.

> "The only game in town" is overstating the
> case a bit, because similar techniques can be applied in most non-OO
> languages and functional languages, for example, offer still other
> approaches.
>
> Out of curiosity, what do you mean by "systems software?"

Tool building, such as OS's, RDBMS engines, compilers, device drivers,
network engines, etc. Polymorphism seems to have more use there.

>
> Sincerely,
>
> Patrick
>

-T-

From: Patrick May on
"topmind" <topmind(a)technologist.com> writes:
> Patrick May wrote:
>> "topmind" <topmind(a)technologist.com> writes:
>> > H. S. Lahman wrote:
>> >> Reuse is nice but not a major consideration in using OO
>> >> techniques. The real objective of OO development is to create
>> >> maintainable applications in the face of volatile requirements
>> >> over the product life cycle.
>> >>
>> >> To answer your title question, OO programming is still the only
>> >> game in town for producing maintainable software.
>> >
>> > I beg to differ. There is no evidence for this, at least outside of
>> > systems software.
>>
>> Actually, there is considerable evidence that some of the
>> concepts typically grouped together under the term "object
>> oriented" provide significant benefits in managing dependencies
>> between software components, which results in more maintainable
>> software.
>
> The only examples I've seen are from people who didn't know how to
> use procedural and databases well.

You need to get out more. ;-)

I started out after college working for a CASE tool company that
ate its own dog food by using the tool to deliver projects. It was
entirely based on E-R and dataflow modeling (Gane-Sarson,
Yourdon-DeMarco, etc.). We delivered a lot of systems on time and
within budget. Fast forward a few years and I encountered OO for the
first time in the guise of Zortech C++. Some of the techniques were
unlike what I knew, but many were logical extensions of good
procedural practices. OO was more evolutionary than revolutionary and
definitely a valuable addition to my virtual toolbox.

Most of the experienced developers I know who have proven their
ability to deliver quality software have similar backgrounds. They
understand and use the procedural and relational approach very well,
and they also have OO techniques to draw on.

>> I don't know of anyone who has used OO in a large project and
>> regretted having those tools available.
>
> I've heard mumblings of things not going so smooth. Satisfaction
> surveys by Yourdon showed no improvement.

Creating new things in the real world can be difficult. Complex
projects never go completely smoothly. In my experience and that of
other competent software developers I know, OO techniques provide
mechanisms for managing dependencies and complexity that result in
better quality software delivered more reliably.

Where have you used OO techniques and found this not to be the
case?

> Further, OOP tends to *create* large projects.

This is not my experience. Having more techniques available to
manage dependencies and complexity helps to make systems as simple as
possible. Restricting the available tools adds to the effort.

What project have you worked on where the use of OO techniques
resulted in a larger amount of effort for the same level of quality
that could have been attained more simply without them?

> Procedural/relational projects tend to break big problems into
> smaller applications that feed off of databases. The database is the
> Nile and small apps are villages on the shore. Thus, one mostly only
> has to know about the schemas and a few sanctioned library routines.

First, OO techniques permit just as much if not more functional
decomposition as procedural. OO subsumes procedural techniques.

Second, the "big central database" architecture is not
universally applicable. Even when it is possible to architect a
system that way, it does not always provide the best structure for the
solution.

>> "The only game in town" is overstating the case a bit, because
>> similar techniques can be applied in most non-OO languages and
>> functional languages, for example, offer still other approaches.
>>
>> Out of curiosity, what do you mean by "systems software?"
>
> Tool building, such as OS's, RDBMS engines, compilers, device
> drivers, network engines, etc. Polymorphism seems to have more use
> there.

I have personally seen OO techniques used successfully in domains
ranging from broadcast video to pharmaceuticals to finance to
telecommunications. These are commonly considered "business
applications." Where have you seen OO techniques fail in such
systems?

Sincerely,

Patrick

------------------------------------------------------------------------
S P Engineering, Inc. | Large scale, mission-critical, distributed OO
| systems design and implementation.
pjm(a)spe.com | (C++, Java, Common Lisp, Jini, middleware, SOA)
From: topmind on
Patrick May wrote:
> "topmind" <topmind(a)technologist.com> writes:
> > Patrick May wrote:
> >> "topmind" <topmind(a)technologist.com> writes:
> >> > H. S. Lahman wrote:
> >> >> Reuse is nice but not a major consideration in using OO
> >> >> techniques. The real objective of OO development is to create
> >> >> maintainable applications in the face of volatile requirements
> >> >> over the product life cycle.
> >> >>
> >> >> To answer your title question, OO programming is still the only
> >> >> game in town for producing maintainable software.
> >> >
> >> > I beg to differ. There is no evidence for this, at least outside of
> >> > systems software.
> >>
> >> Actually, there is considerable evidence that some of the
> >> concepts typically grouped together under the term "object
> >> oriented" provide significant benefits in managing dependencies
> >> between software components, which results in more maintainable
> >> software.
> >
> > The only examples I've seen are from people who didn't know how to
> > use procedural and databases well.
>
> You need to get out more. ;-)
>
> I started out after college working for a CASE tool company that
> ate its own dog food by using the tool to deliver projects. It was
> entirely based on E-R and dataflow modeling (Gane-Sarson,
> Yourdon-DeMarco, etc.). We delivered a lot of systems on time and
> within budget. Fast forward a few years and I encountered OO for the
> first time in the guise of Zortech C++. Some of the techniques were
> unlike what I knew, but many were logical extensions of good
> procedural practices. OO was more evolutionary than revolutionary and
> definitely a valuable addition to my virtual toolbox.
>
> Most of the experienced developers I know who have proven their
> ability to deliver quality software have similar backgrounds. They
> understand and use the procedural and relational approach very well,
> and they also have OO techniques to draw on.

Nobody ever agrees on when to use which paradigm. Plus, mixing
gajillion paradigms can create quite a mess and confusion and
translation effort between them.

>
> >> I don't know of anyone who has used OO in a large project and
> >> regretted having those tools available.
> >
> > I've heard mumblings of things not going so smooth. Satisfaction
> > surveys by Yourdon showed no improvement.
>
> Creating new things in the real world can be difficult. Complex
> projects never go completely smoothly. In my experience and that of
> other competent software developers I know, OO techniques provide
> mechanisms for managing dependencies and complexity that result in
> better quality software delivered more reliably.

I have yet to see coded examples of it being better in my domain.

>
> Where have you used OO techniques and found this not to be the
> case?

I cannot remember specific details, but putting OO in the code did not
improve the app any way that I saw.

>
> > Further, OOP tends to *create* large projects.
>
> This is not my experience. Having more techniques available to
> manage dependencies and complexity helps to make systems as simple as
> possible. Restricting the available tools adds to the effort.

To a point, but paradigm potpourri has its own downsides, as described
above.

>
> What project have you worked on where the use of OO techniques
> resulted in a larger amount of effort for the same level of quality
> that could have been attained more simply without them?

Polymorphism is too course a granulation of variation management. I
find set theoery better and OOP does not natively support set theory.
OO's other approach to variation management, aggregation and
composition are the same kind of navigational messes that prompted Dr.
Codd to rework navigational structures. OO results in a big sea of
classes with no easy to way navigate them all. Graph-oriented query
systems to sift and study the pointer sea (navigational) thus far
stink. They sucked in the 60's and they still suck as classes/objects.

The Document Object Model is another example of an OO mess.

>
> > Procedural/relational projects tend to break big problems into
> > smaller applications that feed off of databases. The database is the
> > Nile and small apps are villages on the shore. Thus, one mostly only
> > has to know about the schemas and a few sanctioned library routines.
>
> First, OO techniques permit just as much if not more functional
> decomposition as procedural. OO subsumes procedural techniques.

They are both Turing Equivalent.

>
> Second, the "big central database" architecture is not
> universally applicable. Even when it is possible to architect a
> system that way, it does not always provide the best structure for the
> solution.

For 90%+ of all biz apps I've worked on, it was, especially if
nimble/local database engines are provided to suppliment big-iron DB's.
Ironically, chasing OO is one reason why vendors abandoned nimble/local
DB engines in tools in the 90's, setting app development back a decade.

>
> >> "The only game in town" is overstating the case a bit, because
> >> similar techniques can be applied in most non-OO languages and
> >> functional languages, for example, offer still other approaches.
> >>
> >> Out of curiosity, what do you mean by "systems software?"
> >
> > Tool building, such as OS's, RDBMS engines, compilers, device
> > drivers, network engines, etc. Polymorphism seems to have more use
> > there.
>
> I have personally seen OO techniques used successfully in domains
> ranging from broadcast video to pharmaceuticals to finance to
> telecommunications. These are commonly considered "business
> applications." Where have you seen OO techniques fail in such
> systems?

I don't think they outright fail. They are just harder to get right and
are messier than alternatives. There are no consistent, tested, and
documented rule for converting biz logic to OO, and the issue of
categorization and classification of things/objects/nouns/variations
tend to fight with RDBMS for that role. Classification of business
nouns belongs in the database IMO, not app code, and if you do that,
you take away what OO usually does.

>
> Sincerely,
>
> Patrick
>

-T-

From: Patrick May on
"topmind" <topmind(a)technologist.com> writes:
> Patrick May wrote:
>> "topmind" <topmind(a)technologist.com> writes:
>> >> Actually, there is considerable evidence that some of the
>> >> concepts typically grouped together under the term "object
>> >> oriented" provide significant benefits in managing dependencies
>> >> between software components, which results in more maintainable
>> >> software.
>> >
>> > The only examples I've seen are from people who didn't know how
>> > to use procedural and databases well.
>>
>> You need to get out more. ;-)
>>
>> I started out after college working for a CASE tool company
>> that ate its own dog food by using the tool to deliver projects.
>> It was entirely based on E-R and dataflow modeling (Gane-Sarson,
>> Yourdon-DeMarco, etc.). We delivered a lot of systems on time and
>> within budget. Fast forward a few years and I encountered OO for
>> the first time in the guise of Zortech C++. Some of the techniques
>> were unlike what I knew, but many were logical extensions of good
>> procedural practices. OO was more evolutionary than revolutionary
>> and definitely a valuable addition to my virtual toolbox.
>>
>> Most of the experienced developers I know who have proven
>> their ability to deliver quality software have similar backgrounds.
>> They understand and use the procedural and relational approach very
>> well, and they also have OO techniques to draw on.
>
> Nobody ever agrees on when to use which paradigm.

I was responding to your statement that people who find benefits
in OO techniques don't understand procedural and relational
techniques. That's not at all the case.

> Plus, mixing gajillion paradigms can create quite a mess and
> confusion and translation effort between them.

The nice thing about software development is that it gives us so
many ways to cause ourselves problems. Your objection is just as
valid within a "single paradigm" as a "multi paradigm" environment.

I used the scare quotes because the term "paradigm" is overused
and emphasizes the differences between two somewhat arbitrary sets of
techniques at the expense of the similarities. OO is a superset of
procedural. It may be difficult to use an OO style interface from
some procedural languages, but the reverse is not often the case.

The solution to some problems is expressed better declaratively
than procedurally, others better in an OO style than declaratively,
still others better functionally than object orientedly (to coin an
inelegant phrase). Simply knowing these approaches allows one to see
more solutions. Having all of these techniques available is what
distinguishes a master developer from an apprentice.

>> >> I don't know of anyone who has used OO in a large project and
>> >> regretted having those tools available.
>> >
>> > I've heard mumblings of things not going so smooth. Satisfaction
>> > surveys by Yourdon showed no improvement.
>>
>> Creating new things in the real world can be difficult.
>> Complex projects never go completely smoothly. In my experience
>> and that of other competent software developers I know, OO
>> techniques provide mechanisms for managing dependencies and
>> complexity that result in better quality software delivered more
>> reliably.
>
> I have yet to see coded examples of it being better in my domain.

What industry do you specialize in? What kinds of projects? I
can't imagine a situation where having fewer options would be
preferable.

>> Where have you used OO techniques and found this not to be the
>> case?
>
> I cannot remember specific details, but putting OO in the code did
> not improve the app any way that I saw.

Your statements contradict my experience and that of many people
I've worked with. I'd like to understand where OO techniques have
failed to add value for other people and why that was the case. Any
specifics you can provide would help.

>> > Further, OOP tends to *create* large projects.
>>
>> This is not my experience. Having more techniques available
>> to manage dependencies and complexity helps to make systems as
>> simple as possible. Restricting the available tools adds to the
>> effort.
>
> To a point, but paradigm potpourri has its own downsides, as
> described above.

Again, I haven't found this to be the case in general. I've been
using service oriented architectures (SOAs) over the past few years.
One of the advantages of SOA is that the implementation of each
service can use the most appropriate technology.

>> What project have you worked on where the use of OO techniques
>> resulted in a larger amount of effort for the same level of quality
>> that could have been attained more simply without them?
>
> Polymorphism is too course a granulation of variation management.

But where, specifically, have you used OO techniques and found
that it resulted in a greater amount of effort for the same functional
and non-functional capabilities that could have been more easily
delivered using only procedural and relational techniques?

>> > Procedural/relational projects tend to break big problems into
>> > smaller applications that feed off of databases. The database is
>> > the Nile and small apps are villages on the shore. Thus, one
>> > mostly only has to know about the schemas and a few sanctioned
>> > library routines.
>>
>> First, OO techniques permit just as much if not more
>> functional decomposition as procedural. OO subsumes procedural
>> techniques.
>
> They are both Turing Equivalent.

So is INTERCAL, at least in theory. Turing equivalence is
meaningless in practice -- what's important is expressiveness. Having
more tools in the virtual toolbox allows for greater expressiveness.

>> Second, the "big central database" architecture is not
>> universally applicable. Even when it is possible to architect a
>> system that way, it does not always provide the best structure for
>> the solution.
>
> For 90%+ of all biz apps I've worked on, it was, especially if
> nimble/local database engines are provided to suppliment big-iron
> DB's.

This doesn't correspond with my experience, nor with that of many
people I've worked with. What details can you provide about your last
three or four projects without violating any NDAs?

The most obvio