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: 69 / 86 (80%)
Evaluate the organization and coherence of the lectures. |
Excellent | Good | Satisfactory | Unsatisfactory | Very poor | No opinion |
53 | 13 | 3 | | | |
77% | 19% | 4% | | | |
At what level were the instructor's explanations aimed? |
Too high | Somewhat too high | Just right | Somewhat too low | Too low | No opinion |
4 | 10 | 48 | 5 | 2 | |
6% | 14% | 70% | 7% | 3% | |
Evaluate the instructor's treatment of students' questions. |
Excellent | Good | Satisfactory | Unsatisfactory | Very poor | No opinion |
48 | 18 | 3 | | | |
70% | 26% | 4% | | | |
Evaluate the effectiveness of the instructor's visual presentation (blackboard, overheads, etc.). |
Excellent | Good | Satisfactory | Unsatisfactory | Very poor | No opinion |
51 | 15 | 2 | | | |
75% | 22% | 3% | | | |
Evaluate the effectiveness of the instructor's oral presentation. |
Excellent | Good | Satisfactory | Unsatisfactory | Very poor | No opinion |
59 | 9 | 1 | | | |
86% | 13% | 1% | | | |
Was the instructor available for help outside of class? |
Always | Most of the time | Often enough | Not often enough | Never | I did not seek help |
27 | 17 | 1 | 1 | | 23 |
39% | 25% | 1% | 1% | | 33% |
Did you find the course interesting? |
Very Interesting | Interesting | Not interesting | No opinion |
31 | 35 | 3 | |
45% | 51% | 4% | |
Evaluate the overall effectiveness of the instructor as a teacher. |
Excellent | Good | Satisfactory | Unsatisfactory | Very poor | No opinion |
53 | 15 | 1 | | | |
77% | 22% | 1% | | | |
What proportion of lectures did you attend in this course? |
90-100% | 75-90% | 50-75% | 25-50% | < 25% |
56 | 10 | 1 | 2 | |
81% | 14% | 1% | 3% | |
Was the assigned work (assignments, projects, etc.) helpful in learning the course content? |
Very helpful | Helpful | Not helpful | No work assigned | No opinion |
34 | 31 | 4 | | |
49% | 45% | 6% | | |
Were the printed notes (if any) helpful in learning the course content? |
Very helpful | Helpful | Not helpful | No printed course notes | No opinion |
35 | 28 | 2 | 2 | |
52% | 42% | 3% | 3% | |
Was the required textbook (if any) helpful in learning the course content? |
Very helpful | Helpful | Not helpful | No text required | No opinion |
10 | 11 | 7 | 36 | |
16% | 17% | 11% | 56% | |
Did the course introduce an appropriate amount of new material? |
Too much | Somewhat too much | Okay | Somewhat too little | Too little | No opinion |
5 | 18 | 42 | 2 | 2 | |
7% | 26% | 61% | 3% | 3% | |
Was the amount of assigned work required for the course appropriate? |
Too much | Somewhat too much | Okay | Somewhat too little | Too little | No opinion |
18 | 36 | 15 | | | |
26% | 52% | 22% | | | |
On average, how many hours per week did you spend on this course outside of lectures? |
0-2 hours | 3-6 hours | 7-10 hours | 11-15 hours | > 15 hours |
1 | 9 | 28 | 21 | 10 |
1% | 13% | 41% | 30% | 14% |
At what level were the instructor's explanations aimed? |
- [Just right] Instructor(Dave Topkins) is really good at explaining abstract and complex concepts in the most simplest way with analogies and visual representations such as Stack(plate analogy), merge sort(stack of papers analogy) removing from linked list(visual representations)
- [Somewhat too low] I would have liked more in-depth explanations and gone into more detail.
Evaluate the instructor's treatment of students' questions. |
- [Excellent] Dave always rephrases question asked in class which is helpful when a student asks something you don't understand
- [Excellent] very helpful, and eager to teach
- [Excellent] Would have liked more explanation not attached to just the slides.
- [Good] Asking questions are highly encouraged. I am already predisposed to do this so sometimes I have to hold myself back
- [Good] Sometimes dwells on questions that are not relevant to the course, or spends too much time on basic questions
Evaluate the effectiveness of the instructor's visual presentation (blackboard, overheads, etc.). |
- [Excellent] Drawing the linked list and removing elements something that I will never forget, i think it's a lot more helpful than just giving the algorithm or talking about it. I think it should be done in other examples as well such as removing/adding from a tree (perhaps balancing for the next terms).
Evaluate the effectiveness of the instructor's oral presentation. |
- [Excellent] Makes the occasional slipup by saying one word when he means the other. Sometimes this is a bigger deal if he is using specific terms
Was the instructor available for help outside of class? |
- [I did not seek help] Though I did not attend office hours due to class conflicts, I thought it would be more helpful to have class hours earlier in the week, as Dave's office hours were right before the assignment deadline (not criticism at all, since there are other instructor's hours as well)
Did you find the course interesting? |
- [Very Interesting] In terms of memory management it was interesting and challenging. Personally, it was something that I've never tried before. But my expectations were more abstract focused.
Was the assigned work (assignments, projects, etc.) helpful in learning the course content? |
- [Helpful] I would prefer the assignments to have some more easier questions at the start followed by a challenging few at the end (rather than some assignments that were hard throughout)
- [Helpful] Some assignments felt way too long and asked too much that wasn't directly related to what we were learning.
Were the printed notes (if any) helpful in learning the course content? |
- [Helpful] I accessed them online
Was the required textbook (if any) helpful in learning the course content? |
- [Not helpful] I didn't buy it. Totally not required. Apparently it has more practice problems.
Did the course introduce an appropriate amount of new material? |
- [Somewhat too little] Course aims to teach algorithm design but skips many important concepts like balancing trees, hash tables, graph searches, shortest paths, divide and conquer algorithms (choosing a pivot etc.) while focusing more on memory management. I think this should be teached java or python so that students can better focus on their algorithmic reasoning memory management makes this course overly complex and shifts its focus. In CS246 students will be already dealing with memory management.
- [Somewhat too much] dynamic memory can go die in a hole
- [Somewhat too much] The difficulty curve of the course was a bit exponential; it's a few weeks of simple, kinda-dry material to suddenly memory and efficiency, then suddenly malloc just appears.
Was the amount of assigned work required for the course appropriate? |
- [Somewhat too much] * Some assignments were fine, some were way too long.
* Please don't make an assignment due the same week as a midterm. I know there was a break, but still. No other course did that.
* Allowing at least *one* dropped assignment might help.
* Providing slightly more useful test cases would be nice. The recent malloc assignment is an example; the simple tests for 2 are literally a one line test that provides nothing for us. Not looking for extensive tests, but providing maybe more than one example test (two would be nice) would help.
- [Somewhat too much] Some assignments were a bit too long, especially the first couple (the one with the sentence editing was ridiculous for the beginning of the course).
- [Too much] Assignments generally needed clarification, descriptions were not adequate enough to understand easily. Instead of giving majority of algorithms in course notes, we should have been talking more about the algorithmic approaches, and do the all implementations by ourselves. For the last two assignments I've spent more time on understanding the questions and modifying the already given implementations for the overly complex questions. I think assignments can be more real word suited examples, instead of just implementing an ADT we should also understand which ADT is more useful in which scenario and why. So that students can better understand why should someone use stack over queue or linked list over array or vice-versa. For instance, one of the assignments can be building a local social network with graphs. CS135 was better in terms of this real work suited assignments approach.
On average, how many hours per week did you spend on this course outside of lectures? |
- [3-6 hours] At the beginning, definitely less than 4 hours a week, but probably increased to over 8 hours towards the end. On average (amortized heh), it isn't too bad.
- [7-10 hours] More like 4-7
Note: This is a complete list of comments I received, listed alphabetically to avoid bias.
Please mention anything that you feel the instructor has done well in this course. |
- All of your lectures were clear and easy to understand, plus it's obvious you care about the students and want to be a good teacher.
- Always very enthusiastic and passionate. Very good examples and diagrams.
- Amazing prof. Very considerate and nice to students.
- Awesome jokes!
- Bad jokes lol
- Brilliant use of examples to illustrate core concepts. All minute details had been explained with care. Learning C couldn't have been more enjoyable for a first-timer. Need your blessings for CS246 and the others.
- Clear explanations, made lectures enjoyable, diagrams aid with explanation
- Course was engaging and clear, some of the analogies makes it better to understand the concepts.
- Dave has a really positive attitude and is very expressive. I enjoy his sillyness.
- Dave has definitely kept the course interesting through his presence in the classroom. Some lectures had a little bit of a spacing issue (too long on one not as important topic or example and breezing through an important one after time is running out).
- Dave is a very funny prof, his jokes made the class more enjoyable for sure! He is also very accommodating, as he always asks for constructive feedback on lecture style/course notes/etc, and tries his best to adjust to help all of us, which I thought was nice. And finally I like that he does a recap of the previous lecture at the start of every class.
- Dave is an awesome instructor. He organized the content very well, with the students best interest in mind.
- Dave tompkins has been one of my favourite teachers by far. He is entertaining, enthusiastic and even in the more theory concepts kept students engaged
- Dave was able to capture and retain the attention of his students effectively throughout the whole lecture.
- Dave was great. I understood everything he explained all year.
- Dr. Tompkins is a very effective communicator. He managed to explain the course content really well. He is also fond of giving analogies to help elaborate a concept (I am also a fan of using analogies as a learning aid). His lecture is always engaging. He is also very helpful outside of class.
- Drank lots of Coke Zero and also explained concepts at a level all students can understand
- Engaging, taught content well, makes funny jokes to keep me awake in class
- Excellent communication skills, I really appreciated the openness and knowledge of the content.
- Excellent lecturer.
- Explanations were great.
- Fun and interesting examples, good enrichment material
- funny jokes!
- * Good analogies, interesting tangents and information.
* Interesting to listen to, never boring.
* Answers student questions decently.
- Good demonstrations during lecture.
- Good explanations for new materials.
- Good explanations; always tries to find helpful analogies.
- Great analogies
- Great sense of humor.
- He gave many examples of new concepts and explained well how the code worked. Ex, trees
- I think he does a good job trying to see things from the students perspective and is very fair and understanding.
- In-depth explanations of core CS concepts. Valuable information on the mechanics of C and its relationship to memory.
- Kept people engaged in the lecture
- Motivation
- One of the best instructors I have ever had. His analogies to enthusiasm for the students is absolutely astonishing. Being a second CS language, Dave has motivated me to continue pursing a CS degree.
- One of the best professors I've ever had, hands down. Pretty motivational too.
- One of the best profs. Very engaging.
- Play movies before class
- Prof Dave is a great and knowledgeable professor and he explained the concepts well and revisited the last lecture a bit in each lecture.
- Really humourous and create a lighthearted class environment.
- Some of the course material felt boring, especially for people who have a background in imperative programming, but Dave still managed to keep classes interesting and engaging. I think he did a fantastic job overall.
- Super engaging. Encourages discussion.
- The enthusiasm and energy with which Dave introduced concepts made lectures really fun to attend and easy to understand. :D
- The instructor's emphasis on visualization has definitely helped me to understand the concepts better
- Very clear explanation. Stress the key points to make sure everyone understand what is happening, and I feel I understand than the concepts behind the codes clearly understand Dave's instruction.
- Very clear oral presentation and have a good sense of humour
Dave makes the course content not too hard to understand in the class.
Also, I like the 'second chance' clicker questions.
- watch the movie at the beginning of the class, though the movie this term is kind of boring
Please make constructive comments about anything in the instructor's technique or style that could, in your opinion, be improved. |
- All was good
- * Can I mention the Coke?
* Sometimes spends too long on certain topics, leading to falling behind.
- Condescending during office hours.
- Could drink less coke in class.
- Course is fine as is.
- Course notes is not helpful enough
Assignment requires much more from lecture
- Dave should consider drinking less Coke Zero. But other than that, everything was perfect.
- Dress more formally.
- Drink less coke:(
- Everything is excellent
- Exams were far too long while not assessing someone's true ability or knowledge. Assignments were too tedious. Not enough <a href="#">R E C U R S I O N</a>
- have more clicker questions
- I mentioned last term...but it didnt change. Mc is a really bad classroom for cs. Really bad. Stc like Alice's class has bigger screen, and my view will not be blocked by front students.
- I personally think that the course note could have been broken down into smaller modules. Right now it's hard to track the progress of the course since most of the time the lecture is cut off in the middle of a module, which leads to the need of extra time to review previous slides in order to proceed. It would be better if the current modules could be broken down into maybe one-lecture/two-lecture worth of material so that we could always have a fresh start at the beginning of a lecture/week. Also, with the current structure of the course note, the modules are so big that it becomes hard to give the module a descriptive name, and hence making it harder for us to truly understand what the module is about and to quickly grasp the core of each module (and to find a certain topic in the note sometimes). I believe it's an important idea in programming to "write a function/class that only does one thing" and I believe it's time to do the same with our course note: breaking current modules into smaller ones and giving each one a descriptive name for better performance in data retrieval (find topics in course note) and insertion (absorb the knowledge).
- I think it is nearly perfect.
- I wish he had written more on the slides themselves.
- In CS 135 we did a lot more in class coding and on paper coding these were generally good activities. I think these activities should also be in CS136
- More clicker questions to aid understanding
- N/A
- None professionally, everything was great! On a personal level though, please do try reducing the amount of Diet Coke you have. You should try something healthier. :/
- None that I can think of. He is one of the best teachers I have had.
- Not enough 8675309
- Not enough Diet Coke. I recommend getting a sponsorship from Coke as well, cash in!
- Not so much related to the course but being able to get 1-on-1 time seems to be difficult. Understandable, since awesomeness makes people busy.
- Nothing
- Nothing.
- One thing is getting off-topic. Sometimes tangents can extend beyond 2 minutes.
- Perhaps more use of illustrative examples.
- Please no more long exams, RIP my GPA. And also improve seashell.
- Sometimes content moves a little too slow, I understand it's to ensure that all students are at a similar pace but perhaps spend less time on unrelated materials (for example, sometimes we go off on tangents in class).
- Sometimes he spent a little too long on one example and we would end up being a bit behind
- Sometimes slow down by answering so many questions.
- Sometimes when answering questions regarding how an assignment was unclear or something didn't make sense you would say that the professors weren't perfect, wasn't much of an answer. Of course, I understand that mistakes will happen with course material, but justifying them by saying you guys aren't perfect seems more like an excuse than a reason and didn't help to solve the issue.
- The pace at the end of the term could be slower.
- Too much time on analogies. Sometimes it is unnecessary.
- Touch on more advanced concepts in lectures so the assignments aren't as overwhelming
What were the strong points of the course? |
- All
- Content was interesting and you could apply it immediately.
- Course gave us a deep understanding of computer science. The material was excellent
- Didn't use Racket
- Effective teaching materials.
- Fun assignments and course material
- Funny guy, engaging even though material can be boring.
- Good instruction on valuable CS fundamentals (pointers, arrays, data structures, memory).
- Good introduction to C combined with good instructor made it an easy to learn course.
- Good lecture format. Learning about memory and creating a model for how C works were highlights. Dave's lectures were easily the best part.
- I like how the course aims to provide a solid foundation with the basics of imperative programming, but is still successful at tackling more abstract concepts. Though I have previous knowledge of C, I felt that I learned a lot from this course anyway, especially towards the end. In general I think the way it is taught builds better coding practices.
- Interesting questions that resembled real-world programs
- Introduce many new and useful stuff.
- Introduction of important concepts in programming effectively.
- It is a very comprehensive introduction to computer science which covers a wide range of topics. Some topics discussed in class closely relate to the IT industry.
- It was very interesting to see the difference between imperative and functional programming
- It's CS136!
- * It's overall an enjoyable and interesting course.
* C is a language that teaches a lot when one tries to learn it.
* Topics covered (memory, efficiency, heap) are all applicable outside of the course, and are interesting topics.
- Learning about how memory allocation works.
- Learning how a computer works at a lower level
- lots of useful information
- Most of the material towards the second half of the course was a lot more interesting.
- Prof (Tompkins) and content.
- Really solid contents and knowledge which lay a foundation for our future CS study
- Teaching the relation between the abstract(data, algorithms) and physical state(memory)
- Teaching us an imperative language
- The course infrastructure (marmoset, seashell, ISA) were well developed. The community is also nice (lots of memes).
Clicker questions were tricky but you could make up marks from tutorials.
- The exposure to real-life programming practices.
- The layout of the course and teaching. The slides were the best.
- The subtle differences between functional and Imperative languages were highlighted in a very good way
- There was lots of support from ISAs and profs.
- This course is useful and give a introductory to imperative paradigm.
- Use many interstate assigned work (soduku,maze...) to enhance our understanding
- Useful
- Useful content
- Very clear notes.
- Very good foundation to learning C, very interesting.
- Very helpful slides.
- Very informative and interesting
What were the weak points of the course? |
- * Assignment questions are quite often either harder than expected or time consuming.
* As mentioned earlier, it would be nice if there were more useful example tests.
- Assignments are definitely challenging. Not necessarily a bad thing but it caused a lot of stress as students have to pass assignments to pass the course and it is quite hard to pass the assignments sometimes.
- assignments too long/too hard compared to lecture material
- Assignments took too long to complete and were quite restrictive, my own solutions worked perfectly but I couldn't understand the official solution.
The workload was too heavy, given that I could have taken CS 116 but did 136 as an elective to learn more (I have no intentions of trying to transfer to CS).
- Assignments were sometimes too long and not properly finished which could be frustrating at times (A3 I believe wasn't finished until a few days later). Also having almost a full hour and 20 minutes of straight talking could get dreary, maybe interject with more examples/practical code to reinforce concepts.
- Bad bad bad bad classroom. As I mentioned above and last term. And difficult assignments
- C is an awful language. This course has only made my love for Python stronger.
- Closer relationship between lecture material and assignments.
- Exams
- Homework gets really difficult at the end and should be less heavy.
- I did not find my time in tutorials very effective.
- I think some questions on the assignments were a bit unclear at times.
- Instructions in the assignments are not very clear.
- It's CS136!
- Many assignments felt way too long because of a single question that was worded poorly (e.g. Rainbow Bridge, Game of Splendor, Sudoku). This discouraged me from finishing some assignments. Assignments also felt like they weren't teaching me anything, (I think I learned more from in-class clicker questions).
- Many important algorithms skipped or given as a C code. We should spend more time on building our algorithms and less time on memory management. Instead of giving algorithms as a C code, it would be a lot beneficial if we just talk about them in class with visual representations and implement them by ourselves on real world examples.
- Marks were very slow to be released, assignments were varying levels of difficulty. Too indecisive of the deadline format (second chances vs extensions; I think you should've stuck with second chances). Regarding seashell and marmoset:
Seashell: implement a way to minimize functions (like Eclipse).
Marmoset:
- group assignments together so that the main page isn't a blob of every single question in the course.
- takes me 3 button clicks to view secret tests, then 3 more to go to a different question. Use the format for viewing marks on cs136.
- May give students more information so that we will struggle less for assignments.
- Midterm and some assignments are unreasonably long
- Midterm far too long, assignments also long with some questions unreasonable without enough tests provided to aid understanding
- One or two assignments could have been worded better.
- Outside workload was too work heavy.
- Seashell was very unpleasant.
- Some parts went by quick, could've gone a bit slower or more in depth
- Sometimes over-explains concepts.
- Sometimes the assignments were very ambiguous and difficult to undersatnd
- Sometimes there are too much new stuff to digest. Also the assignments are really hard and require a huge amount of time.
- Sometimes too much content is introduced at once and it's overwhelming trying to see how they interact.
- Somewhat tedious assignments.
- Somewhat too much materials to cover at the end of the term.
- Spend too much time on doing assignments while feedback is relatively weak and sometimes I do not have much time to review my results but rush into another assignment.
- The assignments at the beginning of the course took around 9-10 hours, by the end of the course, assignments took 15-20 hours. I know I am not alone, lots of kids would just skip questions because they didn't have enough time.
- The midterm was too long and some assignments weren't clear
- The start of the course felt a little slow, personally, but I understand that it is important not to rush the foundation skills. As well, I think some of the assignment questions were not as clear/polished when just published, but the instructors were quick to fix any error. Plus, I think some assignment questions could be better tested - for example less focus on getting the output perfect, since sometimes a small error in the printing would take over correctness in other functions.
- The structure of the course note could be further improved. The assignment questions are a little bit too long.
- Too hard
- Too many small pieces of theories and key concepts
The marking systems are really strict. Sometimes we might make a little mistake, which might only influence the print format, but secret tests will fail.
However, our methods are correct and our functions are 90% correct, and we still cannot get any marks, which is really frustrating.
- Towards the end, it kind of felt like a large amount of information was pumped in. especially from module 10.
- Trivial Coursework
Was the class atmosphere affected either positively or negatively by attitudes of the instructor or students, e.g., with respect to gender, race, ability, appearance? Please explain. |
- A certain student made the course a bit more difficult to want to go to at first.
- Attitude of one of students were unintentionally disturbing(asking too many irrelevant questions or talking about irrelevant things without consent) in terms of the progress of the course. But instructor( Dave Tompkins) handled the situation superbly and changed the situation to an unexpected advantage.(kept us engaged with interesting answers to those irrelevant questions and the amount of irrelevant questions gradually decreased)
- Attitudes were fine on both sides.
Suggestion: instructor should avoid bringing up his own political views in class, even if it's just a short joke.
- Dave makes a conscious effort to be inclusive during his lectures and does not avoid talking about diversity when it comes up.
- Dave was simultaneously engaging for those that wanted more involvement, and respectful to those that didn't want to speak out, which was great.
- Dave's enthusiasm about the subject, Seashell, and his puns positively affected the classroom atmosphere.
- Dr. Tompkins is very respective to every students in class. He is fully aware of international students in his section and carefully explains some words that he thinks might be hard to understand.
- Everyone was welcoming.
- Everything was great
- Good
- Great
- I'd say there was a positive class atmosphere.
- N/A
- Neutral.
- Neutral.
- No
- No
- No
- No
- No, Dave was great.
- No, Dave was super chill
- No.
- No.
- No.
- Noisy students interupted class flow
- None negatively.
- Nope
- not affected
- Positive
- positive
- Positive. Even though we had a loud kid in class, Dave handled everything very nicely.
- positively
- Positively.
- Positively. Students are all keen to learn knowledge.
- Predominantly male but that's just the nature of the cs program right now. Makes it hard to have female friends to code with.
- Students seems tired.
- The atmosphere was great.
- Very positive, honestly one of the most accepting and open professors I've had.
Any other comments, e.g., class size, suitability of room, noise level, etc. |
- Bad bad bad bad bad mc classroom
- Beginning of the term if you were late the only seats left were the back.
- Class size is fine, I would appreciate if some students would be more quiet instead of interrupting almost every ten or fewer minutes :^)
Seriously though, really enjoyed the course, hope you continue to keep having great lectures Dave!
- Classroom was quite full.
- Good.
- Good.
- I do not like the mid-term 2pts adjustment. There was a multiple choice question on the first page, where I got everything right but the marker marked it wrong. It was clearly a marking mistake, but that policy prevented me from correcting the issue because I lost 2pts for that question. From most of the people I knew, they did not have such clear incorrect marking. I think that policy only benefited the students who were not satisfied with their grades, and prevented them from asking for a remark for something that is trivial. However, it really hurt me who just got an incorrect marking, which made me feel that the test is more like a game of luck.
- I don't really like how there's always a rush before/after class, it makes it difficult to get in and out of class. Not sure if anything can be done about it though.
- I feel that MC needs a major renovation. Now it is just a depressing place to be in with the depressing light colour (4th floor is better in my opinion after they changed the light colour).
- I like that we didn't do much Racket in 136.
- It was good
- It was just right
- it's good
- Just right
- Just right.
- n/a
- N/A
- No
- No
- No comment.
- no other comment. overall strong instructor. however, it would be nice if students were handled in a nicer manner during office hours.
- No.
- None.
- Really helpful and interesting course.
- Room size is good
- Room too small
- Room was a little crowded.
- The room was slightly too small.
- Too crowded
As always, I showed 5 minutes of a movie before each lecture. This term the students voted for Captain Underpants: The First Epic Movie (Sec 003), Kung Fu Panda (Sec 005) and Moana (Sec 009).