How well do you think the course conveyed those takeaways?
Overall, all of the points were conveyed at some point in the course. The majority were touched on in lectures, while a few (testing, reuse, collaboration, and refactoring) were reinforced by the projects. I think the nature of the course — the disconnect between the lectures and the project — made it so that these concepts were not fully digested. By contrast, I felt that I learned these concepts much better when I took OOP since the projects required them by design. This is not to say that I dislike the course project — it is easily one of the best I have been a part of. Rather, I think it would be better if the lectures covered topics relevant to the project, such as asynchronous programming.
Were there any other particular takeaways for you?
Try to get the simplest possible implementation working before doing anything else. For a backend route, this could be trying to get a “Hello World” response from your localhost in your browser. This is especially helpful for web development since much of your functionality cannot be tested with just a command line.
How did you feel about cold calling?
It's a great way to keep students involved. I always find myself paying more attention when there is a chance I will be called on. Its also very enjoyable to engage with Professor Downing, as he is always very receptive even if you do not know the answers to his questions.
How did you feel about specifications grading?
The idea is interesting, but I would prefer a standard grading system. It requires you to be consistent, which I suppose reflects the expectation of a workplace. Nevertheless, I found it hard to consistently make the quizzes, and I could not make up for these no matter how well I did in the other aspects of the course. Also, the token system needs some looking at. For students, it's hard to keep track of how many tokens we have and when we have used them. For TAs, I imagine it's very difficult to manage requests for over a hundred students.
How did you feel about help sessions and office hours?
I did not attend either for the semester.
How did you feel about the support from the TAs?
I only had interactions with Alex, who was very understanding but also hard to get into contact with.
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?
My main takeaway is that everything should be designed with your future self in mind. Make your design as open and adaptive as possible.
You should have read two papers that advised minimizing getters and setters. What insights have they given you?
They are a great insight into the true purpose of abstraction and member scope. Getters and setters should hide the implementation. A client class should never need to how a class is implemented to use its accessors.
What required tool did you not know and now find very useful?
I had never used MySQL before this course (always had stuck with NoSQL in MongoDB). It's actually quite intuitive. It took a bit of time to get used to foreign keys, but I do appreciate SQLs syntax and the intuitive structure of a relational database.
What’s the most helpful Web dev tool that your group used that was not required?
Nginx was very helpful in making our frontend accessible on our EC2 instance.
How did you feel about your group having to self-teach many, many technologies?
I have very mixed feelings about this. I think there are many concepts in web development that can be self-taught. With the number of online resources available, it's very easy to get a website up and running. Nevertheless, asynchronous programming is a challenging and fundamentally different way of thinking than we are used to. My goal was to understand hooks, promises, and callbacks, and I can’t say that this course helped me accomplish that. I would like it if at least a few weeks of lectures were spent on these fundamental web development concepts.
In the end, how much did you learn relative to other UT CS classes?
It's a bit hard to qualify, but if I had to give an answer, I would say this course was about average. The course project was a great way to learn more about web development. Even if it was self-taught, I learned a lot about automated deployment and Nginx. Every lecture had quite a bit of information, but the information itself wasn't always particularly novel or relevant. At times, it felt more like a Python course than software engineering. It was definitely interesting, but many of these features will either go unused or could be learned with a few Google searches. Basically, I’d like to see more challenging material covered in the lectures.
Give me your suggestions for improving the course, but apologies in advance; specifications grading will remain.
I would say:
More challenging lecture content. Specifically, more lectures pertaining to IDB.
Improvements to the token system, especially regarding the turnaround time for updating grades and token count.
Overall, great course! IDB is a very unique project and I am glad to have been a part of it.