Surprisingly, I find myself to disagree with almost everything in Bob's last two posts, probably because I am a high-level guy while Bob is a low-level guy.
bob wrote:Look at the programs that have switched, from Rybka on down. It is not easy to switch without a rewrite,
In my experience, it
is easy to switch without a rewrite, and I have done so several times. I would say that if switching between a mailbox and bitboard board representation without a rewrite is difficult, you either have a poorly written program which lacks a lot of simple abstractions, or a program with a huge amount of magic, low-level optimization tricks. Crafty, of course, is in the latter category, and I greatly admire your skill in writing complex blazingly fast low-level code with hardly any bugs. I could never have done it myself.
For a beginner, setting out to write madly optimized code from the beginning is obviously a bad idea. For this reason, I also disagree with the point you made in another post:
Start with known good approaches to doing things. Magic bitboards for example. Because you will likely "build around" core decisions, and if your core decisions are bad, all the code built around them have to be rewritten as well when the core code changes...
I don't think this is very important. Beginners should be more concerned about flexibility and debugability than with speed, and should therefore make the high-level parts of the programs as agnostic as possible about the board representation. It is far more important that the board representation is easy to replace than that it is extremely efficient. Different board representations have different strengths and weaknesses, and which one is faster in one particular program depends on what sorts of questions that program asks in its search and evaluation function. Beginners don't know what sort of questions they want to ask in their search and eval, it is therefore useful to postpone the decision about board representation, and to facilitate experimentation.
because now you think "sets" (bitmaps) rather than array loops.
I've found that it hasn't had any impact whatsoever on how I think. Regardless of my board representation, I tend to think in terms of chess concepts like mobility, pawn structure, hanging pieces and king safety.
This takes some getting used to, so the learning curve is pretty slow.
I don't recall any learning curve at all. It was just a low-level implementation detail. Perhaps it's because I still haven't learned or understood anything, but I would like to think I am not quite
that slow and stupid.
Tord