CS371p Fall 2021: William Crawford: Final Entry

William Crawford
2 min readDec 6, 2021


This course has mostly been about getting us comfortable with programming in C++ with some object oriented design. The whole semester was spent on providing a foundation for us to design code intelligently.

Prof. Downing will call on random people during class. You don’t really have to worry about always having the right answer because he will either lead you to it or the class will suggest something.

Grading this semester has been somewhat strange and has caused more stress than it should have. I guess it is mostly because we are not used to the system and at times may not feel completely sure of how well we are doing in the class. You only have to worry about getting credit for enough exercises and all the projects though. I have noticed that a couple of my grades would have been better served if there was some feedback on Canvas with them.

C++ has some weird typing system for polymorphism in comparison to what I was used to. Everything method that you want to be accessible to be overridden has to have the virtual keyword in the parent class.

Writing built in operators into classes using the friend-operator pattern has also been new to me, but I suppose it provides code that is more accessible.

I learned a lot about the test checker checktestdata after participating in several of the crowdsourced file creations. It is a useful tool for making sure that large batches of tests generally meet the same format to help determine whether the test or your code is wrong.

I am much more comfortable playing around with makefiles after reading up about it in the manual and getting my projects to compile.

I also learned how to use Google Test, but only the slight differences between it and python’s unittest which I learned about in Downing’s SWE class.

My favorite piece that I learned from reading the weekly papers was the design pattern of using an interface between classes. This forces a separation between the two with a wall of abstraction.

Using getters and setters for object oriented design is not object oriented design. Their usage breaks several of the rules that we read about in the weekly papers, and make the code unmaintainable as complexity increases.

I struggled most at understanding how to build/design the last project in this class, so you might want to free up some extra time to do it, or ask for hints.

a handsome face



William Crawford

Computer Science major at the University of Texas at Austin