Dave, The only thing that is "fast enough" is some fixed algorithm that tends to be boring. The whole reason for Moore's Law is that few people think their computers are fast enough. They will NEVER be fast enough and we will always want our computers to be faster because they clearly can do more when they are faster.
This by itself refutes everything you said. It's true that some things are good enough even on the computer you had 20 years ago. I don't know about you, but I don't really care about that. If you don't care to have a stronger GO program, then you can be perfectly satisfied with non-scalable GO programs even though they are limited and cannot be improved. And just because one might be perfectly happy to be a few years behind, doesn't mean someone else should be too. Programming in C is like being about 1.5 years ahead when it comes to playing strength in a go program. If you want to wait a year and half, more power to you. And I have no idea what you mean by "brute force." That way of writing go and chess programs died decades ago, nobody writes brute force go (or chess) programs that I know of. >From the context of your email, you seem very convinced, almost contemptuous of the idea that a computer program should require more than some fixed amount of computational resources. Since computer go is not solved, it seems like a trivial conclusion that it will require MORE computational resources than we have available right now. What basis do you have for thinking otherwise? Do you believe GO is not NP hard or that there is some intrinsic reason that a properly programmed computer would not benefit from more resources? I have more comments below: Dave Dyer wrote: > > I disagree with almost everything Donn wrote. > > Thanks to Moore's law, it is somewhere between unusual and rare for > the execution "speed penalty" of the language to matter, and if it > matters today (some but not all languages are fast enough), it won't > matter when the program is finished. Huh? When the program is finished, there will be faster computers. I understand that. But I think you overlooked the very trivial point that if you had coded in C, the program will STILL be stronger (on this new hardware) than if it was programmed in Ruby. > Thought experiment: 5 years ago, C was "fast enough" but java with > a 50% speed penalty was "too slow", then today both are "fast enough". C is still not fast enough, and thus Java will never be. This is moving target, not a fixed target. If it's a fixed target and you don't care about advanced programs (just static fixed algorithms) then you are right. > > Note that /some/ programs will always be too slow, so the speed of > the program also doesn't matter. A brute force Go program will never > be fast enough in any language on any computer. Exactly! That's is exactly the point. There are a few programs that don't care how fast the computer is, but those are mostly boring programs that we don't care so much about. Text editors for instance run just fine on old computers. We don't need Moore's Law for those applications. > --- > > For most other programs what matters is the time to develop the program, > not the execution speed once developed. That said, current monte carlo > programs are in the zone where speed does matter. I suspect that what matters to most people is the final playing strength of the program. You don't seem to care about this and so you probably optimize for development time. In such a case, if your goal is to minimize the amount of time you spend typing in the program (and getting it right), and you don't care how strong it is, then you are completely correct. However, for me the coding time is very small even though the development time is large. I spend more time thinking about the program than coding it, and I spend a great deal of time waiting on the computer, because I have no clue what will work and I must test it. I can't just furiously type in code. It would be ridiculous for me to optimize for the coding case where I spend the least amount of time. By using C, I optimize the case where most of the time is spent. > There are cases where the intrinsic features of a language make > a huge difference to a particular strategy, but most modern languages > have very similar feature sets, and it's not too likely that unusual > language features are a big advantage. Agreed. In fact, there is no strong argument for high level languages due to this in my opinion although there are some benefits. I don't deny the benefits, but I consider them outweighed by common sense. > Overwhelmingly, two factors govern productivity for something like > go programming. > > (1) the quality of the development environment. > > (2) the availability of suitable libraries which contain debugged > code that will be useful. Yes, C is very strong in the second case and although it's not personally my main concern, it's definitely a benefit. The quality of the development environment definitely makes a difference in the coding speed. GCC in linux is not very strong here, but it's certainly adequate. I have never felt the need to use one of the IDE's - perhaps I should. You see to have very old-fashioned ideas about the whole programming philosophy. You take the view that a project like go is a fixed static "task" and that you must optimize the programmers time in typing in code. And then you are "done." And since it takes many man hours, it doesn't matter if it takes 10 seconds to find a move instead of 1. After all, waiting an extra 9 seconds is nothing compared to the hundreds of hours programming this task. Or you can wait 5 years and that 9 seconds is now 1 second. This model might be reasonable in a corporate environment where you have different priorities, but the whole POINT of a GO program is to make it as strong as possible. It's like a man who restores old cars - his goal isn't to minimize the labor, it's a hobby for him and he isn't about the quantity, he is about the quality. He wants the car to be wonderful when he is done and will spare no reasonable expense. However, if you had a shop where you did this for profit, you would count every cost and take the shortcuts. You would maximize your profits, do things with machines instead of your hands and so on. Writing scalable go programs that have any chance of being competitive requires you to NOT tie your hands behind your back. You will (unfortunately) need a fast computer and you will need to program in C or assembler. I don't like this any more than you do, but it's a cold harsh reality. Pretending that it will suddenly be competitive in a few years (when computers get faster) is pure nonsense, the other programs will benefit too and thus you will NEVER catch up, even if your algorithm is just as good. If your algorithm is actually BETTER, then you will STILL benefit from a faster computer in 18 months. At some point you will STILL be forced to upgrade your computer if you want to remain competitive. The goal isn't necessarily to be competitive, it may simply be to have the strongest program you can make. In this case, the arguments are all the same. Make your algorithms smarter, and it will get stronger. Get a faster computer and it will get stronger. Do either one and your program will be stronger, but do both and it will be a lot stronger. Go ahead and try it. Write a non-scalable program, use the slowest language you want to and run it on a 10 year old computer. It shouldn't matter what the final program runs on because if it runs good on the 10 year old computer you won't need a newer computer. - Don > ------------------------------------------------------------------------ > > _______________________________________________ > 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/