CS373 Spring 2022: Hamza Ali: Final Entry

Hamza Ali
5 min readMay 6, 2022

--

Here are my final thoughts on CS373:

  • How well do you think the course conveyed those takeaways?

I think this course did a great job of conveying its various takeaways. The multiple lectures spent on specific takeaways like always testing and always refactoring made the related concepts very clear, and lectures on very different topics were decently spaced out, keeping the class from feeling too hectic.

  • Were there any other particular takeaways for you?

The biggest takeaway I got from this course is that the most important skill you can have in any context (software job, tech research, etc) is the ability to self-learn. Being able to quickly and successfully teach yourself new concepts is imperative everywhere, but especially in CS, where the technologies and tools used are constantly changing.

  • How did you feel about cold calling?

At the beginning of the semester, I was a bit nervous about cold calling, however, the way it is implemented in this class makes it very comfortable. You essentially just have a friendly conversation with Prof. Downing, so it's nothing to fret over. Also, if you don’t know the answer to a question he asks, don’t worry, he lets other people in the class help out.

  • How did you feel about specifications grading?

Honestly, specifications grading didn’t end up being as scary as it was made out to be at the beginning of the semester. That being said, I don’t believe it works well with the daily quizzes we have before each class. Many of these quizzes cover topics that haven’t been covered yet, and this, coupled with the fact that you only have like 4 mins to answer the questions, makes it very easy to flunk many of the quizzes. With a regular grading scheme, this wouldn’t matter since the bad quiz grades would be overshadowed by more important things like the projects. However, with specs grading, this is not the case, and it is possible to drop a couple of letter grades because of silly quizzes which are essentially a fusion of attendance and busywork. If the daily quizzes were adjusted somehow to make them work better with specs grading, I think this grading scheme could be better than regular grading.

  • How did you feel about help sessions and office hours?

I didn’t end up going to any help sessions or office hours, however considering the quality of the rest of the course, I’m sure they went well.

  • How did you feel about the support from the TAs?

We had weekly meetings with a TA to discuss progress on the group project, which makes up 4 of the 5 projects in the class. These meetings were very helpful and ensured that we were always on track. For the most part, the TAs were great with support. However, when it comes to claiming virtual tokens (a point system implemented to mitigate the bumps associated with specs grading), the TAs were not quite as reliable. There was a Google Form you filled out to use a token to do things like waive a quiz or resubmit a project. After filling out the form, the TAs would update your grade in Canvas; however, as of this moment, I have yet to see any of my grades updated (you can probably guess which grades I’m referring to based on the discussion in a previous paragraph). Besides this, however, the TAs were great and made the rest of the class very good.

  • You should have read five papers that describe SOLID design: Single Responsibility, Open-Closed Principle, Liskov Substitution, Interface Segregation, and Dependency Inversion. What insights have they given you?

These papers offered a detailed look into various principles and ideas which fit under the large umbrella of Software Design/Engineering. The ideas covered were very important, and a general takeaway I got from them is that good software keeps different functions/features as isolated as possible.

  • You should have read two papers that advised minimizing getters and setters. What insights have they given you?

These papers introduced rather interesting ideas. I don’t know how common this is, but at least in my early CS experience, getters and setters were said to be a key part of Object-Oriented design. Seeing these papers deconstruct this belief is very fascinating and makes actual OO principles a lot clearer.

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

Postman is an API design, documentation, and testing tool that you use for the group project. Starting this course, I had little understanding of the inner working of web APIs, let alone how to design and test them. Postman makes the entire process, from designing to documenting to testing, very easy to learn. Once you’ve learned how to use it, it becomes very easy to make API calls to different web APIs, design your API, and document and test it. The fact that it is web-based makes it even more convenient to use.

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

Though not limited to web development, Gitlab Runner is a tool that lets you run Gitlab CI locally on your machine. This was incredibly valuable for this project as it spares you the trouble of having to worry about CI/CD minutes every time you commit. Great for when you are working on backend tests (like I did), though I am sure you can use it as effectively for frontend tests as well.

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

Having to self-teach most, if not all, of the technologies used in the group project was a great experience. The lectures do not cover a majority of the tools you end up needing to use for the project, so you will need to self-learn a lot (unless you have good prior experience with web development). As I mentioned earlier, this is an incredibly important skill, and probably the most important takeaway from this class. Being able to self-learn with a team makes the process even easier.

  • In the end, how much did you learn relative to other UT CS classes?

The best way I can think of phrasing this is that SWE covers a much wider breadth of information, while other classes go more in-depth about a smaller range of information. The main goal of the class is to introduce you to the different ideas and concepts that make up software engineering. Once you get that solid introduction from this class, you can look deeper into the concepts you are interested in on your own and teach yourself anything you are missing.

  • Give me your suggestions for improving the course, but apologies in advance; specifications grading will remain.

As I mentioned before, the only part of this course I found annoying was the daily quizzes. They simply don’t work well in a specs grading scheme. Either the content of the quizzes needs to be changed (so that it is easy to complete them in 4 minutes) or the grading system needs to deal with them differently (some way to give them much less weight). The quizzes themselves are not bad, they serve well as a low-stakes learning experience which doubles as attendance. However, due to the nature of specs grading, low-stakes assignments can end up greatly affecting your grade (making it a high-stakes assignment). Besides that, everything else in the course was great, thanks for a great semester!

--

--