Long-term takeaways from this class:
- 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 this course emphasizes these takeaways quite well. Testing is ultra important. It is obvious that testing for correctness is important, but it is also important to learn about testing, and how to test. This course teaches a lot about that. It also teaches a lot about containers and components of Python. There is a project which requires a certain level of efficiency, so the idea of using laziness is also stressed. Collaboration is also extremely useful in this class, as it is very largely group project based. Even the exams have a group component.
- Were there any other particular takeaways for you?
One takeaway I find particularly helpful is to write code that is reusable. I used to never pay much attention to this. All I used to care about was that my code was correct and that it compiled, however I’ve learned that when you design code that lends itself to be reused in various places, it makes everything easier.
- How did you feel about two-stage quizzes and tests?
All the quizzes and tests have two stages (individual and group) which I found to be a great idea. It is both good for grades, and learning from your peers.
- How did you feel about cold calling?
Prof. Downing cold calls students in class, which I personally liked, because it required me to be engaged all the time, just in case I was called.
- How did you feel about office hours?
I went to office hours once for help on a project. I ended up getting some useful advice, as well as 5 extra credit points in the class.
- How did you feel about lab sessions?
I have not attended lab sessions this semester.
- Give me your suggestions for improving the course.
Overall I really liked the format of the course, as well as the lectures themselves. Perhaps one suggestion I have is spending a little bit more time in class covering some of the tools we need to use on our projects.
- refactor, refactor, refactor
The latter portion of the course put a lot of emphasis on refactoring code, which may not seem all that useful at first, since it does not add any new functionality, but it is very useful for large projects. It is also an important element of projects in industry.
- make your code beautiful
This one is simple. Good code is good looking. It makes things easier to read and thus easier to work on. Especially when working with others, it is important to write pretty code, so that other people can contribute to the project.