Robots have become significantly more powerful and intelligent over the last decade, and are moving in to more service oriented roles. As a result robots will more often be used by people with minimal technical skills and so there is a need for easier to use and more flexible programming systems. This paper reviews the current state of the art in robot programming systems. A distinction is made between manual and automatic programming systems. Manual systems require the user/programmer to create the robot program directly, by hand, while automatic systems generate a robot program as a result of interaction between the robot and the human; there are a variety of methods including learning, programming by demonstration and instructive systems.