CS 373 Final Entry
For future/incoming students:
You’re gonna learn a lot in this class, and most of it is going to be stuff you will need to know once you go into the industry.
Work
This course’s workload is pretty heavy, so it’s better to have just one other workload-intense class aside from this one. There’re a total of 15 weekly papers/blog posts (10 are mandatory). These aren’t difficult; shouldn’t take longer than 90min/week.
The project is the primary time-consumer; at my busiest, I was working 30–40 hrs in one week. Don’t sweat too much though; that will only be for about 1 or 2 weeks. After the 3rd project, things get much easier to manage.
Exams
They’re not much to worry about. Pay attention in lectures, do the HackerRanks, and you’ll be fine. It would also be beneficial to ensure the rest of your team is also up to par on these exams as there’s a group portion to them as well.
Tips
- Go to the lab/office hours early in each project to clarify the project requirements
- Find a good group to work with. If you have friends you work well with, form a group with them. This can be what makes or breaks your semester. If possible, try to become friends with teammates.
- Learn Git etiquette early
- Google, StackOverflow/Exchange, and documentation are going to be your best friends
- When coming up with a project, try to get an idea that you’d be interested in working on. Put in the effort ahead of time to make a great idea so that the specifications of later projects won’t come back to bite you.
- Keep track of some good tips (life, software, etc.) around somewhere. Try to get at least 10 of them.
- In each project, plan out a development schedule. This will help keep things on track.
For my grade:
Course Takeaways:
- 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
How well do you think the course conveyed those takeaways?
I think the takeaways were really emphasized enough in the lectures and reading material, but aside from testing, there wasn’t really a chance to put them into practice. Overall, I think they were conveyed well, but being able to use them practically would have been a nice addition.
Were there any other particular takeaways for you?
I think the most applicable things I’ve learned from this class come mostly from the project: working well in a team, learning new technologies, designing algorithms well, and general essential industry knowledge and experience for any software engineer.
How did you feel about two-stage quizzes and tests?
They were great! Not only does the group portion take some pressure off the exam, but it’s also a great opportunity to really see what it’s like to have ~6 people working on the same problem for the same goal.
How did you feel about cold calling?
I liked the cold calling system. It managed to keep me really engaged throughout the course. The nature of cold calling made the lectures feel less like lectures and more like conversations, which is easy to tune into.
How did you feel about office hours?
They were very helpful. The TAs were very eager to help, often posting extra office hours when deadlines approached, and they really took the time to make sure each student left the session with a better understanding of the topics.
How did you feel about lab sessions?
Lab sessions were super helpful. Many of the project specifications are somewhat ambiguous, and the lab sessions did loads to clear those up. There were also many times when my group got stuck on the project and the lab sessions dug us out of our rut.
Give me your suggestions for improving the course.
The one suggestion I have is to restructure the schedule to have SQL before Python. The Python concepts we learn in lectures aren’t really applicable to our project, but SQL is something we used in Phase II, and I think that learning it first before putting it into practice would be a great chance to really solidify what we learn in class. I also think there’s enough time between finishing up SQL in lectures and the start of Phase II to still maintain a disconnect between classes and the project.