Building a chess engine: from bit twiddling to search heuristics