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: 66 / 101 (65%)
Evaluate the organization and coherence of the lectures. |
Excellent | Good | Satisfactory | Unsatisfactory | Very poor | No opinion |
53 | 13 | | | | |
80% | 20% | | | | |
At what level were the instructor's explanations aimed? |
Too high | Somewhat too high | Just right | Somewhat too low | Too low | No opinion |
4 | 9 | 48 | 3 | 1 | 1 |
6% | 14% | 73% | 5% | 2% | 2% |
Evaluate the instructor's treatment of students' questions. |
Excellent | Good | Satisfactory | Unsatisfactory | Very poor | No opinion |
54 | 11 | 1 | | | |
82% | 17% | 2% | | | |
Evaluate the effectiveness of the instructor's visual presentation (blackboard, overheads, etc.). |
Excellent | Good | Satisfactory | Unsatisfactory | Very poor | No opinion |
40 | 23 | 3 | | | |
61% | 35% | 5% | | | |
Evaluate the effectiveness of the instructor's oral presentation. |
Excellent | Good | Satisfactory | Unsatisfactory | Very poor | No opinion |
54 | 11 | | | | |
83% | 17% | | | | |
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 |
10 | 9 | 9 | 2 | | 36 |
15% | 14% | 14% | 3% | | 55% |
Did you find the course interesting? |
Very Interesting | Interesting | Not interesting | No opinion |
34 | 28 | 2 | 1 |
52% | 43% | 3% | 2% |
Evaluate the overall effectiveness of the instructor as a teacher. |
Excellent | Good | Satisfactory | Unsatisfactory | Very poor | No opinion |
58 | 8 | | | | |
88% | 12% | | | | |
What proportion of lectures did you attend in this course? |
90-100% | 75-90% | 50-75% | 25-50% | < 25% |
59 | 5 | 2 | | |
89% | 8% | 3% | | |
Was the assigned work (assignments, projects, etc.) helpful in learning the course content? |
Very helpful | Helpful | Not helpful | No work assigned | No opinion |
38 | 28 | | | |
58% | 42% | | | |
Were the printed notes (if any) helpful in learning the course content? |
Very helpful | Helpful | Not helpful | No printed course notes | No opinion |
28 | 27 | 2 | 1 | 8 |
42% | 41% | 3% | 2% | 12% |
Was the required textbook (if any) helpful in learning the course content? |
Very helpful | Helpful | Not helpful | No text required | No opinion |
2 | 10 | 15 | 12 | 27 |
3% | 15% | 23% | 18% | 41% |
Did the course introduce an appropriate amount of new material? |
Too much | Somewhat too much | Okay | Somewhat too little | Too little | No opinion |
2 | 17 | 38 | 6 | 1 | 2 |
3% | 26% | 58% | 9% | 2% | 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 |
12 | 28 | 25 | | 1 | |
18% | 42% | 38% | | 2% | |
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 | 19 | 23 | 12 | 11 |
2% | 29% | 35% | 18% | 17% |
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. |
- Amazing oral presentation and similar skills - kept the class entertaining (very funny). It's great to have a Professor who teaches well AND can make content entertaining.
- Classes are very entertaining and easy to follow through. Concepts are well explained using simple non-technical vocabulary and examples.
- Dave always explain a lot.
- Dave has to be one of my favourite professor at waterloo that I've had so far. He is very good at presenting the content in an interesting and exciting way. It is hard to not be interested in the course content because it is clear that Dave is very interested in what he is teaching. I am going to make an effort to have Dave as a prof for my future courses.
- Dave is an engaging and passionate lecturer who always finds ways to make the material interesting.
#include ? [stripped out by learn]
#include ?
#include ?
struct human = {bool is_cool;}
human *dave = malloc(sizeof(human));
assert(dave->is_cool); //yeah, we didn't even initialize it
- Dave was really good at explaining topics and giving demonstrations, drawing diagrams to help. He also had a sense of humour and kept the class entertained.
- Dave was very enthusiastic, and engaged the class well. He, for the most part, kept us interested in the material. Also, his white board drawings were very helpful in increasing understanding of pointers and memory usage.
- everything was awesome
- Everything, very good teacher, wouldn't mind having him again in later courses
- Everything; Dave's done an excellent job coordinating the course. Everything is structured in a logical manner, the course notes are more clear and organized than any I've seen, and Dave's oral presentations were enthusiastic, clear, and interesting.
- Excellent job
- Excels at keeping students engaged while teaching some of the "dry" material.
- funny
- Funny guy, funny guy.
- Funny, approachable, knowledgeable. Your analogies are pretty ridiculous sometimes, yet always entertaining and somehow helpful.
- giving analogy on everyday objects
- good
- Good explanation
- Good explanation and he is very active which make students more interested
- Good humor, nice analogies, explained subjects well.
- good verbal explanation of concepts, as well as code examples done in class
- Great at making connections to the real world that made the course material interesting
- Great examples, really helpful
- Great job at drawing diagrams on the board. Makes the material a bit easier to understand
- Great job at explaining concepts in layman's terms, easy to understand while making the learning experience fun.
- I like that he uses every minute of the class, and does not stop 5 minutes before the class ends. He also explains concepts well with diagrams, and he engages the class
- I really like the professors tone, jokes and overall presentation throughout lectures! He really knows the slides very well before the class and he can really relate to us geeky students and incorporate awesome references and jokes in his lectures. He is just amazing! Totally fun professor and I really hope he teaches a lot more upper year CS courses! Once you have Professor Dave Tompkins you can never go back!
- Incredible ability to relate well to the class and keep engaged.
- Keeps the class interesting with his jokes!
Explains most of the content very thoroughly and clearly.
- Love the jokes in class
- Loved the interstellar5555
- Made the class enjoyable to come to everyday. All questions were full answered and the course was easy to understand with your side explinations.
- Oral presentation was excellent;
Slides were detailed
- Pointers
- Pop culture references, and also tangential segues. Instruction in general.
- Pretty much everything. Good notes, good presentation of the material.
- Really cares about the students.
- See comments below.
- some concepts are well explained
- talks very loud
draws picture on whiteboard when it comes to tricky stuff
- The course is very interesting.
- The explanation is pretty clear and logical.
The in-class teaching is very efficient, I don't need to spend too much extra time reading the course notes again after attending classes.
- The graphs you draw on the whiteboard is very good.
- The instructor did an excellent job of communicating the course content. The lectures were always fun and engaging.
- The instructor provided a great deal of background into computer science and linked them together very well in a manner that is appropriate for students taking an introductory course.
- The instructor was able to illustrate hard concept using diagrams and real-life examples, which made the course much more interesting and easier to understand.
- The instructor's "bad jokes" were not bad at all.
- Took the appropriate amount of time for each concept
- Very entertaining and engaging way of presentation
- Very good at engaging students and explaining the materials.
- You did a great job of teaching this course! I Loved it! Making good jokes, it keeps me interested. Also the Daft punk video was cool. You were able to make the content interesting, and the lectures engaging. I also appreciated you allowing us to discuss clicker questions with each other once its apparent we failed epically. This helped us understand it ourselves and realize our mistakes.
- you're perf, greatest prof eva
Please make constructive comments about anything in the instructor's technique or style that could, in your opinion, be improved. |
- a little more examples on things that we would see on assignments instead of assuming that it will be done.
- As I am not in the math faculty it would have been more useful had you explained a bit more of the reasoning behind the efficiency of iterative functions. It wouldn't need to be insanely more time (I assume that most of the students do have a good foundation in math), maybe a couple of extra minutes on it for us non-math majors.
- Avoid writing on the board in a classroom with 10 rows, cause it's really hard to see when there's 5-6 heads in front of you and we're all at the same height.
- Be even more awesome.
- Can't think of anything.
- Coming from CS135, this may be an appropriate course, but as a CS116 student there was a lot of overlap of material. A new course that bridges the gap between cs116 and cs246 would be great (not sure if it would be feasible though).
- Could be slower and more detailed while teaching pointer to pointer
- Could possibly allocate more time towards some of the more complex, yet necessary elements of the course, such as Pointers, Abstract Data Structures.
- Dave please not drink too much coke, it is bad for health.
- Diagrams on the board could get confusing. If you finish up the pointer diagrams built into the slides this will formalize them and would be a good implementation. Sometimes you would explain things in a way or talk about side information that some less "geeky" people in the class would know. I understood most of the references but my friend did not. Either keep these extra tidbits of info shorter or explain them better so everyone understands.
- Draw better graphs on the board.
- explain difficult concepts again even if nobody raises their hand, or clarify the key points
- find some new jokes to tell (ex. personal experience with X in scenario Y), almost all the jokes told in class this term can be found in http://stackoverflow.com/questions/234075/what-is-your-best-programmer-joke and some of them are like 6 years old
- For the section: Dynamic Memory Allocation, the speed was high in teaching so I lost for a while.
(Also the slides were a little bit confusing in that part)
- good
- He could probably stop a bit more often to check if students understand the material, and if they don't, he can suggest some advice on how to understand the material if students do not want to put their hand up to admit they don't know a concept
- Humorous! Please keep it up.
- I can barely see the laser pointer, and have no idea what you are pointing to on the screen because it is so faint. Use a better laser pointer, or write on the slides themselves.
- I really liked the examples the professor drew on the board and with his tablet on the slides, but it would be really cool if he had some way of putting slides of just those examples! When studying for the midterm I would've really liked having those examples and drawings to go through the slides easily and get more out of them. I remember reading a bunch of the other constructive comments on his website and I am totally in support of those! MORE GAME OF THRONE REFERENCES :D and more awesome jokes (don't listen to the people that want less awesome jokes haha)
- Maybe spend more time going over the last few chapters because they're more confusing than the previous ones.
- N/A
- N/A
- No
- none
- None.
- None. Dave Tompkins is the best instructor I have had so far.
- nope
- Nothing
- Nothing! :)
- Nothing, my favourite prof so far!
- Nothing.
- Nothing; Dave's excellent.
- See comments below.
- Some concepts were briefly mentioned, i.e. reverse engineering, but no information were given on them. The instructor should either explain these concepts more, or just leave them out altogether.
- Sometimes some advanced topics come up and you tend to not go into much detail. I'd like to hear more about those topics even if most students won't understand.
- Spend more time in difficult modules and spend less in easy modules.
- start a new model at the end of class
- The incorporation of tablets is very effective and should be used more often.
- There are very few things Dave could possibly improve on. He's engaging and speaks at the perfect pitch and speed. It would be nice to see the use of the tablet throughout the entire lecture notes (unfortunately, we only got to have it used partway through)
- There is nothing that Dave needs to change about his teaching. It is perfect as it is. He did mention that he was going to be working on animated diagrams for the course which could be helpful but that would just be an added bonus to his stellar teaching.
- Too many 42 references in the course notes, more potato
- Use less keystrokes
- When using the electronic pointer(the device with red light to point at which part the instructor is talking about on slide), the red light is not easy to catch. I got confused at which part the instructor was talking about sometime.
- you can never keep my attention for long
What were the strong points of the course? |
- A good primer on basic imperative programming.
- Almost everything.
- Broadened my knowledge of the inner-workings of code
- C language is fun.
- Covered a large amount of useful content
- Dave Tompkins.
- Establishes basis of imperative C programming, essential towards upper level courses and involves concepts applicable in real world development.
- Fun stuff
- fundamental
- good
- Good coverage of C fundamentals and the imperative paradigm.
- good lectures, interesting assignments
- Great Professor, some assignment questions were pretty cool.
- I enjoyed the memory model stuff, I think it made me a better programmer.
- I have had a lot of experience with programming in high school so a lot of the course content was review except for C specific things. Because of this, I found that the most interesting part of the course was pointers (memory management, arrays, lists, etc.). I think that these topics were covered very well and in a way that is easy for people to understand which is impressive as pointers can be very confusing.
- I mentioned most of the points in my appraisal of Dave, but this was a great course that feels as clear and concise and full of useful information. It really helped emphasize why the sort of odd approach of CS 135 and Racket was done; in retrospect, I understand and appreciate why that was done more than before. The assignments were usually well-constructed and helped me understand the material and how it was useful. Definitely the course I enjoyed the most this term.
- I really enjoy getting the basics down pat before just diving into programming. While I had employed many of the techniques previously I have a much better grasp of what is happening behind the scenes and how to write elegant and efficient code.
- Instructors are excellent, slides are helpful
- Interesting material, goes beyond programming.
- Introduced new useful topics.
- Learn a lot of theoretical CS and abstract thinking
- learn how to think
- Learn new things
- Learning and practicing at the same time.
- memory
- might be useful in the real world, c
- Moved at a good pace.
Learned a lot of new things.
- Nice progression of topics.
- Not too difficult to grasp most concepts, and the material is presented in a fairly non-boring way.
- pointer
- Q0 of every assignment - helps to get started
- See comments below.
- The assignments are always fun to work on and help a lot to understand the material. Gave us a fantastic understanding of the iterative paradigm.
- The concepts flow, that is, they connect perfectly.
- The concepts taught were interesting and useful. The midterm was fair.
- The content was awesome, assignments really tested out that knowledge! The professor made this course even more awesome and fun!
- The course helped me build a solid foundation in CS.
- The material is pretty fair, it is useful and in an acceptable difficulty level.
- The techniques that I learned in the course is very useful in other programming languages and even problem solving.
- This course is a good follow up to CS 135, and builds of many of the concepts. It is also very useful in introducing imperative programming.
- Topics were explained very well, videos at the beginning of each class were a nice touch
- Tying together concepts from Racket and implementing them in C. Developing proficiency in C in a relatively short period of time.
- Usefulness and teaches new ways of thinking
- Very interesting and useful for first round of interviews. Should teach more efficiency and abstract data structures in 1A to prepare students for interviews during 1B.
What were the weak points of the course? |
- a lot to handle per week
- Assignments are just too long. This is a problem in CS 135 as well. There is no time to do other assignments as well as 5+ CS questions that require 4 functions each. Shortening assignments would be beneficial to all.
- Assignments too long. Marmoset testing too rigorous. Public marmoset tests should test more in depth. Or, should provide tests for you because testing is way too time consuming. Never understood how to use interactive testing.. Piazza very useful
- At the end of term, the pace was slightly too fast
- Efficiency could be explained better.
- Felt as though it was going a bit fast at times
- Functional C I think was too drawn out. Also, the '?' operator was forced on us, resulting in the worst looking code I have ever written. I think functional C could have been taught using if-else's, but forcing a return statement to avoid imperative programming.
- good
- Homework may get very difficult at times. Marmoset should reveal more secret tests.
- i kinda hate cs in general
- I really think some of the assignment questions were duplicate. Could we reduce the amount of the questions but focus more on different aspects that the assignment could discuss about?
- I think that the professors should spend more time covering how to prevent integer overflow instead of briefly explaining it and then giving students an entire assignment in which they are expected to just figure it out on their own.
- I would like more focus put on being able to see tests and/or solutions once an assignment is done; I think it's good to be able to see where you went wrong or how you could improve, especially at this early point in the game. There wasn't a lot in that department and it wasn't usually too timely.
And Marmoset sucks; sorry. The interface is ugly, having to switch between so many different pages is annoying, and submissions can easily not go through, requiring you to try to go back to the home page (of which there is no button for) to try to resubmit, hoping it works that time.
- Lack of focus, too much time allotted for certain things, such as run time (doesn't need a run time assignment).
- Marmoset could be better.
- Marmoset is terribly designed.
Marks take forever to be updated.
Sorting algorithms need to be explained better; spend more time on them.
- More abstract material is left to the very end of the course and feels a little rushed. I also feel it would be beneficial to have several tougher questions on assignments where collaboration between students is encouraged.
- n/a
- No weak points at all!
- None.
- Not enough depth in data structures and algorithms.
- not enough potato
- Not seeing Dave everyday
- nothing
- Nothing.
- Other schools (and other uWaterloo departments) at this point are learning applicable programming, such as Android programming / Java / Web designing
- Pointer diagrams weren't very clear.
- See comments below.
- Setting up Virtual box is a pain, the last lecture on command line processing is very interested and should be implemented into the course! (That or seashell).
- Some concepts are hard to grasp.
- some times, I can not figure out what should I do to code in C after read examples in course note
- The assignments take somewhat a bit too much time.
- The attempts of using social media trends to teach computer science material.
- The course assumed you knew how to program really well. It taught the concepts but not really how to apply them in different situations. I did extremely well on the midterm because I understood the concepts taught and yet was still failing assignments.
- The slope is not appropriate. The course started with easy material but they followed by heavy material in the end. It is better to have a symmetric schedule.
- The way assignments are structured.
- There is a lot of material covered. Pointers is a difficult concept to understand, and possibly some more time should be dedicated to them, especially pointers to pointers.
- too many students were enrolled in the course that sometimes makes it more difficult to learn
- too much assignment
- Too much Racket. It was somewhat useful at the beginning to transition to C but later on it became more of a hassle to program in both (like on the midterm).
- Very long and ambiguous assignment questions
- would prefer to have more assignment/exam-related stuff in lecture slides (sometimes after looking at slides I'm still not sure how to even start an assignment question)
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 lot of times students would be doing their own projects on their computers, and those are distracting
- Dave was extremely positive in attitude. He would answer questions respectfully- "That was a great question. There is one small problem though ..." and even used examples where the CS expert was female in order to be unbiased.
- fine
- Funny atmosphere.
- Generally positive
- good
- I don't think that it was negatively affected, however as a caucasian female not in the math faculty I sometimes felt out of place. I suppose this leads to me often underestimating my own abilities due to the typical stereotypes associated with computer programmers and the fact that I don't fit them at all.
- I enjoyed the atmosphere of the class. Dave is a very casual and relaxed guy which gave the class a more casual atmosphere which I enjoyed.
- Like mentioned above, this class was a great start to my class, with daft punk playing as I entered and a buzz of excitement about what we had just learned as we left. Thanks for the great time along with a fantastic learning experience.
- N/A
- n/a
- N/A
- N/A
- Neutral
- No
- No
- No
- No comment
- No comment.
- No real concerns, class is class but the instructor was great
- No there was no discrimination in this class(?)
- No.
- No.
- nope
- Not at all!
- NULL
- Positive, it was a very enjoyable class.
- Positive, very patient when students don't understand topics and is willing to explain again and again.
- positively
- Positively
- positively
- POSITIVELY!
- Positively.
- Positively.
- Positively. No problems here.
- See comments below.
- Super duper positively!
- The class atmosphere was good, and fairly laid back. I appreciate that dave played videos before class, making you want to get to class early and making it fun.
- The instructor's attitude positively affected the class atmosphere.
- Um. Nothing that I noticed.
Any other comments, e.g., class size, suitability of room, noise level, etc. |
- A class with charging ports for laptops would have been nice (this is CS 136 :P) and it was kind of hard to get into the middle of rows in this room because it was a really tight space
- Can you teach all of my courses?
- Cannot complain.
- class size is a bit too large
- Class size was fine. Noise level was ok. The room was ok but the seats were too close to the table behind them (if you didn't get there early enough you basically had to slide across the table to get into a row).
- Dave is the best prof.
- Everything is at a suitable level.
- Everything is good
- Everything is good.
- Everything was fine
- fine
- good
- Good
- Great Job Dave!
- I just want to start off by saying that this course with Dave Tompkins has been hugely rewarding. I really enjoyed working on all the assignments and although (I didn't ace all of them), I went back and figured out what I did wrong, and learned a lot that way. I attended all of my lectures except I believe 2 (due to interview conflicts), and I regret not attending those. This course has been pretty challenging and I've taken a lot from it.
Part of what made this course great was the way it was taught by this SPECIFC professor. I think many professors don't know that Computer Science is NOT a prerequisite to getting into Computer Science in Waterloo. So when they teach a concept that I guess at this introductory level is quite basic to THEM, they forget that to a person learning it for the first time, it could be quite challenging. For instance, in another lecture of CS 136 (by another professor), we were learning loops. The teacher covered while, for, do loops, diagrams using loops, all in less than 5 minutes. Within 7 minutes, we already had 2 clicker questions of which the majority of the class got it right (generally because a lot of the students who are here tend to have programming background). There were no second chances given to those who failed, and within 10 minutes we were already knees deep into the next topic. To top this off, the assignment due that week required you to create various diagrams using loops (which isn't exactly easy, again, if you haven't had any imperative/objective programming experience). To top THAT off, you were expected to come up with a diagram on a written midterm using loops, not too many days after that assignment, where you had to reproduce what you had learned, or lets say, mastered within those 5 minutes of class. Go get help? Ask a teacher? Try to ask another student? Asking other students is forbidden. Or at least, it was that term. Going and getting help is pretty tough because if you want to understand it, and a similar problem is in the assignment, TA's and profs are going to be EXTREMELY hesitant to help you. You are basically cornered into your own little world where you have to figure out, what's going on. Dave tried to cushion this hard hitting blow, by stepping through everything and going through each concept step by step. This really helped. What made him better was where other profs would "assume" concepts are basic and skip over them, or make fun of how "easy CS 136" is, Dave actually realizes that certain concepts are tough and highlights them, so students know. This is less discouraging to those who are serious about pursuing CS as a potential career. Of course, he too, was limited by the fact that he had to cover a certain amount of material before the end of the lecture, but what him different than the other prof above was that at least he tried to make the effort in whatever time he had to try to convey to students material in the best way he could. If you're a spectator reading this and are asking aren't there many problems to practice with of which solutions are provided (within the course)? And the answer is no. Usually a concept is taught, you are expected to master it within a short span of time, and if it's hard enough or could trick a lot of people, it will probably be on the final. If you ask for other practice questions, you are simply asking for it. And by it I mean a really hard time. Which brings me to my first suggestion to the improvement of this course. There needs to be MORE practice problems. At least 10-15 different types of those diagram questions, way more practice questions with stacks, and efficiency questions, way more practice with pointers, BEFORE the assignments, ones which are provided with solutions, so students can actually try to understand what's going on and not just get 1 chance (the assignments to do well). This semester, they tried to implement this using "warm up" problems, which helped quite a bit, but they are still not enough. There needs to be MORE questions that target the assignments an midterms/finals to practice, because right now, there simply aren't that many. I will address tutorials in a bit, if you are wondering "Well we have tutorials!".
The following few suggestions are EXTREMELY controversial. But they are important because they target the scarce population of CS students who do not have that strong a background, and are actually trying. I don't figure they'll be implemented in CS 136 for a while but if they do, it'll help a lot! I mentioned before that if you want to get help for a topic that you learned lets say this week, and in an assignment due next week, that topic is on the assignment; then that it's really tough to get help. That brings up another issue that I want to mention. Some TA's and ISA's are extremely paranoid. It's not their fault. They are simply trying their best. But, they are scared they might get in trouble by "helping too much". This is plain stupid, and needs to be addressed. Before going any further, I would like to give an example. After spending hours on a question, and coming up with a solution that seemed most right to me, but dealing with the same error time and time again from RunC (which they are planning on getting rid of), exhaustively trying out different options, and implementing the solution in ANY way I could think of, I ask the question on piazza privately. The response I get back is that I am not allowed to get any help because the instructors are not allowed to debug my code. I didn't learn anything from that experience. Moreover, I fell drastically behind because I didn't learn anything there. I had to go and get help the next day with another TA, who told me exactly what I was doing wrong and where I was wrong conceptually. I made notes, and knew I had to remember this for the future and understood why C was not being compliant. This in turn, made me a BETTER debugger. In the second scenario, I learned, the TA practiced (what he wanted to do in the first place), and we both won from the situation. I understand that if a student coming to a TA or prof for help for a question that is way off and wants to simply get the question over with so he could move on, then, THAT is wrong. But if someone is actually trying to figure out where they went conceptually wrong, has spent considerable time on the question, and they are close, then it doesn't make sense for an ISA/TA to deny help. You are simply being an obstruction to the students' learning and jeopardizing your own future in Computer Science. I'll give an example. In spring term, I overheard a TA in Spring CS 136 saying "Now that you guys are generally typing 100's of lines of code, I won't be able to analyze it." This was a pretty awkward statement, especially since if you're choosing this line of field, you will most likely have to become comfortable with looking at 1000's if not 100's of thousands of lines of code on a daily basis. I figure that is why TA's and ISA's take this job in the first place. If they are not allowed to "debug" other people's code, when they are close to a solution, there is really not much other experience they can get from taking this job. Sure they might be able to provide great feedback on what's going wrong with runC or make clarifications on the assignment, but they aren't really learning a lot from being an ISA if they are not allowed to debug other people's code. This ban, needs to be addressed. Denying ISA's their right to debug other students' code gives them a reason to not do something that is potentially going to help them and other students. It is a LOSE-LOSE situation. On another note, tutorials for assignment (B) need to occur the day after assignment (A) is due. This gives students more time to start and get back on track if they are struggling in the course. Tutorials held on Monday, give students 2 days to prepare for the assignment if the questions are challenging (and they always are). Either keep the assignments due on Friday, or make the tutorials the day after the previous assignment is due. On my next point, this course is pretty inconsistent. In Winter 2012-2013, they had release tokens, so that severely helped the students do better on the assignments. In CS 135, they actually provided you with solutions to every question after the assignment was marked. They don't do that in CS 136, but apparently, they are starting to realize that not providing solutions doesn't make sense, so they provide some solutions this year. In spring 2013, they took away release tokens and told the students "that the course was going to be made easier because they removed a topic", which wasn't true, because what ended up happening was that they just ended up making the assignments extremely brutal. In spring 2013, there were no coursenotes, no warmup problems, no solutions to problems on assignments, no discussion whatsoever allowed on piazza regarding how to do the problem itself, reduced office hours, and no option to check if you got a problem right after the deadline, no practice midterm before the midterm. Moreover, the assignments were confusing, complicated and unnecessarily difficult. This ended up making the course actually WAY more difficult and I believe the average on the midterm sort of reflected this (It was around 65% that term, and the professors didn't "feel" like doing too much about that, specifically quoted from one of the professors). A lot of students who tried their best got screwed, but the few people who did extremely well in the course sort of took away the reality of that term. I am confident if the students that struggled had all the resources that are provided to them this term, that they would have succeeded, but the inconsistency is to be noted. On another issue, there were a few people who were doing assignment 6 while the class was doing assignment 8 (they ended up getting extensions for certain reasons, etc). Essentially they got over 2 weeks extension and no penalties. I have nothing against other people getting extensions, I understand everyone goes at their own pace, until this term when I was really pressed in a week and asked for some more time to work on A7. This term, I had 2 midterms on the same day (on Thursday) the day before the assignment 7 was due and I asked for an extension on one of the more longer assignments (which required you to manually find the efficiency of each type of function), and I got a 24 hour extension. I was glad that I got the extension, except couldn't finish the last question. When I tried to negotiate on having a little bit extra time on the last question without the penalty (which was extended for the entire class for another 2 days), I was simply denied. This didn't make sense to me because I knew in the past that students were allowed more time for Assignment X without penalty if they had a good reason, even if the class was doing Assignment X+2. I had a pretty good DAMN reason, and I provided proof and everything, but I fell behind in the course afterwards, which was quite frustrating. Students should be able to have at least the same EXTENSION as the LATE EXTENSION (48 hours) if they are provided one. Especially after assignment 6, the assignments tend to get more challenging, and simply require more time. 24 hours is simply NOT enough time, and again, did I mention that certain students had WEEKS to do previous assignments with absolutely no penalty at all? If students have a good reason, and they need a little more time to work on assignments and they ARE TRYING to work on it, then it doesn't make sense to penalize them. What made this really ironic, was the fact that the previous assignment was pushed (without penalty) to Sunday, because of the fact that a large group of students had midterms that week. BUT when I ask, for some reason, and this happened before too, I ALWAYS get the short end of the stick. Wasn't there a year when they did an experiment in CS where students could hand in the assignments whenever they want, before a deadline, and every other week or something? Everyone learns at their own pace and if they can justify a good reason, then they shouldn't be penalized. I can't stress how important this specific point and the next one is (they both tie in together). Which brings me to the (max + min / 2) rule for late extension. It is rare that a student passes most of the tests. Generally they get them all right, or all wrong. If they are all wrong, or if they are one of those students who typically require a little bit longer to do the assignments, then they get 0, and the max they can now get is 50%. There are no release tokens, which WERE provided last year. And even though they took out heap from the course, it really didn't make CS136 that much easier. Release tokens are ALSO provided in upper year courses like CS 246. They make sense. The max/min rule doesn't. Students who are already struggling in the course now get a 2nd chance to get half of what they could've gotten if they had more time. This is plain demoralizing. Either let the students have a bit more time to work on the assignments without the penalty, or bring back release tokens. On another note: the lineups the day before an assignment is due. They will never go away. But, if there are extended office hours at night, or extended office hours starting 2 days before an assignment is due instead of the day before, then this will really benefit a lot of students. The earlier tutorials will help this factor as well. And again, if professors hold more office hours (because they are less paranoid than ISA's), then none of what I suggested above is necessary. BUT they would really have to extend it quite a bit, not just add like an additional hour and feel great about making a change in this course. I mean, really EXTEND and INCREASED frequency.
The length of the midterms and the material within them are generally a point of discussion every term in CS 136. Part 1 is short answer and theory behind C; it makes sense. Part 2 is similar, so it makes sense as well. You can't really practice part 1 nor 2, you would just have to review notes. So that's fine. Part 3, the debugging part, used to be worth only 5 marks because (it's extremely time consuming for the student to look for mistake, track it, and figure out how to fix it;) but for some reason, they made it 7 marks this year. Also this year's was with pointers, which we don't really get to practice with a lot until later on in the course. More practice questions of type 3 is necessary. Part 5 the loop diagram, I think I have spoken enough about it previously. More practice questions, way more, is necessary. Part 6, you guys introduce your first stack question with pointers. For some reason, it is a common tendency to introduce new material on the midterms. I don't understand this, and it's extremely difficult to adapt to. If things are this are going to be put on the midterm, AT LEAST, provide sufficient practice to the students beforehand. It was not the case for problem 6. Problem 7 was review of Scheme plus setbank so it was fine. Problem 8 was kind of challenging, but if you attended the tutorials, you should've been prepared for it. Problem 9, was mentioned was going to be on the midterm. In general, the material introduced in the midterm need more practice questions. It shouldn't be the case that students see it once, and then the next time they're seeing it is on a midterm. This is not the way a course should work. But as of now, it is. The students see it on the assignment, and then next, on the midterm. In many math courses, they spend a long time going over (problems, and different type, so it doesn't feel that awkward for the midterm/final, but here, it does!). Also, introducing new material on the midterm places students in a really awkward position because they're under a time constraint. In Spring 2013, they did the same thing. They had a question where they introduced accessing values from pointer to pointers (essentially double pointers) on the midterm, and it was extremely difficult to adapt to it. Again, if questions like those are going to be given, there should be a volume of questions students should have to prepare from before entering the midterm. They are trying to stop this in other courses as well, because it does NOT make any sense. There are 4 programming questions on the midterm, plus debugging, plus writing theory, and a bit more extra stuff. In an assignment there are 5 questions and you have a week to do them. Even if you argue that they are longer, it doesn't change the fact that the midterm length, is extremely long. Students have definitely (I am confident) put this into question in the post midterm-clicker-question-evaluation sessions, but NOTHING is being done about it. The midterm length seems to be getting longer, if anything. THE MIDTERMS ARE TOO LONG. In conclusion, I apologize for making this review more focused towards CS 136 and less about the way Dave taught the course. I tend to target things that I see need drastic improvement. I care about the program that I am in. I need to graduate and I will graduate, and in doing so, I will have made sure I have learned plenty. When people ask me what's great about your program, right now, I can't really share much other than the fact that it's very challenging. Until this term, I couldn't even say the professors are great in Computer Science. The truth is, I know that we have the resources, just we aren't really using it in the right way. What's harder is that there aren't too many people wanting to bring change in here, and those who do want to, get cast aside pretty quickly. It's extremely tough fighting an entire faculty when you are not in the majority. And if you're in the majority, generally you just want to get this over with and move onto the next thing.
- I love Dave's class.....
- I think it is a good idea that not to teach command line in the beginning.
- I think that the class size is perfect. The atmosphere of the class would be negatively affected if there were more people.
- It was overall a great course with a great instructor.
- it's an ok classroom nothing special about it
- Love the small class size.
- n/a
- N/A
- No
- No
- No comment.
- None
- None.
- None.
- nope
- nope
- NULL
- room's got great lighting - much better than my last term's CS class (in QNC 1502)
- The classroom in RCH got unreasonably cold when the loud fans started working RIGHT AS THE CLASS BEGINS.
- The rows in RCH are way too tight.
- The seats in the room were slightly crammed and it was very difficult to get into semi-spinning chairs.
- Yeah, that was all fine.
This was my first experience at Waterloo with on-line evaluations. Many students (including one obvious example below) were more verbose with their comments. While it was nice to avoid the manual data entry I had done previously, it was never a task I minded much. I was not very happy with the format of the responses I received, which stripped out a lot of their formatting.
Note: one student accidentally entered their MATH 136 evaluation for this course online. The student was unable to change their evaluation, and subsequently emailed me their evaluation and comments. As a result the (corrected) results on this website differ from the "official" results posted elsewhere.