This class is a great example of how a required course can be much more than a box to be checked. I very much enjoyed the class in multiple regards.
I loved the homework assignments for this course, especially regarding topics like recursive backtracking and modification of binary trees. They prompted me to think deeply about the problem at hand, mull over possible solutions, then finally arrive at an elegant answer. There is a certain zen to the problems in this class that I very much appreciated.
The professor, Stuart Reges, explained concepts very understandably and explicitly in lecture and made sure the expectations for assignments and tests were clear. Coding style is a major topic in the class, for the good reason that it’s better to build good habits early than to break bad ones later. As a result, grading was tough but on the whole fair. I learned that asking good questions is key; taking a proactive rather than reactive mindset went a long way toward learning best practices and getting the most out of the class. (My TA was very helpful in answering my many questions, too.)
Most of the lectures were directly relevant for homeworks and tests, but occasionally there would be an extraneous lecture meant to round out the perspective on the best of computer science and object-oriented programming. These were fascinating. For example, there was a lecture on designing software that has all the right functionality and maximal extensibility with minimal repetitive code: judicious use of inheritance, interfaces, and abstract classes (a preview into the subject matter of CSE 331). There was another lecture providing a glimpse into the functional programming capabilities of Java 8; the thought process of map, filter, reduce is captivating and I’d love to learn more.
Though CSE 143 is a required course for CSE majors, there’s much more to it than that. Not only is the subject matter interesting by itself, it’s also a gateway to more advanced material and a great way to expand my thinking toolbox.
Below is a bit of scratch work I did for the Anagrams homework assignment: I was working through a small test case to figure out how I wanted a certain aspect of the recursion to work.