CS371p Fall 2021: Xuefei Zhao : Final Entry

Xuefei Zhao
3 min readDec 5, 2021

Long-term takeaways from this class:

test first, test during, test after; test, test, test

when designing algorithms, demand the weakest iterators (e.g., bidirectional vs. random access)

when designing containers, provide the strongest iterators (e.g., random access vs. bidirectional)

build adapters on top of containers and iterators

do not use new and delete; use allocators instead

always look for reuse and symmetry in your code

collaboration is essential to the quality of your code and to your well-being in producing it

refactor, refactor, refactor

make your code beautiful

How well do you think the course conveyed those takeaways?

I think this course did a wonderful job conveying these takeaways. Professor Downing usually introduces the ideas in the lecture, and he always makes sure everyone understands the idea before moving on. In addition, we had class exercises to learn how to implement these ideas into real C++ code. We also get additional practice in the projects, and it makes me really understand the takeaways.

Were there any other particular takeaways for you?

I didn’t know C++ before this class, and I’m now proficient in this language. In addition, I learned a lot from the weekly papers, especially in OOD. I actually read the papers before in SWE class last semester. However, the focus of that class was not OOD, so I didn’t learn much from them. When I re-read the papers with what we covered in class, I now have a better understanding of the principles for OOD.

How did you feel about cold calling?

Having this class online, I think the best thing about cold calling is we get to know each other better. In the first round of the cold calling, we got to introduce ourselves to the class, and it’s interesting to know about people in this class.

How did you feel about specifications grading?

It took me some time to understand the grading. I would say the tokens were a bit confusing to me at first, and I personally feel we are given too many tokens that we never get to use.

How did you feel about help sessions and office hours?

I think they are very helpful. The projects setup might be hard to understand at first, and the TA did a great job explaining the given code.

How did you feel about the support from the TAs?

I received help on my projects and in-class exercises, and I think the TAs gave me insight almost every time.

What required tool did you not know and now find very useful?

I don’t think there is a new tool for me, but I’d like to mention the docker is very useful.

You should have read five papers that describe SOLID design: Single responsibility, Open-closed principle, Liskov substitution, Interface segregation, Dependency inversion. What insights have they given you?

The ways to design a program described in the papers are often different from what I expected. I used to think a lot from the programmer's perspective and want to make the code easy to understand. However, after reading the papers, I think we should focus more on the user side to make the program more effective.

You should have read two papers that advised minimizing getters and setters. What insights have they given you?

I was actually surprised about the idea to avoid getters and setters. From my previous experience, getters and setters are important ways for a class to communicate with others. However, after reading the papers and implementing the idea in Darwin and Life, I found getting rid of getters and setters did help me understand the Single Responsibility Principle, and it magically made the code more flexible.

Give me your suggestions for improving the course, but apologies in advance; specifications grading will remain.

This course is really doing an excellent job! One suggestion I can come up with is maybe also summarizing the papers in the lectures, so people might pay more attention to it.

--

--