Course Description:
CS 135: Designing Functional Programs
An introduction to the fundamentals of computer science through the application of elementary programming patterns in the functional style of programming. Syntax and semantics of a functional programming language. Tracing via substitution. Design, testing, and documentation. Linear and nonlinear data structures. Recursive data definitions. Abstraction and encapsulation. Generative and structural recursion. Historical context.
Dave's Comments:
Teaching Evaluations:
Number of Respondents: 51 / 94 (54%)
The instructor(s) helped me to understand the course concepts. |
Strongly Disagree | Disagree | Neutral | Agree | Strongly Agree | No Basis for Rating |
| 1 | 1 | 7 | 41 | |
| 2% | 2% | 14% | 82% | |
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 |
1 | | 2 | 10 | 38 | |
2% | | 4% | 20% | 75% | |
The instructor(s) stimulated my interest in this course. |
Strongly Disagree | Disagree | Neutral | Agree | Strongly Agree | No Basis for Rating |
| 1 | 3 | 8 | 39 | |
| 2% | 6% | 16% | 76% | |
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 | | 1 | 15 | 34 | |
2% | | 2% | 29% | 67% | |
The course activities prepared me for the graded work. |
Strongly Disagree | Disagree | Neutral | Agree | Strongly Agree | No Basis for Rating |
1 | | 6 | 12 | 32 | |
2% | | 12% | 24% | 63% | |
The intended learning outcomes were assessed through my graded work. |
Strongly Disagree | Disagree | Neutral | Agree | Strongly Agree | No Basis for Rating |
1 | | 4 | 17 | 29 | |
2% | | 8% | 33% | 57% | |
The course workload demands were... |
Very Low | Low | Average | High | Very High | No Basis for Rating |
1 | 2 | 17 | 17 | 14 | |
2% | 4% | 33% | 33% | 27% | |
The instructor(s) helped me to understand the course concepts. |
- [Strongly Agree] Dave went above and beyond, constantly giving examples not in the slides and actually coding! he made classes so much fun, He was my favourite instructor this term.
- [Strongly Agree] Delivers the concepts in a creative manner, but never distracting
- [Strongly Agree] I liked the extra step that Dave often went, such as high-voice low-voice Dave and the lightsaber prop.
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). |
- [Agree] I would prefer if Dave did not attempt the Italian impression during the natural numbers lecture, but at the same time, I thought it was kinda funny.
- [Strongly Agree] As a Star Wars fan, I feel supported
The instructor(s) stimulated my interest in this course. |
- [Agree] great mix of humour into the lectures to keep me interested. My fav moment was when Dave asked "What do you call a node with no children?" and a second later he said "Who said virgin?"
- [Strongly Agree] Dave Tompkins did the impossible, he made me like Racket.
- [Strongly Agree] Does not shy away from talking connecting what we are learning to more advanced concepts
- [Strongly Agree] Really enjoyed Dave's teaching style; he was both theatric and fun, and made it a deliberately welcome place for everyone to learn.
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 Agree] "... is fair game on an exam" is used to identify learning objectives
- [Strongly Agree] listed on the last few slides of every module
The course activities prepared me for the graded work. |
- [Agree] most homework questions could be completed only using lecture material and the occasional piazza post, without any external research.
The intended learning outcomes were assessed through my graded work. |
- [Agree] midterm questions were fair. I have not seen the final at the time of writing.
The course workload demands were... |
- [Very High] assignment/homework questions are excessively long, repetitive, and grindy. As an analogy, the lecture would teach me how to multiply two numbers, and the assignment would ask me to manually write the entire multiplication table up to 100 by hand. It would have been much better if each assignment had their last question removed or converted into a bonus.
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: |
- Ask for help when needed, and do not stare at a problem for too long at once —— if stuck, leave the problem aside and come back to it later. Miracles happen some times.
- Becoming very comfortable with recursion, and challenging my ability to understand how code is processed.
- Completely understand how recursion work
- computer science basics
- Computing is a complicated branch of learning requiring patience and resilience. So, the more assignments I do, the greater the level of confidence I feel about this subject.
- Everything
- Functional programming
- Functional programming, power of recursion, and the fact they were explained super well and concise, and relatable. Also, love the humour in the lectures!
- How functions can be values in a functional programming language.
- How to approach programming using scalable methods. Ex. Data definition can be used for simple, or difficult problems
- How to code with Dr Racket and recursion.
- how to identify and implement simple, accumulative, and mutual recursion
- How to think about approaching solutions with code.
- how to think in a different way to solve programming problems
- how to think recursively
- I have to catch up in the class and also self study after class to understand the content.
- I learned a lot about binary search trees and recursion. I had some idea about these prior to the course, but the professor helped me build a strong foundation in these two topics.
- Principles Of Recursion
- Recursion
- Recursion
- recursion
- Recursion
- Recursion
- Recursion, basic data structures
- Starting early and ensuring you understanding the content before starting an assignment is crucial.
- The way of logics of how the algorithm works through functional progeamming.
- This course solidified my understanding of recursion.
- tutorials can save your life
- understanding how to go through recursion
- Woohoo, courage and patience are the keys to opening the door to successful
- You can make a multiplication table in Racket.
What helped me to learn in this course was: |
- An amazing teacher
- Assignments, funny, memorable lectures, and in person examples
- Attending and actively listening to lectures. Dave's live coding is super helpful.
- attending lectures and taking notes, doing the homework,
- Dave being cool
- dave thompkins humor
- Dave's dumb/silly/corny jokes and setups for different concepts, they stuck with me very well and helped a lot when working through the assignments
- Dave's engaging lectures and his office hours —— best CS instructor
- Dave's funny performance
- Daves in class examples, Amazing.
- Doing the assignments!!! I take a bit longer to understand content and often can't grasp the concepts as quickly as my classmates when we do iClicker questions during class, so it was helpful to rinse and be forced to apply the knowledge under a longer timeframe.
- Dr. Tompkins and his clones
- Lecture slides and professor's explanation. Piazza's comments and ideas also helped.
- Lectures
- Myself and instructor
- Rich course content knowledge
- Solving on paper before writing code
- Spongebob Movie :)
- the assignments
- the assignments & lectures, as well as experimenting with Racket on my own
- The assignments really helped strengthen my understanding in the topic
- The course modules and my lectures.
- The demonstrations and examples used were very helpful in understanding complex concepts
- The detailed slideshows and the progressive nature of the slideshow, allowing it to be easily followed outside of class
- The great reputation of UWaterloo computing and my strong interest in this subject helped and motivated me to learn in this course.
- The prof was readily available to solve any doubts plus the modules and the examples listed in them were helpful. The tutorials also helped with the assignments a lot.
- the professor
- The slides posted on the website and the homework. Without the homework, I would not be able to practice and understand the contents more deeply.
- The teacher is amazing
- The weekly assignments
What changes, if any, would I suggest for this course? |
- 1) Make the homework less repetitive.
2) I hated iClicker because a lot of times my responses could not be recorded. The site often lagged out and I could not log in or the question would not load on my screen or my answer would not get sent in time. Maybe consider adjusting how the iClicker participation mark is calculated.
- Assignments required too much work
- Bring in a blue lightsaber
- Dave Tompkins is the absolute best prof for this course; if you can take a course with him, take it.
- Give some hint for homework questions if possible and also change the deadline of Friday submission from 8am to the afternoon or evening please. It’s really strange to have a deadline in the early morning and also after the tut on the Friday afternoon, it takes a lot of time to do the Friday submission, so I always have to stay up late to 3am to submit that one.
- Hire more instructors like Dave and provide them with endless steams of coke zero
- i feel like the beginning of the course was rather slow; was very hard to come to class due to lack of interest
- I might be alone on this one but the only problem I have with the course is that closing the light makes me feel sleepy and I can’t focus sometimes, everything would be perfect if the lights stayed on
- I think the course is fine as it is. Maybe one improvement can be adding a little more detail to the slides if necessary.
- I would hope that more case-specific like the case study style of instruction and assignment can be considered going forward.
- If possible, may go a little slower when running through live codes.
- Improve functionality and uptime of MarkUs
- Make the teacher stricter on time waster. There were a couple people in my class that would always just say random things to show how much they knew and my prof would stop it sometimes but often would encourage it. It really took away from my learning and would make me dislike coming into that class. Some people need to be told that they can talk about unrelated stuff not during class time.
- More emphasis on what makes Functional programming functional programming. Ex. We shouldn't even use struct, just focus on learning how to store values in functions, etc.
- More examples in lecture slides to help with assignments
- MORE HOMEWORK
- more practice problems
- More Racket-oriented teaching versus slideshows
- N/A
- no change
- No changes
- None
- None, good course
- None.
- not having the friday check expect thing be a deadline
- Perfect
- Please make some of the assignment questions less wordy. The question specific terminology would be weird and clunky for no reason.
- Stop doing iclicker questions which are useless. We need sometime to understand the terminologies and will not be able to understand them immediately in class.
- The difficulty of assignments ramped up significantly and extremely sharply after midterms. This made it incredibly difficult to keep up; I know that many (maybe even most) students were able to, but it was very much exhausting and likely could have been a smoother transition into higher order functions.
- Use Rust instead of Racket