Welcome to my final blogpost for CS 373: Software Engineering
Key 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?
This course did an excellent job of exploring the key takeaways mentioned above. Each lecture was structured to show how these techniques are used in actual code examples with proper test cases and asserts to verify expected behavior. I especially enjoyed how we had quizzes and HackerRank exercises to do during class in order to apply the material then discuss as a class. This format of lecture-then-practice helped reinforce these valuable concepts in my mind and use them in the projects and exams.
Were there any other particular takeaways for you?
I was able to further expand on my knowledge of Python and SQL thanks to the depth that this course goes into exploring the fundamentals of these languages and its practical applications. Additionally, I also learned that there are formal names and processes for design and refactoring patterns in code development (i.e. Singleton and Factory patterns), which is something I look forward to learning more about on my own in the future.
How did you feel about the two-stage quizzes and tests?
I found the two-stage quizzes and exams to not only test us on our understanding of the key takeaways mentioned above, but they also emphasize learning from our mistakes as opposed to punishing us for our mistakes. Just hearing a professor talk about these concepts won’t guarantee that you have a complete understanding of them; It’s through trial-and-error and collaboration with others to overcome these problems and confusions that helps solidify the concepts better in your mind.
How did you feel about the cold calling?
In my first blog post, I explained how I think cold calling is beneficial to staying engaged and alert in lecture, but I’ll always feel nervous waiting in anticipation for my name to possibly be called in that hour of class. I still feel the same way, however I’ve come to realize that the professor doesn’t cold-call to catch people who are dozing off or publicly humiliate for not understanding a concept the first time around. If anything, it’s like we’re just having a conversation about a particular topic and he want’s to make sure we are confident in our understanding of it before the conversation ends.
How did you feel about office hours and lab sessions?
I went to plenty of office hours and lab sessions at the beginning of the semester to try and overcome the learning curve of having to use so many new web development technologies, and I found them very useful. The TAs are very knowledgeable and patient with the students and do their best to make sure we succeed at each phase of the project. The only regret I have is not taking the time to get to know my TAs and professor better during these hours and sessions, but it was very difficult to do that in a virtual setting.
Suggestions for improving the course:
My only main suggestion is to take some time at the beginning of the semester to discuss and possibly teach some useful web development tools such as React and Flask to help students who are fairly new to web dev and have no clue how or where to start. This doesn’t have to take too much time from the curriculum; even just a simple video walking through how to use the tools (similar to how Larry shared a video about using Postman) can go a long way in helping a team kick-start their project in the right direction.
To future students:
This is my favorite CS class I’ve taken so far at UT (and I’m in my third year!). I’d recommend it to anyone who is looking to develop their technical and soft skills as a software engineer. I came into this course with very minimal experience in web development — so I had a pretty steep learning curve with teaching myself so many new technologies in the beginning — but the support from my teammates and the TAs helped make the experience bearable and even enjoyable. Overall, this course challenged me to be a better student, teammate, and developer.
And that’s the last you’ll hear about this class from me! Thank you for taking the time to read this and I hope y’all finish this year on a strong note :)