CS371p Fall 2021: Zein Fakhreddine: Final Entry

Zein Fakhreddine
4 min readDec 7, 2021

The following are 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?

Testing was described at the beginning of the semester in lecture but I got most of my familiarity with it from the projects. I felt this was a good way to learn testing.

I have never had such an in-depth analysis of iterators before this class. Professor Downing was excellent as describing the different types of iterators and how to write algorithms and containers to account for them.

On top of that professor Downing explained in great detail how certain data structures, such as vector, were implemented in c++ which gave me insight into how these data structures are built. The lectures around pointers were also very in depth and gave me a great understanding of why to avoid using new and delete when possible. Many of the papers we had to read emphasized the idea of reusing and symmetry in the code.

The exercises and quizzes helped to instill the collaboration portion of the class. Both of these would involve a great level of working together and learning from each other to get the job done.

The idea of constantly refactoring was instilled by Professor Downing’s iterative steps to teaching all of our topics as well as the papers.

Were there any other particular takeaways for you?

The main take way I have coming from this class is that having a very deep understanding of the programming language makes you a better programmer.

How did you feel about cold calling?

At first I was nervous about cold calling but as the semester went on I realized that it is a great way to keep you engaged and focused on the lecture. Professor Downing is also very thoughtful and takes his time with each person he calls on making sure they fully understanding the lecture material.

How did you feel about specifications grading?

The grading system was different this year and was based on EMRN scale. I did not really think too much about the grading system. It took a bit more work to get the hang of it and I had to check the grading policy for this class more often than other classes. I can’t say it made me work any differently than I do in other classes or in previous classes I have taken of Downing's were he uses a typical grading system.

How did you feel about help sessions and office hours?

I did not attend help sessions or office hours for this class this semester. That being said I felt they were always open to me and I have heard that they were a great resource for other people.

How did you feel about the support from the TAs?

The TAs were super helpful and responsive on every issue I have had. They graded assignments in an timely fashion and gave relevant feedback when requested. They would also be active in our Zoom chats answering questions when needed.

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

I found Docker to be a great resource that I had not used before. It was a great help when getting started on the projects and gave me a consistent environment to work with them on.

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 found this principles to be very insightful as related to OOP principles. Many of them connected well to each other and did a great job at explaining their design principles, why they’re useful, and examples on bad vs. good design.

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

At first upon reading the titles of these papers I was a little confused, but the author did a great job at explaining his reasoning and explaining workarounds to use other than getters and setters.

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

I hope in future classes Professor Downing requires more than one person for the projects. I find working with someone else is a much more realistic experience and I end up learning a lot more when working with someone else. This semester it was optional but I hope in the future it’s required because I find that, at least for me, that gets me more motivated to complete the projects with other people in a timely fashion.