CS371p Fall 2021: Andrew Li : Final Entry

Andrew Li
3 min readDec 7, 2021


How well do you think the course conveyed those takeaways?

  • 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

I think that this class really helped me get better at testing my code. Iterators and containers I had already had experience with, but it was nice to get a refresher on them.

Were there any other particular takeaways for you?
I think that the other major takeaway I have is working with a partner. I think that pair programming is an amazing way to program. It helps so much having somebody else coding alongside you, and makes it much more fun as well.

How did you feel about cold calling?
I liked the cold calling — While it seemed daunting at first, it was a good way to make sure that I understood what was going on, and Professor Downing made it easy to discuss the topics so that I never felt bad about not knowing the answer.

How did you feel about specifications grading?
I did not love the grading scale — towards the end, I lost motivation to do the papers because I knew that I didn’t need to do them to get the grade I wanted.

How did you feel about help sessions and office hours?
I did not go very often, but I felt that they were always available when I needed it, and I was always able to get the help I needed.

How did you feel about the support from the TAs?
The TA’s were very supportive and helpful, during office hours and even in class during the breakout rooms, trying to help all of the groups solve the exercises.

What required tool did you not know and now find very useful?
I find Docker to be extremely useful. Whenever I am working on other projects outside of class, Docker is super helpful for setting up an image that me and other people can use with ease.

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?
I feel that these design principles were very insightful and taught me a lot about how many things that I thought were basic principles of object oriented programming were actually design flaws that I never thought of.

You should have read two papers that advised minimizing getters and setters. What insights have they given you?
The two papers that I read about getters and setters really opened my eyes. Before, I always thought that it was weird that getters and setters accomplish a similar thing to private fields, but was always told that private fields are bad but getters/setters were okay. Now I understand that getters and setters have the same problem.

Give me your suggestions for improving the course, but apologies in advance; specifications grading will remain.
One thing that I think may be nice would be to extend the time we have for quizzes. Sometimes the quizzes can be more challenging, and 4 minutes isn’t really enough to finish it all.