CS 138Introduction to Data Abstraction and Implementation
- 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, 2 lecture sections. Spring 2027: schedule not out yet.
Software abstractions via elementary data structures and their implementation; encapsulation and modularity; class and interface definitions; object instantiation; recursion; elementary abstract data types, including sequences, stacks, queues, and trees; implementation using linked structures and arrays; vectors and strings; memory models; automatic vs. dynamic memory management.
Prerequisites
- Must have completed the following:
- CS137 - Programming Principles (0.50)
Antirequisites
None listed.
Leads to
Winter 2027 sections
| Section | Class | Enrolled | Meets |
|---|---|---|---|
| LEC 001 | 5752 | 0 / 147 | TTh 10:00–11:20 TTh 10:00–11:20 Jan 18 15:30–16:20 Feb 1 15:30–16:20 Mar 15 15:30–16:20 |
| LEC 701 | 2176 | 124 / 9999 | Online or by arrangement |
| TUT 101 | 5753 | 0 / 73 | F 11:30–12:20 F 11:30–12:20 |
| TUT 102 | 6184 | 0 / 74 | F 12:30–13:20 F 12:30–13:20 |
| TST 201 | 6256 | 0 / 147 | Feb 25 10:30–12:20 |
Resources
Around the web
Found by uwloo’s link finder, which checks that each page names CS 138.
- CS138 - Home Course website · student.cs.uwaterloo.ca Remove
- CS 138 | SCS Course website · cs.uwaterloo.ca · from Michael Godfrey’s site Remove
- Remove
Course notes, 2 pages github.com · by batteryspecial on GitHub
- C++ Shell Other · cpp.sh · from UWaterloo Links (SE) Remove
- CS 138 - Functional Programming and Data Abstraction Other · web.archive.org · posted on r/uwaterloo Jun 2016 Remove
Reviewed on UW Flow
89% liked it85% easy93% useful
From 302 ratings and 57 comments on UW Flow. The most helpful comments, quoted as written, without names. Read them all on UW Flow.
The course is somewhat useful and a good intro to C++ and Unix. I tried my best to listen to lectures but often ended up doing something else because much of the early content (e.g., heap and stack) was already covered in CS137. However, the later parts (trees, Unix, OOP, inheritance, friendship) were kind of new. Also pay attention to code design. I lost many marks on the exam because of this (e.g., preferring null == variable over variable == null). Assignment instructions are ambiguous and too lengthy. I wish they shortened the instructions and provided test cases and expected results like in CS137.
Apr 2026 · didn’t like it · 1 found this helpfulOn UW FlowRemove this
I found the data structures content a little dry and repetitive but the OOP content pretty interesting for someone with no prior C++ experience. Assignments were prepared well, involved interesting topics, and were great exposure to real test-driven development (tests using gtest and gcov were a marked portion of each assignment). The course also covers some Unix topics (file systems and permissions, shells and common commands); this constituted 16 out of 90 marks on the midterm exam.
Apr 2025 · liked it · 1 found this helpfulOn UW FlowRemove this
don't really like the slides
Jul 2024 · didn’t like it · 1 found this helpfulOn UW FlowRemove this
As long as you don't leave assignments until the last minute, they really aren't that bad. The content is super important and interesting, although sometimes the lectures are a bit hard to follow.
The exams aren't the most fair, but definitely doable. Just make sure you listen to the prof and pay attention to EVERY DETAIL in the slides bc he will ask you about it.Jun 2026 · liked itOn UW FlowRemove this
This course had amazing assignments. They were interesting, fun, useful, and were much better in length than the cs 137 assignments. Having two weeks to do each assignment and a focus on testing made them feel easier than cs 137. However, the exams for this course were harder than cs 137, as a lot more definition-type knowledge was required and questions were ambiguous. It was normal for a student's mark to increase 10% after a midterm regrade.
May 2024 · liked itOn UW FlowRemove this
Discussed on r/uwaterloo
65 posts and comments in 53 threads mention CS 138, May 2012 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
CS 246: 85+ Doable 2 points, 5 comments
u/Professional-Sun4686: “Basically what the title says? Is an 85+ doable if I transferred from software eng (took cs 138 which has the same slides as cs246 in the beginning and finished the course with a 93)”
Spring 2024
Computer Science vs Software engineering 5 points, 7 comments
“Apart from the cohort system, what benefits does SE provide over comp sci? got accepted into both and I cant choose between the two”
u/KINGBLUE2739046: “CS137 and CS138 (SE Intro CS courses) are way better than CS135 and CS136. SE101 also neat. Also you can drop into CS after first year. …”
Fall 2023
W24 CS 138 1 point, 2 comments
u/prisonmike_dementor: “Which prof is teaching CS 138 next term?”
Chances of getting into SE (realistically) 1 point, 16 comments
u/KINGBLUE2739046: “Ok well you’re not getting in with zero coding experience. They require you to be decent at coding. Reason being that you’ll be destroyed from head to toe by CS137 and CS138 if you’re coming in raw.”
Winter 2023
Waterloo Software Engineering 13 points, 12 comments
“So I got into waterloo se today. I honestly think I'm underqualified (when it comes to coding experience). …”
u/SerMacster: “Your first two terms will only have CS137 and CS138 from the programming courses. They don't expect you to have experience, but I guess some familiarity would help. Theses courses cover C/C++. …”
Spring 2022
Tyrone Ghaswala or Jennifer Nelson? 2 points, 4 comments
“I heard that they are both great profs, but if you happen to have taken classes with both Ghaswala and J. Nelson, which one did you like the most? Which would you recommend for MATH 135? …”
u/cool_cucumber01: “… I had her for CS137/CS138 if im not wrong. …”
Are you taught programming in Software Eng? 0 points, 6 comments
u/CaramelIceCoffee: “Hey I’m a incoming student of Software Engineering. I have CS137, SE101 & CS138 before my first coop. Do I need to self study more about programming or they teach me enough programming skills before coop? Thanks”
u/UnboxTheCat: “… as for the coop, C/C++ content you learnd from CS137 and CS138 would be really limited, and therefore pretty useless. …”
Winter 2022
software engineering with no programming experience 88 points, 56 comments
“Hey everyone, I recently got accepted to Software Engineering at Waterloo. I'm concerned about whether or not studying SE would be excessively difficult since I have little to no experience with …”
u/TechnicalSpread7368: “… CS 137 and 138 are probably the easiest courses in first year (maybe except Calculus?). Although it takes a while to get used to the university learning pace, you will struggle a lot more with engineering and physics courses. …”
Fall 2021
[deleted by user] 33 points, 14 comments
u/tendstofortytwo: “Yes, and yes.”
u/ffrosteh: “… Software Development Course Description CS 137 Programming Principles Course Description CS 138 Introduction to Data Abstraction and Implementation CS 145 Design, Abstraction and Implementation CS 146 Elementary Algorithm Design and Data Abstraction (advanced version) CS 200 …”
Spring 2021
I need help as a first-year SE student. 4 points, 15 comments
“I will be attending Software Engineering in this fall. Before that, I want to spend some time on coding this summer to get myself prepared. …”
u/BessysTestes: “… CS137/138 also violently beats the C/C++ into you”
Fall 2020
First coop job without any coding experience 25 points, 12 comments
“Ok I know this may sound like I'm a bad student, but I'm sure there are people out there that are in the same boat as me. …”
u/DepressedECEKid: “… Try applying for a TA (the coop position is actually called Instructional Support Assistant (ISA)) position for a cs course like cs 135, 136, 138, 106. …”
Winter 2020
CS 246 vs CS 247 4 points, 7 comments
“what are the differences?”
u/sexxiAndIKnowIt: “… Since SE students have taken a C++ course (CS138) before, 247 barely touched on inheritance and writing C++ whiereas you learn C++ from scratch in 246. …”
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