Principles of Artificial Intelligence Programming