CS 371p Spring 2021: Final Entry

Bruce Luo
CS371p Blogs
Published in
3 min readMay 8, 2021

--

Long term 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
  • 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 believe that this course conveyed all of the above well. Professor Downing will go out of his way to emphasize the importance of such concepts throughout each lecture, and the daily quizzes help reinforce your memory as well.

Were there any other particular takeaways for you?

This is more of a general thing, but after learning more about object-oriented design, I feel that I’m much better equipped and I’ll be sure to think more about the pros, cons, and consequences of systems that I may design in the future.

How did you feel about cold calling?

I was anxious about the cold calling at first, but after a couple weeks, it really just becomes routine and nothing that scary. That aside, the good part is that cold calling helps keep me engaged during lecture, and I think I’ve learned more from conversations between Professor Downing and various students that I would have through standard pedagogical practice.

How did you feel about office hours?

I only attended once, but they are definitely a help if you need help for code-specific questions, as the TAs will set aside time individually for each person.

How did you feel about lab sessions?

I never attended a lab session, but I’ve heard that they can be useful for general tips for design on projects.

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

I found the make tool to be extremely useful. I did know about it beforehand, but had never used it extensively before. It helps greatly in development by automating the build process for your projects, and I’ll definitely be using it in the future.

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?

A lot of it may seem basic at first glance, but it’s always nice to have a more rigorous examination of design concepts. I feel that I’ve learned a lot that I can apply in the future.

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

I did not end up reading those two papers, but from what was discussed in lecture, I recall that getters and setters invalidate one of the main advantages of OOP design — encapsulation of behavior. Hence, they should be avoided if possible.

Give me your suggestions for improving the course.

I can’t think of anything to improve. This is a great course with a great professor, and I’d recommend taking it (doubly so if you’re interested in learning C++ as well).

--

--