Some notes from the final few weeks of the course.
This summer I took two courses: Data Structures and Computer Architecture and Assembly Language. This post summarizes my experience with the former. The material may be slightly different during the fall, winter, and spring terms since they take place over a 10 week (rather than 8 week) term.
- Big O notation
- Amortized analysis
- Abstract data types (ADTs)
- Linked lists
- Maps and hash tables
The course was broken up into two types of assignments: worksheets and programming assignments.
The worksheets were completed as part of a group (to which I was assigned at the beginning of the term). Here’s a worksheet on implementing a queue with a linked list. My group divided up the work such that each week I completed a worksheet and then reviewed a worksheet that someone else had completed. We didn’t meet often as an entire group, but I found that pairing up during the review process, both as the reviewer and reviewee, was really helpful. Note that this internal reviewing of worksheets wasn’t required for the class — it just seemed like the easiest way to interact as a group. My only gripe with the worksheets was that they were numbered totally randomly. Why not just start with Worksheet 1 and continue from there?
The five assignments were generally straightforward, though I sometimes got hung up on a single bug that would take hours to track down. Not specific to this class, of course.
I wish that there was more creativity allowed in the assignments, and I wish that we were required to do more of the work from scratch. Instead, we were given skeleton code and the required to implement functions that were already laid out in the header files. Boring.
I found the exams for this course much, much harder than the homework. To illustrate, I didn’t miss a single point on any of the worksheets or assignments, but I earned an 86 percent on the midterm and an 86 percent on the final. I didn’t skimp on studying. I was a little frustrated that my scores on the exams didn’t reflect how well I felt like I knew the material. Oh well.
This was not an easy course, but I found that the material provided (lectures, reading, worksheets, and assignments) was mostly sufficient to learn the material well. I tackled the reading and lectures early in the week and then moved on to the worksheet and the assignment. I tried to complete the assignment as early in the week as possible so I wasn’t working against a deadline. I think it was also helpful to spend an entire day focusing on this class, and then the next day on my other class, and so on, rather than changing my focus several times throughout the day.
I usually use flashcards to study, but I was a bit overwhelmed during the beginning of the term (spent the first week moving back to America after four years abroad) and so they slipped by the way side. In retrospect I think this would be a great course to use flashcards on, whether paper or via an app like Anki.
Another thing I would’ve focused on earlier on was figuring out what the course considers an abstract data type (ADT) and what is considered a data structure. This is especially important when looking for definitions online, as there does not seem to be a hard and fast rule about what is an ADT and what’s a data structure.
Here are some extra resources I found helpful:
- Overview of data structures
- Big O time summaries
- Dictionary of Algorithms and Data Structures
- Descriptions and implementations of data types and structures
- Visualization of data structures and algorithms
- Good implementation of Djiksta’s Algorithm
- Reverse Polish Notation and the Stack
- Reverse Polish Notation and Trees
A lot of the material in those links overlaps. That’s helpful, though, because oftentimes I found that some websites were better at explaining some concepts while others did better with others.
Difficulty and Time Commitment
The material in this course was similar in difficulty to the other courses I’ve taken from Oregon State. At the beginning of the term I was dedicating about 20 hours a week to the course. Once I figured out what the instructor was asking for that time commitment dropped to around 15 hours per week.
This course benefitted from good course materials, but the way the course was administered and organized was occasionally frustrating.
I think that Canvas does a decent job of providing tools with which to organize a class, but it seemed like those tools weren’t applied well. For example, instead of using the built-in grading functionality, the instructor cautioned that our grades in Canvas were not our actual grades and so had to be calculated by hand using the weights in the syllabus. This seems minor, but I think it’s indicative of the lack of organization of the course.
Speaking of grading, make sure that you double check all of your points and your final grade. I completed a portion of extra credit but did not receive the points for it until I emailed the instructor.