Welcome! I'm relatively new to this site as well.mattbrah wrote:2. How much of a speed difference does storing piece positions and movegen via bitboards make? Is the trade off in speed worth the time that it takes to understand and implement bitboards? What is the highest realistic level that it could play at using it's current method and instead focusing on optimizing the search/evaluation?
Since I've written many chess engines using bitboards as well as several different types of array based implementations I will add my 2 cents to help answer this question.
In my experience bitboard implementations, if done correctly, provide about a 2 times increase in nodes per second. They offer more efficient solutions to very important aspects of the game. Writing a quiescence move generator (captures, promotions, and checks only) is much faster with bitboards. Calculating mobility, king safety, trapped pieces, locked pawns, etc are all much faster with bitboards.
That being said, faster move generation and positional evaluation are not going to make an engine a lot stronger on their own. The high branching factor of chess makes sure of that. Good move ordering, smart selective search (at inner nodes as well as quiescence nodes), and good positional evaluation are far more important. Bitboards just help you do those things more efficiently.
I've been working on two engines recently; one uses 0x88 board representation and the other uses bitboards. Aside from using bitboards for move generation and positional evaluation the bitboard engine is identical to the 0x88 engine. The bitboard engine is over twice as fast as the 0x88 engine, but it only achieves slightly higher search depths (about 1 extra ply per move in a blitz game). It's really just the smarter positional evaluation made possible in an efficient manner by the bitboard representation that makes it stronger than the 0x88 engine. The extra speed is of course valuable as well (1 extra ply per move is nothing to scoff at), but I believe the smarter positional evaluation plays a bigger role in it's better play.
In summary, I would recommend thinking of bitboard implementations as an exercise in optimization and a learning experience, but not a priority in developing your first engine. Understanding bit twiddling will be very valuable to you as a programmer in general so it's worth doing in the long run. But don't trip yourself up with it if you're just getting started.
STC