Some programs do not generate all moves at once, but do it in several stages (i.e. hash move first, then captures, then killer moves, then all the rest in a chunk) on the premise that if one of the early moves causes a cutoff, then we may save on the effort of generating the rest of the moves.
Check extensions. When the own king is in check only generate moves that can be made to avoid the check. [done]
Move Prioritization
Move Ordering.
Best Move (from hash table).
Captures:
by Most Valuable Victim (MVV)
by Least Valuable Attacker (LVA).
Pawn Promotions.
History Heuristic.
Killer Moves.
Move Storage
FEN. [done]
PGN. [done]
Own format. [done]
Searching
Alpha / Beta search. [done]
Negamax search. [done]
Aspiration Windows.
MinMax search. [done]
MultiPV (Single, non-PVS search).
Multi Threading.
Ponder.
Principal Variation Search (PVS).
Quiet Search (Quiescence Search). [done]
End-Games.
Common end-games (K vs KP, K vs KQ, K v KR, K v KBN).
Pruning
Futility Pruning.
Null Move Pruning.
Late Move Pruning (LMP).
Late Move Reductions (LMR).
Evaluations
Standard Evaluations:
Mate. [done]
Stalemate. [done]
Draw by 3-fold repetition.
Draw by insufficient material. [done]
50 moves without a pawn move. [done]
75 moves without a capture or pawn move. [done]
Material Values. [done]
Tapered Evaluation - Different values at different stages of the game (beginning, middle-game, end-game). [done]