Were there any particular takeaways for you?
Personally, my biggest takeaways from this class were the importance of testing during every part of writing code and the benefits of pair programming.
How did you feel about cold calling?
I thought it was a great way to engage the class! I made sure to pay attention in class just in case my name got called so I would know what is going on in class. Cold calling also helped me understand the concepts better because the students who were called on would express the same questions I had and those got answered and explained as well.
How did you feel about office hours?
The office hours were very helpful! Especially during the last 2 projects, my groups ran into some errors that were so difficult to solve on our own but that were resolved very quickly once we went to office hours. The TAs and Professor were really helpful!
How did you feel about lab sessions?
I had to go to lab sessions this past week because my partner and I were stuck on how to complete a part of our project and the TAs there were really helpful. They helped us figure out how to make acceptance tests using Docker when our machine wasn’t working and answered some of our lab questions. I highly recommend going to lab sessions if you take this class!
What required tool did you not know and now find very useful?
I did not know about Google Test, which is a unit testing library for C++. We are required to use this to write unit tests for our projects and I found this library very useful because it made unit testing very easy.
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?
Some of the insights that these papers have given me are that in object-oriented programming, you should design your code so that new functionalities can be added onto existing code without modifying what is already written. Additionally, you should write your code so that an object is not dependent on an interface that it doesn’t use. The main takeaway I had from these principles was about how to practice good object-oriented design and the consequences of not practicing good object-oriented design, such as situations where you have to modify existing code which could lead to breaking all the programs that had used the old version.
You should have read two papers that advised minimizing getters and setters. What insights have they given you?
The insights these papers have given me include that letting a class that should not have access to another class’s private information have a getter to it can be dangerous because they are now able to access information they should not know and letting a class that should not have access to another class’s private information have a setter is even worse because then that class can change information about another object without even knowing the consequences of it. Overall, generally, it is better to not use getters and setters because they can lead to external classes tampering with the current class’s information and the current class not knowing what is happening.
Give me your suggestions for improving the course.
I honestly cannot think of anything that could improve this course. I think the projects are balanced nicely with the blog posts and papers. I think the daily quizzes make sure that you pay attention in class and learn the material and the help hours are a great place to go if you are confused about any of the subject material. I highly recommend this course to anyone who is interested in taking it. It is possibly the most well-structured CS class I have taken at UT and definitely has a manageable workload.