CS 371P Spring 2024: Final Entry

Aryan B Parikh
3 min readApr 29, 2024

--

The key takeaways for this class were:

  • 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

I think the course content did a good job of covering reasons for why these were essential to software design. I think the importance of writing good tests from the get-go became extremely important during the allocator project, when having these helped make designing software easier. Demanding the RIGHT kind of iterator was also made clear, depending on the use case. Building adapters on top of containers became very clear through the exercises, when having adapters for the allocator made things pretty easy. Not using new and delete? Honestly still not sold on it, but I think I’m just a sucker for convenience. I’ve learned the importance of creating symmetry and enabling reuse — this made things pretty easy when designing Darwin and is one of the key principles of object oriented programming. Collaboration is key, and working together on the project and maintaining and issue tracker helped enable this. Making your code beautiful is really important, especially with object oriented design.

Other takeaways-

  • The ethics lectures emphasized the importance of bringing your core values and judgements into the workplace. Culture comes from the top-down, but the decision to implement things is also partially influenced by people who bring their talents to companies.
  • The projects taught the importance of getting things done. Sometimes to get stuff done, you have to prioritize and make sacrifices. And work until the job is done.
  • I did not like specifications grading the way it was implemented this semester. I’d taken a software engineering with Professor Downing in the past, and thought that the class implemented specifications grading as well as it could have been done. However, this semester, the socres required to get A’s in each category were mapped to the percentage values of what an A corresponded to, so to get an A you needed 39 2's or 3's on the quizzes. I think this is a bit unreasonable.
  • Cold calling was fine — I think it keeps the class engaged and the conversations can add a few moments of surprise in the class.
  • TA help sessions and office hours were largely good- I think the TA’s were pretty helpful. I didn’t attend these very often to be honest but when I did go, it was helpful.
  • Ed Discussion was a good place for communication and posting information publicly. Having a public space for discussion, especially to post files for test data generation, was extremely helpful.
  • The daily quizzes on Canvas were fine — I think they were good learning checks and usually pretty reasonable.
  • Having quizzes sometimes being repeated to give you a second chance was pretty nice. It was a second chance, and a good way to check in and reinforce concepts.
  • Pair programming on exercises on HackerRank — Not the biggest fan of these. I used to find groups, including ours, in time crunches regularly. It took too long to get help, because there were so many people who wanted help and not enough people to help everyone. And when you would get help, it would only be for a few short moments because there would be a large backlog of people to clear.
  • I thought weekly blog entries were alright, maybe a bit excessive. I get the rationale behind it — it would help make this class feel like a close group.

Overall, it’s been a fun semester. Glad to have taken the class.

--

--