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 (above) takeaways?
I think the course did a great job at conveying the above takeaways, especially the importance of testing. Testing was heavily emphasized right at the beginning of the course and put into practice throughout the whole course from the exercises and projects. Out of all the takeaways, it stuck with me the most.
Were there any other particular takeaways for you?
The importance of good design for maintainability and reusability is another takeaway for me. I thought it was conveyed effectively through the papers and projects.
How did you feel about cold calling?
I thought it helped with class engagement since knowing I might be called made me focus more. Thinking about it made me a bit nervous, but Professor Downing is very understanding, so it was fine to say that you forgot or don’t know. He would help push you in the right direction and explain until you understand.
How did you feel about office hours?
I thought office hours were extremely helpful. Whenever I got stuck on projects, I went and was able to receive pointers on what was wrong. Sometimes I felt hesitant to go since I felt I was behind on my projects and was asking about basic or early problems but going always helped me overcome the problems and finish on time.
How did you feel about lab sessions?
I also thought they were helpful. They felt the same as office hours.
What required tool did you not know and now find very useful?
I think requiring us to have a makefile for our projects was very useful. I never really messed with makefiles before, but I found that they were really useful in running commands. It was easy to compile and run unit tests, acceptance tests, format code, and use Docker with the makefile’s help.
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?
They made me think about design more and understand how dependencies could lead to unpredicted changes in code, making code hard to maintain and break easily.
You should have read two papers that advised minimizing getters and setters. What insights have they given you?
It also made me think about design more and how I could delegate tasks to other classes with the information rather than writing getters and setters to do the job.
Give me your suggestions for improving the course.
I definitely liked this changed format of the course with no exams since exams are always very stressful for me. I think allotting more time for the in-class exercises would be helpful since there were times when my group was stuck and called for help, but time would run out.
Other comments:
Try to use Docker if you can since it’s very useful in my opinion. Even though it might be hard to get working at first, I would spend the time to do it and get help from office hours to set it up. Don’t be hesitant to get help. The teaching staff is really nice and understanding.