[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: gEDA-user: Languages etc



On Friday 23 September 2005 01:48 pm, Dave McGuire wrote:
> On Sep 23, 2005, at 9:31 AM, Robert Thorpe wrote:
> > used properly.  Java programs that are slow are mostly slow because
> > ... 1) Java programmers often program in a way that's prone to be
> > slow, they
> > generalise things a lot, they write programs that produce a lot of
> > objects and need a lot of GC.
>
>    I have to speak up in agreement here.  I'm a procedural programmer
> (C, mostly) but I've worked on quite a few Java projects over the
> years.  I have narrowed this problem down to programmers whose first
> exposure was to object-oriented languages like Java or C++.

This is not true.  Given a choice, I prefer someone who started an 
object oriented language, all else being equal.  But someone who only 
knows from that first course, and nothing else, is a big problem, 
regardless of language.

> Thinking 
> *exclusively* in object-oriented terms tends to result in
> unbelievably inefficient code, because computers are inherently
> procedural things, and pretty, nicely-abstracted object-oriented code
> gets turned into a most decidedly procedural instruction stream at
> the time of compilation or execution.

Thinking exclusively one way leads to problems.  There are many ways to 
look at a problem.  Forcing everything to one way, or blindly avoiding 
an approach both are bad.

>    One example of this problem is a commercial database application
> that I worked on about three years ago, written in Java.  The primary
> developer was an exclusively object-oriented guy.  He wrote a method
> that executed a JDBC query to retrieve a list of names from the
> database, and another that retrieved the entire record associated
> with a given name.  Then he wrote another routine which used the
> first method to get the list of names, then iterated over the list
> calling the second method to get all the records for all names.  It
> took forever, and was a major bottleneck in the system.  Of course
> the right way to do this was with a single query, which is how I
> rewrote it to solve the performance problem.  The guy had NO clue
> what I was doing.

That last sentence is true, and would still be true if he used C, guile, 
or anything else.  Object oriented is not the problem.  Incompetence 
is.

>    The world is filled to overflowing with Java and C++ code that
> does stupid things like this. 

and C, Pascal, Fortran, scheme, python, ....  If I left out your 
favorite language I apologize.

> Isolation and abstraction from 
> hardware is a good thing, but too much of it results in the need for
> multi-GHz-clocked processors to do the same work we did twenty years
> ago with 4MHz clock rates.
>
>    The point that never seems to enter these peoples' minds is that
> computer processors are procedural things, not object-oriented
> things. A little knowledge about how computers actually *work* would
> result in much, much faster Java and C++ code in the world...but
> people don't seem to want to go to that much trouble, likely because
> writing REALLY FAST code doesn't often get one's name mentioned on
> slashdolt.

One thing I like about C++ is that it is object oriented when I want it 
to be, and procedural when I want it to be.  With STL, I can even treat 
it as a logic language or a functional language when that seems better.  
I can define a class so its objects have one appearance, but are very 
different inside, so I can have both readability and speed.

Don't blame the language.