CS371p Fall 2021: Truman Byrd: Final Entry

Truman Byrd
3 min readDec 7, 2021

Course 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

How well do you think the course conveyed those takeaways?

Overall, I think the course did a great job of conveying all the previously mentioned takeaways. I feel as though I have a much stronger understanding of the design of algorithms & containers, and how to produce these in a way that follows the principles of OOP. In particular, I think I can also understand more of what goes into creating a powerful, sensible interface for a container / class.

Were there any other particular takeaways for you?

I think that in general this course emphasized the importance of having a clear solution design in mind ahead of time. There were a lot of different angles to consider for all of the projects, and so it was very important to have a plan of action in order to avoid writing a bunch of spaghetti code.

How did you feel about cold calling?

I felt that the cold calling was a great way to keep me engaged in lecture without being too stressful. Even when I was not entirely sure what I was supposed to say, it was not a very uncomfortable situation.

How did you feel about specification grading?

On the one hand, I liked being able to know exactly what the requirements were for each grade cutoff without having to do any calculations. It did feel a bit harsh at times, especially because a “B” score in one category gives you a B overall, even if you have an “A” score in every other category. Additionally, I didn’t think that the virtual token system was very smooth. I think it adds too much overhead both for the students and the TAs, and I was generally not a big fan.

How did you feel about help sessions and office hours?

When I went to help sessions, I found them very useful. There are often times where you might get stuck on the same issue for a very long time, and usually the TAs can point you in the right direction quickly.

How did you feel about the support from the TAs?

The TAs did an excellent job supporting the class! The one thing I would have liked to see was a specific rubric for why I received the score I received on projects.

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

I was not at all comfortable with Valgrind prior to this course, but I now feel a lot more comfortable with it. It feels like an essential tool for debugging and large piece of C/C++ software.

What insights did the SOLID design papers give you?

I found these papers to be one of the most valuable sources of info on OOP for the course. I did not have a solid grasp on what OOP was prior to this course, but those papers gave a lot of great specific examples about designing functioning, maintainable classes and interfaces. In particular, I think they did a great job at emphasizing how important it is to make your code maintainable.

What insights have the papers on minimizing getters/setters given you?

The getter/setter papers brought up an issue that I had not previously thought about, but gave a really good point about object oriented design. I think a lot of people who learn Java as their first language assume that getters/setters are fundamental to any object, but the papers revealed that this is often a symptom of poor, lazy design choices. In general, classes should use their information to do work for you, not just give you the information to do work on.

Give me your suggestions for improving the course.

If specifications grading stays, I think there’s room for improvement for the implementation of the virtual token system (although I don’t know exactly what that would look like.) I would also like to see more of the lectures explicitly related to object oriented design; I think that our lectures learning the C++ language were incredibly valuable and did relate to OOP overall, but I would have liked to see that connection pointed out more often.

--

--