Hey everyone! This is my final blog post for CS 371P: Object-Oriented Programming
Since this is my final blog post for this course, I wanted to leave some key takeaways I learned and my overall thoughts on 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
- 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 did a great job of exploring all these takeaways by introducing the issue and working through ways to solve it through lectures, exercises, and projects. Not only did I learn about these concepts, but I got to work with and apply them to problems and projects myself which helped me really absorb all this material.
Were there any other particular takeaways for you?
One thing I learned from this course that’s not necessarily OOP related is the value in working with all different types of people. Professor Downing had us work with different people for each project and put us in randomly-assigned breakout rooms to work on exercises in class which helped build my communication and teamwork skills as well as get to know the work ethics of other developers which is something we’ll all have to do inevitably in our careers.
Also, C++ seems like an intimidating language at first, but I’ve grown to admire the flexibility it has and have learned a lot about the language from this course.
How did you feel about cold calling?
I really enjoyed the cold calling. It helped me stay alert in class and it was a great way to reinforce these concepts in my mind. Though I wish cold calling didn’t have such a ‘scary’ connotation; To me, it was more of a conversation that helped reinforce our learning.
How did you feel about office hours and lab sessions?
I was able to go to a couple of the TAs office hours and lab sessions and they were very attentive and helpful with my questions. Though I wasn’t able to attend Professor Downing’s, I would always stay back after lectures to listen in on any additional student questions he answers and even ask some myself, which were always very helpful and insightful.
What required tool did you not know and now find very useful?
I got to work with the Google test suite, Valgrind, and gcov for code testing analysis which was very useful and helped me write better tests for my code.
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?
These papers introduced so many design patterns in-depth that I either was aware of but never knew the appropriate name for, or never knew at all. Some of these concepts are easy to digest in theory, but when it comes to actually applying them to my code, it’s more difficult. These readings have made me more aware of how I should design my code and what a true Object-Oriented solution should look and behave like.
You should have read two papers that advised minimizing getters and setters. What insights have they given you?
This was one of the most interesting papers I read this semester mostly because I’ve been conditioned to think that getters and setters are object-oriented. Having to rewire my brain to think of classes delegating tasks to more appropriate classes was a challenge for the first project we employed that in (Darwin) but by the time I worked on the last project (Life), I became less reliant on implementing getters and setters.
Give me your suggestions for improving the course.
Professor Downing is very receptive to student’s feedback on his courses which is a major reason for why is class is always so highly demanded. A suggestion I have is to continue to make the beginning-of-class quizzes graded because it helps not only with attendance, but also with enforcing the concepts learned in previous lectures. I also enjoyed working on the exercises and projects with different partners because it helped me get to know more people.
And that’s a wrap on CS371P for me! If you’re contemplating taking this course, do it! Object-Oriented programming is a fundamental concept all CS people should understand and Professor Downing does a great job of laying down the foundation.