CS 373 SWE Spring 2020 Final Entry: Rishi Salem
Hello, reader! The semester has come to an end, and it’s now time to reflect on what I’ve learned in this class. I’ve been told some of you are future SWE students, so hopefully you can learn from my experiences!
The Class
In the actual class periods, we learned a lot about Python. I had previously thought that it was primarily a convenient language that’s good for beginner programmers, and while this is true, I learned that Python is also good for dealing with datasets and dealing with query results. I also learned that some of the library functions are implemented using C/C++, which means you don’t always sacrifice speed when coding in Python!
We also learned about testing and refactoring. Testing is absolutely vital in writing code; it helps you catch unexpected bugs before they propagate, gives you confidence in the code you’ve written, and helps other people understand what you want the code to do. We also learned about refactoring, which is making code prettier and easier to work with, even if it already works fine. I’m really glad we covered these topics, since testing and refactoring make coding so much easier in the long run, but they don’t seem as commonly used outside of this class.
The class structure is rather different from the other classes I’ve taken (except OOP, which is also taught by Professor Downing). In class, students are called upon at random to answer some questions. It’s a little stressful at times, since if you get distracted for a minute you might miss your turn, but I think it’s overall helpful. If we’re covering something confusing in class, the person who gets cold-called is likely to also be confused, and the topic will be covered further in class. This means it’s easier to keep up with the class.
The exams are also different, in that there are two sections. The first is individual, while the second is taken as a group. This is very helpful, as the group section helps you figure out what you did wrong and how. It also helps with your grade, which is always nice.
Projects
In the projects we did in the course, I learned how to use APIs, as well as how to use HTML, JavaScript, and TypeScript. More importantly, I learned how to learn new languages quickly and use tools I’m unfamiliar with. It’s basically impossible to completely learn all the tools and languages you’ll need to build a website, so unless you’re coming into this class as an expert in website design, you’ll need to know how to prioritize skills to learn and when to apply a concept without understanding it completely.
A crucial part of this class is learning how to work well in a team. If you’re lucky enough to get a group that you can work with (and is willing to participate and work with you), there are still a few things you should do to make sure it runs smoothly. First, you should clarify expectations at the beginning of the project, as it makes sure everyone knows what’s expected of them and reduces conflict down the road. It’s also good to meet as regularly as possible and to have progress meetings at regular intervals. Communication is key to working as a team!
One tool I highly recommend is visual studio code. It has an add-on called Live Share that allows you to work on the code parallel to your teammates, like using google docs for code. This means you can see the edits your teammates are making as they make them, and this makes it less likely that you’ll be blindsided by bugs in the code.
The project, which involves making a website, is quite interesting, but it’s also quite complex and there are a lot of requirements you might not be able to keep straight. I recommend going to the TAs a lot, especially early in the semester. Even if you don’t have any questions, they can recommend actions you can take that aren’t helpful at the time, but will make your life easier later in the project.
How Was the Course?
Overall, I really liked this course! The project requirements could be difficult to follow at times, but that was a learning experience of its own, since project requirements in the real world will also be ambiguous and difficult to understand. I also liked the emphasis on testing and refactoring, and I loved the chance to work with a single team over the entire semester. Hopefully you find, or found, it as enjoyable as I did!