survey programming techniques