Programming by Doing