CS 373 Spring 2021 Final Entry: Joseph Graham
4 min readMay 7, 2021
Professor Downing’s long-term takeaways from this class:
- 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 all of the mentioned above takeaways were well conveyed during the course. Most of the time we spent in the lecture was learning these topics, and further supported throughout the readings. While many of these concepts didn’t necessarily come up while building our internet database site, these lessons are great to learn for future software engineers.
Were there any other particular takaways for you?
- Outside of the lectures, I think I learned a lot about working on a team when building our site. It’s really important to be able to learn how to effectively communicate with your team so that you know when to meet up, who should work on what, and how to do an overall good job. From my understanding, working on an actual team at a company works very similarly, and we have to learn this experience so that we don’t come unprepared when we actually get a job. Future students should use the opportunity this class presents to find out how to work effectively with groups.
How did you feel about cold calling?
- I understand the need for it because if it didn’t exist, people wouldn’t pay attention as much. It takes some getting used to though, especially with a class size this big. I tend to get nervous when called upon and don’t want to look uninformed in front of a class of 100+ students.
How did you feel about office hours?
- Personally, I thought that office hours in this course weren’t as necessary as other courses. This isn’t because of bad instructors or TA’s, in fact, the few times I went to office hours, they were very helpful. The fact of the matter is much of the work you will be doing in this course is very context-dependent. Everyone isn’t doing the exact same project, so plenty of issues that arise will need to be fixed by doing self-guided research. This doesn’t mean that future students should give up on office hours altogether, in fact, there’s a good chance that the TAs have experienced your problem in the past.
How did you feel about lab sessions?
- Lab sessions were similar to office hours, just in 2-hour sessions with the TAs. There isn’t much to add here that I didn’t mention above, other than to just utilize both, and not to be afraid to ask questions.
What required tool did you not know and now find very useful?
- I wasn’t familiar with docker going into this course, but it’s an incredibly powerful tool that is used all across the industry. I would recommend any incoming students for this course do a bit of research beforehand to learn a bit about it.
What’s the most useful Web dev tool that your group used that was not required?
- One of the optional tools we used for our site that ended up being a huge time saver was Algolia. Instead of needing to implement searching through our API (which would have been extremely difficult and time-consuming), we were able to submit our data to Algolia, which handled all the complicated aspects of searching for us.
How did you feel about your group having to self-teach many, many technologies?
- It can definitely be frustrating at times, but just like cold calling, I understand the importance. In the real world, there aren’t always going to be professors and TAs to give you lessons or help with new projects you take on. It’s incredibly important to learn how to use new technology on your own through Google and documentation. It’s an enormously useful skill to have, and surprisingly not as easy or well understood as you think.
Give me your suggestions for improving the course.
- One issue I had was sometimes following along with the project instructions and rubrics. I think if each phase had its own page with more detailed instructions, it would be a lot easier to understand. I commonly caught myself revisiting the project page to reread each bullet point and rubric because I was convinced I would miss something. Many of the requirements also needed to be clarified on Piazza, so I would religiously check that as well. Having a more clear outline of what you need to complete would make it easier for students to not miss out on any tasks that need to be completed.
- Another issue that showed up during the end of the semester was participation in the exercises. While there was plenty of exercises given so we could get full credit, unfortunately in the last 5 or so, my group members would not contribute, because they already had full credit on 10 of them. This was frustrating as I still needed credit toward the end, and commonly found myself to be the only one talking at times. While I overall prefer exercises to more stressful tests, hopefully, this issue is naturally fixed when this class goes back to being in person.