CS371p Fall 2021: Shikhar Gupta: Final Entry

Shikhar Gupta
4 min readDec 5, 2021

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?

I think the course conveyed these takeaways really well. Other than just learning the core features of C++, we were taught to really think about all the aspects of our design while writing code rather than just doing what we are used to or what seems easiest. Having all of these takeaways in mind while doing the projects really helped us to see what it is like to try and write industry-standard code and critically analyze our code for any bugs/errors on our own.

Were there any other particular takeaways for you?

Another major takeaway from this class for me is to make our code as flexible and extendable as possible and to think forward to how the classes could possibly be modified or used in the future to implement more features. I, personally, tended to have a habit to write code that works for whatever problem I have but that couldn’t be extended to work on other similar problems, but this class made me change my mindset and look to create more adaptable code.

How did you feel about cold calling?

I’m used to the cold calling having taken SWE in my previous semester, and I think it is a great tool to make sure everyone is staying focused and involved in the class. Especially in times of Zoom where it is very easy to doze off and not pay attention, cold calling ensures that everyone knows what is going on at all times.

How did you feel about specifications grading?

I did like the specifications grading in the sense that it does definitely produce a better learning experience because it forces you to really pay attention to all aspects of the class and stay engaged the whole time rather than just playing a numbers game. It was also nice not to have to worry about number crunching.

How did you feel about help sessions and office hours?

The office hours and help sessions were very helpful to me, particularly during the last few projects which were more design-heavy. Going to the office hours and asking about how I should go about creating an overall class and method structure was very helpful in being able to complete the projects.

How did you feel about the support from the TAs?

The TAs were generally very responsive on Ed Discussion and helpful during office hours as well. However, I do wish that the virtual token and E redemption process happened a little bit faster, but I do understand that it can get delayed due to the sheer number of students in the class. There could possibly be a tool in the future to facilitate these requests rather than doing them by hand.

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

I really liked using Docker because it is a nice way to be able to write and test code on my own system without having to download a bunch of software on my own device. I also liked the mapping feature where I could edit on VSCode on my local device and the changes would save both to the docker image and to my personal files so I have them if I need them.

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?

The papers really introduced concepts of Object-Oriented Design that I never really thought too hard about before, but that I now realize are very important to a good class and software design. It helped me to think critically while doing projects about exactly what purpose every class member, method, and class serves to the overall goal of the software. It also helped with making my code more reusable and flexible.

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

Minimizing getters and setters was probably the most difficult aspect of the past two projects, but the general idea that the class that has the private information should be the one to use it is a simple yet intuitive concept that I learned to utilize in my class design. This concept also definitely helps to make code more adaptable and flexible for future modification or extension. I will definitely try to minimize getters and setters in the future as well.

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

Overall, I think the class has been run and managed very well. I would, however, suggest creating an automated tool of some sort to manage the virtual token and “E” system because I think this will definitely make things easier both for the graders and for the students. I also think it was difficult to get help on exercises from the TAs/Dr. Downing sometimes, and this would cause us not to finish exercises sometimes, so perhaps a better tool to manage this would be helpful for future classes.

--

--