CMPUT 201: Practical Programming Methodology¶
At a glance
- Units: 3
- Prerequisites: CMPUT 175.
- Credit exclusions: Credit cannot be obtained for both CMPUT 201 and CMPUT 275.
- Offered: Now: Fall 2026; Scheduled: Winter 2027
- Difficulty: Hard-Brutal
- Workload: Heavy
- Languages and tools: C, gcc, gdb, valgrind, Make, Git
- Textbook: C Programming: A Modern Approach, 2nd ed. (K. N. King)
Introduction to the principles, methods, tools, and practices of the professional programmer. The lectures focus on the fundamental principles of software engineering based on abstract data types and their implementations. The laboratories offer an intensive apprenticeship to the aspiring software developer. Students use C and software development tools of the Unix environment.
Official catalogue entry ยท facts synced 2026-10-01
What Students Say¶
Imported from the original course reviews page, which mixed student contributions with summarized Reddit discussion. Tips aren't term-stamped yet; if you've taken this course recently, add your experience.
The rite of passage for any UofA programmer, no matter the experience. The course focuses on C99: a walkthrough of basic syntax before delving into pointers, memory management, structs and unions, the preprocessor, implementing abstract data structures, bitwise operators and bitfields in C. 201 covers a lot more C than 275.
Alongside learning C, this will be your first encounter with GitHub. You will learn how to do Git operations individually: cloning, adding/pushing, (and if the TAs update the lab) resolving merge conflicts. You also learn debugging with gdb, and programming in vim, though most students debug with printf and use Remote SSH to connect to the lab machines.
The TAs (who design nearly every lab) and the professors will not hold back. Labs and in-class coding exercises (ICCs) will require knowledge about algorithms and data structures from 175, complementing 272 and 204 as well. You need to know linked lists and sorting algorithms. Despite the low averages and the soul-crushing assignments, you will become a more resilient programmer.
Instructor notes: - Henry Tang: thorough notes and clear lectures. Same difficulty as other sections, with a less lenient curve than Dr. Lin's. - Guohui Lin: equally knowledgeable; don't judge the section by online ratings. His notes work best as a supplement after reading the textbook, though you can do well from the notes alone. Has had a lenient curve.
Student tips: - Get the textbook: C Programming: A Modern Approach (2nd ed.) by K. N. King (the assigned text on the Fall 2025 course page). It will teach you almost everything about C's syntax and some ADT implementations. - Labs: start them early. ChatGPT will not save you, especially in the later labs. Make sure you get as much help as you can from the TAs. - Code on the lab machines and use proper compilation flags. In the later labs, write your makefiles and check with valgrind to get the best grade. - Weekly quizzes: keep up with them; they're the easiest part of the course! - ICCs: do the "Programming Projects" from the textbook for the earlier ICCs, then try LeetCode for the later ICCs, especially for linked lists and low-level ICCs.
Pairs well with: 204 (sorts and some ADTs have a good cross-over). Don't pair with: Any other course with a heavy workload; you will have to make sacrifices.