How well do you think the course conveyed these takeaways?
- test first, test during, test after, test, test, test
- when designing algorithms, demand the weakest iterator
- when designing containers, provide the strongest iterators
- build adapters on top of containers, iterators, and functions
- 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?
I felt the course did a great job conveying these takeaways. Looking for areas to reuse and make use of symmetry is also something that stood out to me in this class. I was particularly surprised and enlightened at how Professor Downing used swap to reuse code. Lastly, I want to touch on ‘make your code beautiful’ since this is something that particularly resonates with me. Being able to write beautiful code is hard and everyone seems to have their own opinions on what constitutes beautiful code. But one thing I’ve noticed in this class and in my work is that beautiful code seems to tend towards functional-style code. I would strongly suggest everyone spend some time learning a functional programming language, it is something that will change the way you look at programming. On a side note, I think anyone interested in learning to write better C++ code should watch the first half of this video.
Were there any other particular takeaways for you?
Something else I think others should take away from this course is that you should almost never need to use a for loop again in your code. Most logic that relies on a for loop can instead by expressed as a standard algorithm.
How did you feel about two-stage quizzes and tests?
I felt that the two-stage tests were nice since you got to talk through your solution with others. The two stage quizzes felt a bit less useful since I felt like most of them time you either got a perfect score on the first half or, if you didn’t, you could figure out what the right answers were just through elimination making the collaboration part redundant.
How did you feel about cold calling?
I thought the cold calling was a nice way to keep you on your toes and I didn’t mind it at all.
How did you feel about office hours?
I wasn’t able to make it to an office hours session this semester but I’ve been to some of Professor Downing’s office hours in the past and Professor Downing gave very helpful and insightful advice for helping me complete the project.
How did you feel about lab sessions?
I personally didn’t get the chance to attend any of the lab sessions. However, given how helpful Professor Downing was during his office hours, I’m sure the lab sessions were just as useful.
Give me your suggestions for improving the course
I think adding in a few lectures at the beginning of the course walking through the basics of gdb and gprof (or any debugger and profiler) would be really useful for this class. In both for 371P and 371G these tools were absolutely invaluable for figuring out how to debug and optimize my code to pass the Hackerrank excercises (most notably the Integer and Life projects). Also, being proficient in gdb was absolutely more efficient than relying on print statements for more complex projects like the Conway and Life projects. These are tools I’m familiar with from my past internships and I think it definitely gave me an edge in this class.