I think we are missing the point of programmer productivity with higher
level languages.   High level languages MIGHT improve the speed at which
you write code,   but usually that is a minor concern.     In computer
GO, what you want is the pathway that gives you the best programs in the
least amount of effort. 

For that,  C currently appears to be the best choice.    This in not
just my opinion, there is empirical evidence to support this claim. 
Take a close look at the very best GO programs in the world,  and I
doubt you will see Ruby and Python programs.   I doubt you will see Java
programs.     All of these programming languages,  as wonderful as they
may be and most of which claim dramatically increased productivity,
simply are not "producing."

Most  arguments for using these languages are nonsense.    They focus on
only one aspect of the total picture - how fast you can write bug-free
code.    Some languages are clearly better than others at that but the
biggest factor by far is the programmer herself.

Many say,  "it's just not worth a few percent speedup to code in a low
level language."     I hope you realize that "few percent" is probably
in the best case around 50%.   We could argue about the exact number,
but the fact is that you take a substantial hit programming in Java (for
instance) and that is not even a high level language.

Computer Go is still in the dark ages but is gradually emerging from it
- it's starting to be appreciated that 50% represents a significant
strength improvement.   That probably means it's "low hanging fruit" -
in other words you are probably going to get the most improvement for
your programming time developing and programming in C.    

And yet many will say,  but I would rather spend my time improving the
algorithm in a language that makes it easy to express my ideas.   I
might be throwing away 50%,  but I will quickly make up the difference
with my vastly improved ability to experiment and express my wonderful
ideas.     One might even argue that using a low level language like C
is actually "inhibiting" their ability to forge ahead.

My experience in computer chess is that the people who think this way, 
never catch up.   I call this the drunken sailor approach.   The
metaphor is the drunken sailor who blows most of his paycheck the day he
gets it.   He does this, because it seems to him like a lot of money.  
When there is a lot of money in your pocket,  it's easy to spend it
frivolously and then tighten up when you are almost broke.       

Computers are fast.   You don't mind taking the 2 to 1 hit (or whatever
it is)  for the extra luxury of programming in a high level language. 
However, this mentality doesn't stop here.   If you are thinking this
way,  chances are that you take other shortcuts  for the "long term
good".  

The problem is that you never stop taking the hit.    You say, in 18
months computers will be 2X faster, so it "doesn't matter."   This is
the stupidest thing I keep hearing.     In 18 months you will have a
faster computer,  but your program will STILL be a crippled program that
sucks.    Getting a faster wheelchair doesn't stop you from being
crippled.    The drunken sailor borrows money thinking that his next
paycheck will cover these debts but forgets he will have to borrow money
again.

When I develop my go program,  the vast majority of the development time
is spent by the computer, not me.    I need to optimize the computers
time, not my time.   Whatever the program can do in 1 minute,  I would
like to see happen in 30 seconds.     If I had a network of workstations
my productivity (as measured by program strength) would improve
significantly because I could try a lot more thing in the same amount of
time.    But even if I had such a network,   I wouldn't willingly
cripple it by throwing away half the power.  

In fact, the whole concept is not to optimize what YOU do, it's to
optimize what the computer does.   If you are not stingy about the
performance (playing strength) right from the start you are already
starting from the wrong mentality.     That's probably why the best
programs are in C or assembler - these programmers see performance as
part of the overall whole - not something that is "in their way."    
They don't romanticize their language or the tools they use,  they are
focused on the problem and tend to make the most logical choices, not
the sexiest ones.  

My advice when this question comes up (which language for go programmer)
is to first ask,  what do you hope to achieve?    If you want to build a
high performance go program,  anything other than C or assembler is like
tying your hand behind your back.     If you do this only as a hobby and
have no aspirations (just for fun and pleasure) then by all means, you
will be much happier in a high level language.


- Don





Raymond Wold wrote:
> Nick Apperson wrote:
>
>> But, to be fair, I totally agree that compiling python or ruby would
>> give
>> you noticable speed gains.  And as always, speed comparisons are only
>> useful
>> in context.  In terms of go programming.... if you are prototyping use
>> whatever the hell you want.  If you are finishing something off,
>> don't waste
>> my time with any of those slow languages (that includes java and c#).
>>  
>>
> I would posit that coding go, we are _always_ prototyping.
> _______________________________________________
> computer-go mailing list
> computer-go@computer-go.org
> http://www.computer-go.org/mailman/listinfo/computer-go/
>
_______________________________________________
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/

Reply via email to