Skip to content
Naman on GitHub Naman on Twitter

CS 371p Spring 2024: Final Entry: Naman Arora

Naman Arora

The long term takeaways from this class are:

  • 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 containers or 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
  • make your code beautiful

How well do I think the course conveyed those takeaways?

I think the course did a solid job conveying those takeaways. The emphasis on testing throughout the development process, from before coding to after implementation, is crucial in ensuring code quality. Similarly, highlighting the importance of choosing appropriate iterators and containers aligns with best practices in object-oriented design. Encouraging reuse, symmetry, and collaboration further reinforces good programming habits. These concepts were integrated into the curriculum well and were reinforced in practice, both in projects and excercies.

Were there any other particular takeaways for me?

One particular takeaway for me would be the emphasis on building adapters on top of containers and iterators. This approach not only promotes code reuse but also fosters a deeper understanding of how different components can be composed to achieve desired functionality.

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

I found Google Tests particularly useful. Automated testing frameworks like Google Test can significantly streamline the testing process, ensuring thorough coverage and allowing for easy regression testing.

In the end, how much did I learn relative to other UT CS classes?

This class provided a comprehensive understanding of object-oriented programming principles, testing methodologies, and practical coding skills. As a result, I learned an equal amount relative to other UT CS classes, in terms of educational value.

Pick at least 5 of the following that I felt passionate about, tell and write about whether I loved or hated them, and give any suggestions for improving them.

  • specifications grading
  • cold calling
  • TA help sessions and office hours
  • Ed Discussion
  • daily quizzes on Canvas
  • quizzes sometimes being repeated to give you a second chance
  • pair programming on exercises on HackerRank
  • weekly blog entries
  • weekly papers on Perusall
  • projects on HackerRank
  • rubrics on GitLab issues
  • pair programming on projects
  • check test data
  • Google Tests
  • acceptance testing
  • UML

Feedback on Course Aspects

  • Rubrics on GitLab issues: I really liked the rubrics on GitLab issues, as that made it easy to track the completion of the project and make sure neccessary components for the submission were completed.
  • Daily Quizzes: I did not enjoy the daily quizzes at all. They felt overwhelming, and sometimes not having a depth of understanding in the quiz's topic caused me significant difficulty. I think you should consider reducing the frequency of quizzes or incorporating them into class activities to make them less burdensome.
  • Pair Programming: I really enjoyed pair programming on the exercises and the projects, as they were a great way to learn from each other. Pair programming encourages collaboration, problem-solving, and knowledge sharing among students.
  • Specifications grading: I liked the specifications grading, which provided clarity and structure to assessments, ensuring that students understand what is expected of them.
  • ED Discussion: I really liked using ED Discussion, as Ed Discussion can facilitate peer-to-peer learning and collaboration, allowing me to ask questions and get insights outside of class.