CS371p Spring 2022: Jonathan Randall: Final Entry
CS371p Spring 2022: Jonathan Randall: Final Entry
How well do you think the course conveyed those takeaways?
My favorite lectures were on container adapters and iterators. I wanted to use a queue on the Voting project, but didn’t understand enough about how to declare the queue container adapter, and just used a deque instead. Now I know better!
Were there any other particular takeaways for you?
I benefitted from gaining a deeper understanding of boilerplate code in C++. I haven’t used pointers since Operating Systems, and it was great to do so many projects and exercises which reinforced my understanding. I have a better understanding of pass-by-reference and pass-by-value. Coming from a very Python-heavy curriculum, C++ reminded me of the C logic required to make everything work under the hood.
How did you feel about cold calling?
You should implement a system of “warm calling” where we can schedule specific classes to be prepared for. In the online format, Professor Downing gave everybody the ability to just say no when he cold-called, which kind of defeats the purpose.
How did you feel about specifications grading?
The feedback on projects was not very helpful. I would have preferred not having to resubmit the time I forgot to close my last Gitlab issue. The grade itself doesn’t need to be specific, but receiving zero feedback on projects was a let-down! I have no reason to believe the TAs even looked at our code. What I would really appreciate is seeing the “best” solutions for each project, since I have a suspicion some students had clever designs that I never would have thought of.
How did you feel about help sessions and office hours? I hope they were helpful. I have only gone to office hours for any class once my entire college career, and it was not about to be for this class. Although my first refactor of Darwin almost pushed me, with coding, it’s not a matter of not knowing what to do, it’s usually just putting pen to paper and checking for typos.
How did you feel about the support from the TAs?
I would have liked feedback for the projects.
You should have read five papers that describe SOLID design: Single Responsibility, Open-Closed Principle, Liskov Substitution, Interface Segregation, and Dependency Inversion. What insights have they given you?
Well, I suppose all of these principles have implicitly been instilled to me in my prior OOP education. Reading them and the examples they provided were helpful; the Open-Closed Principle (and Dependency Inversion) greatly influenced my design for Life and Darwin. This mostly involved putting as much “policy” code in the child classes as possible. For Darwin, I would have liked to generalize my code even more to the point where creatures could perform arbitrary state changes to themselves or their adjacent cells.
You should have read two papers that advised minimizing getters and setters. What insights have they given you?
Getters and setters are fine, but their use often conflicts with the SOLID design principles. My primary takeaway: we should not ask a class for information and then perform behavior on that information, we should ask for them to do that behavior themselves.
What required tool did you not know and now find very useful?
PlantUML. It wasn’t difficult to use, and the online server made it even easier. I’m still not completely up-to-date on what information is expected on a UML diagram, whether types are necessary, how (or if) to show reference-types vs value types, etc.
In the end, how much did you learn relative to other UT CS classes?
I wanted to learn more object-oriented design patterns. I came away with learning enough C++ to tackle simple questions. Will I ever write C++ that winds up in production code? This class was a first step!
Give me your suggestions for improving the course, but apologies in advance; specifications grading will remain.
Feedback on projects! Also, it would be cool if Hackerrank showed execution time as opposed to “time to solve this problem.” Some sort of power-ranking chart to compare our code’s runtime would be fascinating! But, as a catch, the top-performing entry would have to explain how they did it.
Last thoughts
Now, a question for my commenter: suppose you have a set {A, B, C}
. List all of the ways you can partition the set into two non-empty splits, a left split and a right split. Order of the splits matters, {A, B}, {C}
is not the same as {C}, {A, B}
.