Course Description:
CS 136: Elementary Algorithm Design and Data Abstraction
This course builds on the techniques and patterns learned in CS 135 while making the transition to use of an imperative language. It introduces the design and analysis of algorithms, the management of information, and the programming mechanisms and methodologies required in implementations. Topics discussed include iterative and recursive sorting algorithms; lists, stacks, queues, trees, and their application; abstract data types and their implementations.
Dave's Comments:
Teaching Evaluations:
Number of Respondents: 29 / 88 (33%)
The instructor(s) helped me to understand the course concepts. |
Strongly Disagree | Disagree | Neutral | Agree | Strongly Agree | No Basis for Rating |
| | 1 | 4 | 21 | 2 |
| | 4% | 14% | 75% | 7% |
The instructor(s) created a supportive environment that helped me learn (Supportive environments enable students to feel included and valued regardless of any aspect of their identity). |
Strongly Disagree | Disagree | Neutral | Agree | Strongly Agree | No Basis for Rating |
| | 2 | 9 | 16 | 1 |
| | 7% | 32% | 57% | 4% |
The instructor(s) stimulated my interest in this course. |
Strongly Disagree | Disagree | Neutral | Agree | Strongly Agree | No Basis for Rating |
| | 1 | 9 | 17 | 1 |
| | 4% | 32% | 61% | 4% |
The intended learning outcomes were identified (Learning outcomes/objectives articulate what students should be able to know, do, and/or value by the end of a course). |
Strongly Disagree | Disagree | Neutral | Agree | Strongly Agree | No Basis for Rating |
| | 1 | 8 | 19 | |
| | 4% | 29% | 68% | |
The course activities prepared me for the graded work. |
Strongly Disagree | Disagree | Neutral | Agree | Strongly Agree | No Basis for Rating |
| 1 | 5 | 9 | 13 | |
| 4% | 18% | 32% | 46% | |
The intended learning outcomes were assessed through my graded work. |
Strongly Disagree | Disagree | Neutral | Agree | Strongly Agree | No Basis for Rating |
| 1 | 2 | 9 | 16 | |
| 4% | 7% | 32% | 57% | |
The course workload demands were... |
Very Low | Low | Average | High | Very High | No Basis for Rating |
| | 2 | 17 | 9 | |
| | 7% | 61% | 32% | |
The instructor(s) helped me to understand the course concepts. |
- [Strongly Agree] Dave is a great lecturer!
Note: This is a complete list of comments I received, listed alphabetically to avoid bias.
The most important thing I learned in this course was: |
- Algorithms and time efficiency
- debugging
- Don't forget to free after a malloc.
- draw pictures of stuff
- Dynamic Memory, ADTs, various pointers, and how things work inside the computer
- How programming languages work under the hood, in particular how memory must be properly managed and how many features in newer programming languages shouldn't be taken for granted.
- How to use pointers, and better code design
- I learned how to program
- Making good tests for my code
- Memory management
- Memory model and data structures
- Pointers and application of pointers.
- Test the code
- The ability to problem-solve and critical think to answer the very tricky assignment questions we were given.
- the basic data structures (linked lists, trees, arrays) and their applications, especially in ADTs
- The basics of imperative programming
- The C memory model, because I felt it helped me understand how programming languages function as well as how higher level languages like python implement all their features.
- The role of optimization in coding
- What the design of programs are, mainly between the purpose for the implementation and a client interface.
What helped me to learn in this course was: |
- attending lectures
- Completing the weekly assignments and rewatching the voiceovers
- Course notes and attending lectures
- Dave was a really nice prof! Plus, everyone at office hours was really helpful too
- Dave's recorded lectures as well as the tutorials.
- Diagrams and illustrations in lectures.
- Doing the assignments and self check quizzes
- Draw on paper to visualize concepts
- examples
- For as annoying as they were when I got one, AddressSanitizer errors were kinda useful I guess.
- Going to lectures
- Instructor, slides, voiceover (during online period)
- -Lecture videos, slides, and in-person classes were well-organized. I also really liked how concepts were explained (particularly how data, like arrays, are stored in memory and the role of pointers).
- office hours
- Office hours were very helpful in assignments and to clarify concepts.
- the course slides and recorded voiceovers were very helpful, as were the office hours. I also really appreciate that the course was planned so that we had more time towards the end to learn the more complicated topics.
- The error message page was the best for me. Important for learning the issues.
- The in person lectures
- The youtube videos
What changes, if any, would I suggest for this course? |
- I think the course was well structured overall but felt as though assignments were way too time-consuming. I also feel like there should be more people on duty for office hours because it would take about an hour or two to get to your turn and sometimes not everyone in the queue would get a chance.
- Instead of second chances, the student's lowest assignment mark should be dropped. Also, more weight should be allocated to assignments versus the final exam
- More hands-on examples during lectures.
- More lightsabers.
- n/a
- none
- None
- None
- None
- Please structure the assignment questions more clearly. Often it was hard to understand what the question was asking us to do. Maybe include more examples of how the code is supposed to work, or just word the questions better.
- provide slightly better/more public tests, make less changes to the assignments after they are released, release style feedback earlier
- Some of the assignment's we fairly short but challenging. I'd like the assignments to be longer but easier.
- The piazza was a bit, stuffy. Many pined posts which pushed the questions down. Also, @99 with no response is not very helpful. At least point to what part of @99 as it contains many things.
- -While I very much support the course's goal of "teaching student's to fish" by having us develop the habit of reading instructions carefully, this was quite frustrating at times due to the often poorly-written assignment instructions. Almost every week there would be some type of typo or mistake in either the assignment page or interface file. Or, the question would be worded super awkwardly and contain ambiguities. So I think a key area for improvement is to carefully check over the assignment before releasing them (just like we students must do before submitting), and make sure the questions and instructions are clear and unambiguous.
-Related to the above, sometimes students ask questions that the instructors don't want to answer, i.e. the instructor believes the answer can be found in the instructions. BUT oftentimes the reason we are asking isn't because we've failed to thoroughly read the instructions, but we just can't understand a particular phrasing, or there happened to be a mistake/typo somewhere. So it was kind of discouraging when instructors turned students away even when their question was a reasonable one to ask. Sure, there are times when a student deserves to be @99'd, but there are also many @99's that were uncalled for.
-Tutorials/organization: There were two different occasions when I showed up for the scheduled tutorial only for the instructor to not show up. And this does not include that time 2 weeks ago when the instructor notified us ahead of time that the tutorial would be cancelled. Some of my friends have had similar experiences in their tutorials.
- Write more test cases and draw more diagrams