Long Term Takeaways from this Course:
- 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 that this course conveyed these takeaways to all of us very well, whether we were new to the world of software engineering or seasoned veterans — everyone learned something. From the very beginning of the course, Professor Downing stressed these core points and continued to do so throughout the semester in a very informative and absorbable manner.
Were there any other particular takeaways for you?
One takeaway in particular that I will always remember are the guidelines to refactoring. When writing code for a large scale project, it is very often too easy to let the code get messy which is natural. But now, I have the tools and knowledge to go back and refactor the inefficient or difficult to comprehend code into a much better form thereby improving my abilities as a software engineer.
How did you feel about two-stage quizzes and tests?
I really enjoyed this ‘abnormal’ format of taking quizzes and tests. I believe that it’s a best-of-both-worlds situation. Firstly, as an instructor you are able to test your students’ knowledge on the material but then afterwards, they are able to learn from their classmates and collaborate as is in the real world to solve the problems again.
How did you feel about cold calling?
To be honest, I am not really a fan of the cold calling. I understand that it’s a valid form of maintaining engagement and taking attendance but it feels a bit forced to me. However, I have no real alternative solution to propose other than “engage the class” so I can’t really say much here.
How did you feel about office hours/lab sessions?
Fortunately or unfortunately, depending on how you view it, my team and I as an individual did not have to attend office hours or lab sessions so I don’t really have much experience to speak about in these regards.
Give me your suggestions for improving the course.
One suggestion I have for improving the current course is to add more detail to the test questions. Often times, I would have to ask 3–4 clarifying questions before I was able to fully grasp what a question wanted me to do/solve and even then, sometimes I would have to go back and make changes after the instructors made an announcement regarding a question.
This class is a hugely valuable resource if you’re interested in improving yourself as a software engineer. Not only do you learn many intricacies of various languages such as Python, Java, and SQL, you also learn many core concepts of computer science that transcend any particular language but rather apply to good software engineering practices in general such as how to refactor code. I really enjoyed this course and learned a lot and I believe that if you take it, you will too!