Effects of oral metaphors and allegories on programming problem solving