CS371g Summer 2021: Kevin Wu Final Entry
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?
This course thoroughly conveyed each of these takeaways, as the contents of lectures, quizzes, and exercises showed why each of these practices should be followed.
Were there any other particular takeaways for you?
For me, I think that the course’s suggested workflow for labs greatly increased my productivity during coding and the quality of my solutions, and it is a practice I will continue for the labs next semester when I take CS439. Also, this class helped me learn a lot about the C++ language, not just its generic capabilities, as I never worked with the language before this course.
How did you feel about cold calling?
Personally, I liked cold calling during lecture, as the one-on-one conversation feel is engaging and it gives a natural avenue for the student to ask follow-up questions if necessary. I think cold calling played a big role in keeping me engaged throughout a two hour Zoom lecture.
How did you feel about grading?
This was my first class to use specifications grading with an EMRN scale. I am a bit conflicted on my feelings about the grading system, as although I understand what it is trying to accomplish, I feel like there is a bit too much inherent “gaming of the system” with specifications grading in determining one’s final letter average. For example, because you need all categories to meet the number of E/M’s required for a letter grade to get that grade, if you are locked into a letter grade for one category and cannot improve in that category, you are completely dissuaded from trying to achieve anymore than that letter grade for any other category, which I think is counterintuitive. Additionally, I do not like that the only way to potentially raise your letter grade is by keeping all five of your virtual tokens, as I feel like this sort of holds your virtual tokens hostage until the end of the term. However, outside of these two issues, I think that specifications is a perfectly fine alternative to the traditional total points system.
How did you feel about office hours?
This class is also my first programming class that is pretty small in size, so the actual times of office hours are more limited compared to larger programming classes, which is completely understandable, as the class is also smaller, so it balances out. My experience with office hours was great, as I feel like both Professor Downing and our TA, Amogh, were incredibly helpful in providing answers to any questions I had.
How did you feel about support from Amogh?
Amogh is one of if not the best CS TA I’ve had so far, as his support really went above and beyond throughout this course. His office hours were great for receiving help on labs, both for high-level discussion of solutions and for particular debugging issues, and his autopsies for previously graded labs were a very informative source of general takeaways to improve my code on the next lab. Overall, Amogh is really a great TA and I think his support and assistance really helped me learn a lot throughout the course.
What required tool did you not know and now find very useful?
This class introduced me to Google Test, which I will use whenever I can when working with C++ in the future. Google Test is a great and simple way to write unit tests for code to ensure correctness and see timing data for each test case.
Give me your suggestions for improving the course.
If possible, I would suggest allotting more time for Deque and Graph, probably by releasing the newly assigned lab right after the original due date of the previous lab, but this is not really a way to improve the course, just make the end of the term a little less hectic. I think that the specifications grading format could be improved a bit, and I outlined some of my issues with the format above, but overall, the structures of lectures, materials covered by the course, and actual teachers of the course need no improvement.