Course Reflection (by Yanchang Li)
CMT119 gives me a deeper understanding of computer programming. Although I have learned some programming language and software knowledge before, I have never learned to view algorithms from an serious, academic perspective. Most of the time, I try to solve the problems at hand with human way of thinking, instead of thinking deeply about how to use the existing algorithm to solve the problems through abstraction, how to discover patterns, and how to generalize the existing algorithm. As a result, I have to take duplicate efforts on dealing with similar problems. After taking this class, I realized that using algorithms to solve problems is a systematic process. We should carefully consider all edge cases before proceeding to implement algorithms. Writing codes with carefully thinking often produces omissions. I also recognized the importance of efficiency to a program. Good algorithms can save a lot of time, and parallel programming maximizes the utilization of a computer. As the amount of data increases, efficinecy becomes as important as correctness.
Also, I have learned to use pseudocode to design algorithms. This made me realize that programming languages are not the main subject of computational thinking. After we design the pseudocode of the algorithm, it can be translated into any programming language. Despite the syntactic differences, they have similar execution efficiency. It's very different from what I used to study for a language. In addition, I have learned the knowledge of writting a website from this course, which has improved my programming skill. I think in future CS courses, what I have learned in this course will help me to think deeply, not be limited to the problem at hand, but abstract the problem like a computer scientist and design better algorithms.