Programming Autonomous Machines