CS371P Spring 2021: Samantha Tuapen

Hey everyone! This is my final blog post for CS 371P: Object-Oriented Programming

Since this is my final blog post for this course, I wanted to leave some key takeaways I learned and my overall thoughts on this class.


  • 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
  • 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?

Were there any other particular takeaways for you?

Also, C++ seems like an intimidating language at first, but I’ve grown to admire the flexibility it has and have learned a lot about the language from this course.

How did you feel about cold calling?

How did you feel about office hours and lab sessions?

What required tool did you not know and now find 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?

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

Give me your suggestions for improving the course.

And that’s a wrap on CS371P for me! If you’re contemplating taking this course, do it! Object-Oriented programming is a fundamental concept all CS people should understand and Professor Downing does a great job of laying down the foundation.