CS373 Spring 2022: Saran Chockan: Final Entry
How well do you think the course conveyed those takeaways?
The course conveyed those takeaways extremely well. The first five takeaways (testing, algorithm design, designing containers,…) were conveyed through lectures and daily quizzes. Professor Downing was able to do this through cold calling and asking for engaging and thoughtful discussions.
The rest of the takeaways (code reusability, collaboration, refactor, clean code) were conveyed through the semester-long software engineering project. The more features we had to build out, the more we were able to realize how important collaboration and code cleanliness is to be able to scale your software to more features and users.
Were there any other particular takeaways for you?
One particular takeaway for me is to utilize GitLab’s project management tools to efficiently work together as a group. This allows a team of developers to easily keep track of issues (feature, bugs), perform efficient code reviews, manage deployments, etc.
How did you feel about cold calling?
I think cold calling is a good way to engage the class. It keeps students attentive and bolsters learning through thoughtful conversations. Cold calling might seem intimidating at first but Professor Downing is easy-going while conversing.
How did you feel about specifications grading?
I am not a huge fan of the specifications grading since I believe that weights should play a role in grading schemes. It does not make sense that daily quizzes have the same impact as the phase milestones of the software engineering project. This impacts students’ ability to effectively time management as it does not allow them the ability to prioritize tasks within the class (or even with other classes).
How did you feel about help sessions and office hours?
I did not go to help sessions and office hours since I found the lecture’s explanation simple, and my team was helpful with debugging our software projects. But, I do see the value in it for students who need clarification on the lectures and help in designing/debugging their software projects.
How did you feel about the support from the TAs?
Our TA was extremely supportive, especially in our weekly meetings. Initially, they were helpful for project brainstorming and writing the proposal. Then, they helped let us know software tools to use and best design practices for our website.
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?
Despite developing software for the past three years, I have not had the habit of reading articles about software design. I had a lot of fun reading these papers since they were engaging through the code snippet examples and explored a lot of controversial opinions on code design. All of these topics were surrounded by OOP and it was very interesting to see how it is much more complex than what we were taught about OOP in high school AP computer science. The best insight I got was to segregate code responsibility as much as you can to make sure software scalability can be performed with ease.
You should have read two papers that advised minimizing getters and setters. What insights have they given you?
During AP computer science and my initial software project, getters and setters were of utmost importance in code design. When I initially read these articles, I was confused and frustrated as to why the author would take this stance. But, as I read further, I saw where the author was coming from and started to realize how getters and setters can compromise the codebase.
What required tool did you not know and now find very useful?
I was not familiar with writing web applications with React. I knew how to write a website with pure HTML, CSS, and JavaScript code but I see how React’s state management allows for faster web development and allows you to write reusable frontend components and connect your frontend to a variety of API sources with ease.
What’s the most helpful Web dev tool that your group used that was not required?
The most helpful tool that our group used that was not required was Vercel! For our group to do frontend design reviews as fast as possible, we used Vercel as a way to get website previews on git branches and merge requests.
How did you feel about your group having to self-teach many, many technologies?
Self-teaching technologies is a crucial skill to have in the software engineering industry. An engineer must be able to do this since new technologies are disrupting the industry daily. As an engineer gets more experience, this process does get easier. However, for college students, with most having little to no software engineering experience, having to self-teach a lot of these technologies (React, Git version control, Python, Flask, Docker, SQL) in a short amount of time is unrealistic. This makes it even more difficult since there is no sort of “training period” and day-to-day mentors that most software companies have for entry-level engineers. The whole process for smooth for me since I had a decent amount of experience in developing software and all my teammates were experienced in software development.
In the end, how much did you learn relative to other UT CS classes?
Relative to other UT CS classes, I did learn a lot more about real-world software engineering as most CS classes are theory-focused. This is exactly the reason why I think every UT CS student should take this class if they want to get a good head start in software engineering.
Give me your suggestions for improving the course, but apologies in advance; specifications grading will remain.
I think a training session with crash courses on the core technologies (React, Flask, Docker container) before the software engineering projects begin would be extremely helpful for students. This will allow students to have a high-level understanding of the technology requirements
