- 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 (e.g., 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 the course did a good job of conveying these takeaways, particularly through the lectures and the semester-long project. The lectures were pretty engaging throughout, and the cold calling helped keep everyone attentive. The semester-long project is what really reinforced the takeaways though. It was an opportunity for me to collaborate with my classmates and apply the principles in a hands-on way, which I believe is the most effective way of learning something. I didn’t find the papers engaging this semester. Almost every one was used in the OOP last year, and I would’ve appreciated new content that related more to SWE.
- Were there any other particular takeaways for you?
My takeaways relate more to the communication skills and techniques I learned while working on the project with my team, since the project is what was most engaging to me throughout the course. The lecture material was indeed fascinating, but it wasn’t very related to the projects that we were working on, which meant that the information I learned in lecture wasn’t reinforced. In the future, I’d suggest creating some alignment between lectures and the projects, so that more key takeaways are fully enforced. Anyhow, I learned a lot about collaboration, how to be a good pair-programmer, and how to take a daunting task from start to finish with a small, focused team.
- How did you feel about cold calling?
I like the cold calling. It keeps me engaged and attentive in the class. However, in my head, I know that once I get called on, I won’t get called in for the next 3 or 4 classes, which reduces my engagement in the class. I think a better system would be to make the cold-calling truly random, so anybody can be called on at anytime. That would keep people more on their toes.
- How did you feel about specifications grading?
I’m not a fan.
Once you get below a threshold for a an A in any one category, you’re barred from getting an A in all categories, which isn’t fair. I think students have different strengths in different areas, so it’s difficult when you have to succeed in every category. A weighted grading system works better because you can prioritize the coursework more sensibly, and you can play to your strengths. The daily quizzes don’t work well with this grading system either. I’ve had countless times where I couldn’t make it to class on time because I was held over in a previous class, the class didn’t start on time, the quizzes were particularly hard, or I had to take a mental health break. There’s no leniency there, even though we had virtual tokens, because we have strong incentive to save them. Once a student gets below a threshold for an A, they don’t have an opportunity to make it up in any way. It’s a system that leaves you feeling helpless and demotivated once you cross below a single threshold in a single category, and it affects your work and effort in other parts of the course in other categories.
- How did you feel about help sessions and office hours?
These were helpful when I needed them. Again, I really only went to these when it concerned the team project, so I didn’t really get a chance to ask about lecture material. I wish there was more opportunity for me to engage with the lecture material besides exercises and lectures.
- How did you feel about the support from the TAs?
The TAs were great this semester. They listened carefully to our requests for extensions on certain due dates for the project, and they were typically able to grant us an extension. They made the class a lot less stressful and a lot more manageable because of this. However, I’d say that there can be really inconsistent and strict grading standards when it comes to the paper and the blog, and I think I got 1s on certain papers that I deserved better grades on.
- What required tool did you not know and now find very useful?
Surprisingly enough, SQL was a tool that I didn’t know that proves very very useful. SQLAlchemy was the tool I used in Python to interface with SQL, but I’m glad that lecture material and exercises also reinforced SQL, because this is a super important tool to know about in the industry. It’s also surprisingly simple yet powerful, and knowing how to use it is practical.
- What’s the most helpful Web dev tool that your group used that was not required?
As corny as it sounds, Google was the most helpful Web dev tool that was not required. Learning how to leverage Google is honestly a non-trivial skill, and it’s super important with Web dev particularly because there’s so much going on. There’s no way for you to know everything, so knowing how to use the search engine to find what you are looking for, whether it be documentation, a tutorial, or debugging help, is critical.
- How did you feel about your group having to self-teach many, many technologies?
I didn’t feel that salty about it. It mirrored the experience of software engineering in the workforce, and as the class is titled Software Engineering, it provided a good, practical experience. It was for sure a safe space to hone the skills that recruiters look for in job interviews at least. My problem with the self-teaching though is that the engagement with lectures greatly decreases. The information in lecture isn’t reinforced besides what we do in exercises, so it doesn’t stick very well.
- Give me your suggestions for improving the course, but apologies in advance; specifications grading will remain.
I think daily quizzes should be removed from the specification grading schematic. Given the circumstances we face as students still dealing with a pandemic, compounded by the mental health crisis caused by it, it detracts from our ability to appreciate the course. It’s much too harsh, and it leaves students helpless to improve their grade. I also wish that there was more overlap between lecture and project material. It makes for more engaging lecture, and it reinforces the material that we learn. Also, it’d be great if the readings were different from the OOP readings. The readings were interesting, but honestly didn’t relate that much to the subject matter, and I’d like to have original readings that allowed me to learn more things.