The key to programming courses, including programming languages, data structure, algorithm design and analysis, and so on, is to polish students’ programming skills solving problems. The current programming courses in universities are mainly classroom-teaching models, and students’ skills solving problems by programming can hardly be polished. Polishing students’ programming skills solving problems is implemented by teaching material construction and curriculum construction. In teaching material construction, the book series “Collegiate Programming Contests and Education” focus on polishing students’ programming skills solving problems in a systematic way, based on programming contests’ problems. Experiments, consisting of programming contest problems and their analysis and solutions, are basic units for the book series. The curriculum construction's guiding ideology is programming is a technology. In curriculum construction, first, the case teaching is widely used based on experiments. Students are put into a case of a problem description, apply knowledge that they have learned, think how to solve the problem, and propose the algorithm. And after students design the algorithm solving the problem, they need program and debug to pass all test cases within the time and memory limit. Second, informatization technologies, such as online judge systems, and virtual online contests based on online judge systems, are integrated into courses. Online judge systems are online systems to test programs whether is correct or not in programming practice. These systems can compile and execute programs, and test programs with the input for test data. Online judge systems are the platform on which students polish their programming skills. It has been proved by practice that these works can polish students’ programming skills solving problems efficiently.