CS373 Spring: Final Entry

Nathan Jackson
4 min readMay 9, 2021

At the start of this class, we were informed that the main takeaways we would learn throughout the semester were the following:

  • test first, test during, test after; test, test, test
  • when designing algorithms, demand the weakest capabilities (e.g. iterable vs. indexable)
  • when designing containers, provide the strongest capabilities (e.g. indexable vs iterable)
  • build decorators on top of containers, iterators, and functions
  • utilize the benefits of being lazy (i.e. yield)
  • 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 think the course did an excellent job of conveying each of the takeaways.

My first favorite of these is that test driven development simply works. Once you are comfortable enough with the demands of a project or a feature, stop your development entirely and write tests. It saves you from having to debug as you go, as you can simply run your tests and check whether a method works as intended. If you wait until the end to check if it works, you are likely to see at least one error, and it won’t be particularly clear what is wrong if methods are built upon each other, whereas test driven development would correct anything going wrong in the first place.

My second favorite of these is looking for reuse and symmetry in code. In object oriented design, there are many ways for you to write a class that does what you want it to. Many of these solutions are obtuse and bloated, making client use and developer maintenance a pain. Reuse and symmetry are key to refactoring these classes, as anything you do more than once can be condensed, and any two similar things can be done in one generic way.

My last favorite takeaway was the benefits of being lazy. We worked with iterators for a number of weeks in this class, and I loved the last week or so when we discussed generators. Essentially, one can either do the work (manipulating a list, generally) when it is initialized or when it is iterated. Being lazy is especially useful when dealing with large sets of data, where loading them in by chunks is much more convenient than loading them all in at initialization.

How did you feel about cold calling?

I am a big proponent of cold calling. Knowing that you may be called upon at any time in lecture is an incentive to go to class and to pay attention while in class.

How did you feel about office hours?

I did not go to office hours, but there were many sessions throughout the semester.

How did you feel about lab sessions?

Lab sessions were mostly helpful for when our group was stuck with infrastructure problems.

What required tool did you not know and now find very useful?

Docker is extremely useful and I did not fully understand it before. It sets up a containerized runtime environment with everything you need, and is uniform for all developers regardless of environment. I cannot recommend learning basic Docker more for this class.

What’s the most useful Web dev tool that your group used that was not required?

We used react-bootstrap-table2 for our table components. It is a shame that the default table that comes with React Bootstrap does not have options for pagination.

How did you feel about your group having to self-teach many, many technologies?

I was frustrated at the start of class since it seemed like we had to self teach so much of the technologies. Which was true. Reflecting on it, of course, I am thankful for this opportunity to learn as many technologies as I did, and I feel much more prepared to use them again in the industry.

Give me your suggestions for improving the course.

I think everyone should be required to submit HackerRank entries for the in-class exercises. It is an additional burden for the TA’s, I know, but there were several times throughout the semester where in a group of four people in a breakout room, only I and one other person would talk and solve the problem. Yes, the other people could just copy what we do and get the same grade, but that at least forces them to pay more attention than what is required of them currently.

--

--