CS 146Elementary Algorithm Design and Data Abstraction (Advanced Level)
- Units
- 0.50
- Faculty
- Mathematics
- Subject
- Computer Science
When it runs
- F24
- W25
- S25
- F25
- W26
- S26
- F26
- W27
- S27
Ran in 2 of the last 7 terms. Winter 2027: scheduled, 3 lecture sections. Spring 2027: schedule not out yet.
CS 146 is an advanced-level version of CS 136.
Prerequisites
- Earned a minimum grade of 75% in each of the following:
- CS145 - Designing Functional Programs (Advanced Level) (0.50)
Corequisites
- Completed or concurrently enrolled in:
- CS136L - Tools and Techniques for Software Development (0.25)
Antirequisites
Leads to
Winter 2027 sections
| Section | Class | Enrolled | Meets |
|---|---|---|---|
| LEC 001 | 5816 | 0 / 100 | TTh 14:30–15:50 |
| LEC 002 | 6023 | 0 / 100 | TTh 16:00–17:20 |
| LEC 701 | 2286 | 135 / 9999 | Online or by arrangement |
| TUT 101 | 5835 | 0 / 100 | W 11:30–12:20 |
| TUT 102 | 6024 | 0 / 100 | W 13:30–14:20 |
| TST 201 | 5818 | 0 / 200 | Mar 8 19:00–20:50 |
Resources
Around the web
Found by uwloo’s link finder, which checks that each page names CS 146.
- CS 146: Home Course website · student.cs.uwaterloo.ca Remove
Reviewed on UW Flow
91% liked it43% easy89% useful
From 199 ratings and 59 comments on UW Flow. The most helpful comments, quoted as written, without names. Read them all on UW Flow.
My thoughts on the course play on both sides of the good and bad spectrum. Keep in mind, my perspective is subjective, and I'm not a CCO or extremely gifted at coding, I'm a pretty average CS student. (WARNING: this review will be long as I want to give an honest and clear overview of the course)
The course split is about 70/30 Racket and C, but BE WARNED, the Racket part is not what you may expect it to be (which is what happened to me).
C:
The C part of the course pretty much teaches everything that is taught in CS136, with the addition of some interesting facts here and there, and more enjoyable assignments. Some of them will have you working on them for hours at a time, but I…Apr 2023 · liked it · 6 found this helpfulOn UW FlowRemove this
Praise Haskell Curry
Mar 2016 · 3 found this helpfulOn UW FlowRemove this
===TL;DR: If you came from CS 135 and are thinking of upgrading, know that it'll be a big and hard commitment, but IT WILL WORTH YOUR TIME!!!===
I came from CS 135, which in terms of difficulty was a BIG jump. I'm not particularly bright and smart myself compared to the CS geniuses here, and I often have somewhat of an impostor syndrome, being surrounded by so many people that are obviously way smarter than me - I couldn't understand a concept during lectures, and there will be students asking Brad questions already, and of course I couldn't even understand what they were asking lol...
Buuut I have to say, the contents are very very useful and fun, although I need to spend extra time…Apr 2025 · liked it · 2 found this helpfulOn UW FlowRemove this
CS 146 is a challenging course, and truly grasping its content is no small feat if you haven't encountered the material before. Instead of assignments, you are given 25 "Assignment Questions" of vastly varying difficulty. The course begins relatively ~~SIMPL~~ simple and adjacent to 136 assignment (but not lecture) wise, but then deviates dramatically to compiler/interpreter creation, advanced memory management in C and fantasy languages. Due to the extra content, mandatory weekly tutorials that served as extra lectures were added, effectively giving the course 4+ hours of lecture per week. If you put the time and effort in, you will come out with a much better understanding of low-level…
Apr 2023 · liked it · 2 found this helpfulOn UW FlowRemove this
The course in my opinion was all over the place. It covered C memory management and writing interpreters and compilers for racket and a few made up languages. I wish they clarified this in the course description since this has nothing to do with what I want to go into, and in my opinion is fairly impractical unless you go into security research or research into formal languages. I also hate how the profs keep writing code on paper, since there were many typos in the code. The ending was also fairly all over the place since it covered many different unrelated topics at a very shallow level, such as garbage collection, continuations, trampolining, Hoare logic etc. Also, a lot of the concepts…
Apr 2022 · didn’t like it · 2 found this helpfulOn UW FlowRemove this
Discussed on r/uwaterloo
341 posts and comments in 265 threads mention CS 146, April 2011 to December 2024. Quoted word for word, newest first; each reply sits under the post and the comment that started its branch. Search r/uwaterloo for newer posts.
Fall 2024
How cooked am I next term 33 points, 27 comments
“https://preview.redd.it/sja2uyioa4ae1.png?width=652&format=png&auto=webp&s=da6f9cb5427cd275561128caa48f6851333be88b I am probably going to regret this. Is this too big of a course load?”
u/shitfartpissballs: “148 is absolutely fucked”
u/Outside_Buddy6449: “… Also, if you're into CS, you should take CS 146, it's a lot of fun and imo a lot better than CS 145. MATH 146 is usually okay but I heard Spiro can be hard if you have him. …”
u/MapleKerman: “I know a guy who's doing this next term except CS 146 instead of 136 and ENGL 101B instead of PHYS 175. He had a 95 this term. You'll be fine.”
compsci program 1 point, 16 comments
“could anyone tell me what sets apart waterloo's comp sci program from other comp sci programs in other universities? would be greatly appreciated :)”
u/Opening_Kiwi6441: “as far as the actual academics go, i’d say it’s on par with most other unis, like UofT, UBC, McGill, Mac, etc. …”
u/ApocalypseCalculator: “this isn’t the greatest example, but in CS146, we did compilers, which for reference is something covered in the latter half of second year for UofT CS. …”
u/mreifslp: “… For CS 146, the first half covers imperative programming in C, which is pretty typical, covering basics of C, pointers, arrays, strings, and so on. We also covered Haskell and building an interpreter in it (talking about things like environments and closures). …”
CS 146 after cs 135? 3 points, 1 comment
u/monkerpopo: “Does anyone have experience with taking cs 146 after cs 135? Are there any major knowledge gaps that I should review since I didn’t take CS 145?”
Should I drop to CS146 1B 1 point, 7 comments
u/Master-Personality26: “I really like working on personal projects, so I want to ask if CS136 will take less time for me to complete and get similar marks to CS146. I am in CS145 right now, and I think it's fine (I got \85 on midterm). Assignments for CS145 normally take around 2 to 3 hours. Thanks!”
CS 1B courses 1 point, 3 comments
u/anonim0791: “How doable (with good grades) would be CS 2B: || || |CS 136L, CS 146, MATH 146, MATH 148, STAT 230, ECON 201?| | |”
u/amongus44: “I didn't do math 14 but ik the cs146 + math146 + math148 combo is not uncommon, you'll have plenty of people going through the exact same thing I think if you're taking all 14X and you feel somewhat confident if you took 14X this term you'll find stat230 pretty easy Econ201 also …”
What courses to choose for 1B CS?? 2 points, 8 comments
u/Physical_Scholar_325: “… I am aware of the 3 courses we are required to choose CS136/146 Math136/146 Math138/148 What are the other two courses? Also I think I need to choose CS136L which is only 0.25 credits so how does it work? …”
Spring 2024
Is it possible to take CS 241E during co-op? 5 points, 5 comments
“My coop term is in the fall, and my coop is hybrid in Toronto, so I can only attend one lecture per week in person (rather than both), and I cannot attend the tutorial. …”
u/TheAllAwesome: “I remember the notes were really good and you could learn purely off of that. (Source: skipped every class and did fine)”
u/Time_Technology_1938: “Thanks. How about skipping tutorials, would they provide notes for this too? Since I remember CS146's tutorial covered some stuff that not in lectures”
CS135 vs CS145 1 point, 3 comments
“What are the main differences between the classes. Is CS145 more theoretical and is it worth taking”
u/Upset-Feeling4109: “I took both CS145 and CS146 this past year, and I think 145 was alright but 146 was not worth it. Both have significantly harder material than CS135 and CS136, and it takes up much more time when time is precious for preparing and applying for co-ops. …”
Possible to get a 90+% in CS145 with no prior experience? 4 points, 13 comments
u/Different_Guess7202: “There is not much of a curve in CS 145 (At least when Cormack taught it). But I still think you should take it, cs 145 is a very nice course and will change the way you look at programming, I did …”
u/mreifslp: “… Overall though, CS 145 is 100% worth taking, CS 146 as well. …”
Rank the courses you've taken from hardest to easiest 20 points, 43 comments
“I'm curious”
u/Different_Guess7202: “CO 471 >>>>>>> CS 146 > CO 255 > CO 442 > CS246E > STAT 241 > CS 145 > MATH 148 > CO 463 > MATH 247 > STAT 240 > CS 240E > MATH 245 > MATH 145 > MATH 146 > PMATH 351 > MATH 147 > MATH 249”
cs126 1 point, 18 comments
u/CSplays: “Don't go into math with the hope to transfer. If you want to study CS, you should consider another university. If you do not care, then go for it. Also you need a high avg overall (good math course grades and stellar CS 136 or CS 146 performance).”
Is CS 241E doable over co-op remotely? 8 points, 6 comments
u/Pretend_Photograph97: “… I have taken CS 145/146 and scored 95+”
Check it elsewhere for Fall 2026
- Undergraduate Calendar, 2026–27The official entry
- Requirements for Fall 2026Waterloo’s requisite checker
- Schedule of Classes, Fall 2026Instructors, rooms, live seats
- Quest Class SearchWhere you enrol
- Course outlinesSyllabi from past terms (UW login)
- UW FlowStudent ratings and reviews
- WClassesPast sections back to 2004, and who taught them