|
CMPUT 201: Practical Programming Methodology (Fall 2025, all sections)
Course syllabus (PDF, downloadable)
CMPUT 201 Practical Programming Methodology: (University Calendar Description)
☆3 (fi 6) (either term, 3-0-3).
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.
Prerequisite: CMPUT 175.
Course Objectives: (Contents overlapping with CMPUT 272, 204, 229)
- Understand the design theory of standard C (99): key programming concepts and their compatibilities;
- Be able to handle any intermediate programming problem by using standard C in Linux;
- Have the skills to combine your knowledge of program design and data structures (174/175),
with useful algorithms and mathematics (272/204/304) and application-specific knowledge (291/379) to design and implement non-trivial software.
Student Responsibilities:
- The course challenging level is median to high;
- the course workload is heavy;
- read Frequently Asked Questions (FAQs);
- attend your lectures, labs, office hours, and check discussion forum (Q&A through emails unlikely due to 600+ students);
* In-class lectures could differ slightly across sections, in terms of progress, emphasis and demo programs;
- use your UofA email address for communications!
- textbook reading (plus some lecture notes);
- work independently on course works;
* Using generative AI tools to generate solutions does not mean you understand them!
- prepare well for quizzes, in-class coding, and exams;
- your feedbacks are very welcome! (Adjustments could be implemented inside the term.)
General Policies:
Time |
Monday |
Tuesday |
Wednesday |
Thursday |
Friday |
8:00am |
|
|
lab machine maintenance |
Lab D05/UCOMM 2-086 () |
|
9:00am |
Lecture A1/ETLC E1-001 |
Lecture A1 |
Lecture A1 |
10:00am |
|
lab machine maintenance |
|
11:00am |
Lecture A2/ED 2-115 |
In-person and Online Office Hours UCOMM 4-450/6-192 |
Lecture A2 |
In-person and Online Office Hours UCOMM 4-450/6-256 |
Lecture A2 |
12:00pm |
Lecture A3/ETLC E1-013 |
Lecture A3 |
Lecture A3 |
1:00pm |
TA meeting |
|
|
2:00pm |
Lab D01/UCOMM 2-086 (Jacky) |
Lab D02/NRE 2-001 (Grace, Harveer) |
Lab D04/NRE 2-001 (Jonathan, Laith) |
Lab D06/UCOMM 2-086 (Duong) |
Lab D08/NRE 1-001 (Abbas, Nathan) |
3:00pm |
4:00pm |
5:00pm |
|
Lab D03/NRE 1-001 (Saumya, Yingnan) |
|
Lab D07/NRE 1-001 (Xinmeng) |
|
6:00pm |
|
|
|
7:00pm |
|
|
|
Office hours:
- Regular work hours are 9am-5pm (despite early morning and late evening labs);
- your queries might not be answered immediately, and so start your work early;
- Instructors might join labs to help questions;
- In-person/online office hours (see above time table for places): Tuesday/Thursday 11am-1:30pm.
| Office
| CCID
|
Guohui Lin (A1/A2 instructor)
| UComm 6-194
| guohui
|
Henry Tang (A3 instructor)
| UComm 6-256
| hktang
|
| | |
Yanze Song (GTA) | | songy9
|
Abbas Ali Rizvi | | aarizvi2
|
Bernabe Kondrak | | bkondrak
|
David Pham | | nqpham
|
Ethan Masuda | | emasuda
|
Grace Zhang | | gz4
|
Harveer Singh Sarao | | harveers
|
Ishaan Meena | | imeena
|
Jacky La | | jacky5
|
Jonathan Bonham | | jbonham
|
Laith Weshah | | lweshah
|
Manh Duong Hoang | | dmhoang
|
Minh Nhat (Nathan) Bui | | minhnha3
|
Naima Ulusow | | ulusow
|
Pragya Das | | pragya4
|
Samuel Anderson | | sja1
|
Saumya Patel | | snp2
|
Tegen Blaze Hilker Readman | | hilkerre
|
Tomas Ordonez Gonzalez | | ordonezg
|
Vaibhav Jain | | vjain3
|
Willy Zuo | | zuo5
|
Xinmeng Zheng | | xinmeng6
|
Yingnan Ma | | ma4
|
Yuyang Wang | | yuyang31
|
Recording/Photo-taking of teaching is permitted only with the prior written consent of the instructor or if recording is part of an approved accommodation plan.
Required Textbook:
K. N. King. C Programming: A Modern Approach. 2nd edition, W. W. Norton & Company, 2008.
Recommended Readings:
T. H. Cormen, C. E. Leiserson, R. L. Rivest, and C. Stein (2009). "Introduction to Algorithms (Third Edition)". The MIT Press.
Weekly Schedule (sign in Canvas for
announcements, course discussion, quizzes, lab exercises, sample exams, etc.):
Week |
Date |
Lecture Topics |
1
| Sep 3,5
| Course overview
Linux commands: ls, man, mkdir, rm, cd, w, ps, top, kill, cp, chmod, etc.
input/output redirection, file over-write
Ch 1: Introducing C
Ch 2: (getting started) C Fundamentals
vim, keyboard commands ("gcc -Wall -Werror [-Wextra] -std=c99 source.c -o executable")
GitHub (version control, lab exercise submissions)
VSCode, ssh, scp (always backup your files)
|
2
| Sep 8,10,12
| Lab #1 (needed for the other labs, due Sep 14)
In-class coding #1 Friday
Ch 3: Formatted Input/Output
Ch 4: Expressions
Ch 8.1: One-Dimensional Arrays
Check the return value of your program ("echo $?")
Using gdb/gcc for debugging ("gcc -ggdb -std=c99 source.c -o executable")
|
3
| Sep 15,17,19
| Quiz #1
Lab #2 (due Sep 21)
In-class coding #2 Friday
Ch 5: Selection Statements
Ch 6: Loops
Refresh: bubble-sort, insertion-sort (these subjects are "programming materials")
Refresh: binary search; greatest common divisor (GCD)
|
4
| Sep 22,24,26
| Quiz #2
Lab #3 (due Sep 28)
In-class coding #3 Friday
Ch 7: Basic Types
Ch 8: Arrays
|
5
| Sep 29, Oct 1,3
| Quiz #3
Lab #4 (due Oct 5)
In-class coding #4 Friday
Ch 9: Functions
Ch 10: Program Organization
Refresh: merge-sort, quick-sort
|
6
| Oct 6,8,10
| Lab #5 + bonus part/#6 (due Oct 19)
Review; Quizzes #1-#3, in-class coding #1-#4 solutions
Midterm exam #1 in class on Wednesday/8th (closed book, a letter-size paper with handwritten notes on one side allowed)
Ch 11: Pointers
Using valgrind for error checking ("gcc -g -Og" and "valgrind executable")
|
7
| Oct 13,15,17
| Quiz #4
Ch 17: Advanced Uses of Pointers (dynamic allocation)
Ch 12: Pointers and Arrays
Using valgrind for error checking ("gcc -g -Og" and "valgrind executable")
|
8
| Oct 20,22,24
| Quiz #5
Lab #7 (due Oct 26)
In-class coding #5 Friday
Using gdb/gcc for debugging ("gcc -ggdb -std=c99 source.c -o executable")
Ch 13: Strings
Ch 17: Advanced Uses of Pointers
|
9
| Oct 27,29,31
| Quiz #6
Lab #8 (due Nov 2)
In-class coding #6 Friday
Ch 14: The Preprocessor ("gcc -E -std=c99 source.c -o expanded_source.c",
"gcc -DDEBUG -std=c99 source.c -o debugging_version",
"gcc -DNUM=25 -std=c99 source.c -o debugging_version")
"gcc -lm (for linking math.h library functions)
Ch 15: Writing Large Programs
Makefile basics ("to generate source.o: gcc -Wall -Werror -std=c99 -c source.c")
Ch 16: Structures, Unions and Enumerations
|
10
| Nov 3,5,7
| Lab #9 + bonus part/#10 (due Nov 16)
Ch 16: Structures and pointers
Midterm exam #2 in class on Wednesday/5th (closed book, a letter-size paper with handwritten notes on one side allowed)
Ch 17: Advanced Uses of Pointers (function pointers)
Using gdb/gcc for debugging ("gcc -ggdb -std=c99 source.c -o executable")
|
11
| Nov (10,12,14)
| Reading week: no classes
|
12
| Nov 17,19,21
| Quiz #7
Lab #11 (due Nov 23)
In-class coding #7 Friday
Ch 20: Low-Level Programming
Ch 22: Input/Output (FILE pointers)
Makefile
|
13
| Nov 24,26,28
| Quiz #8
Lab #12 (due Nov 30)
In-class coding #8 Friday
time your program (runtime statistics), shell script, running background
Ch 18: Declarations
|
14
| Dec 1,3,5
| Withdrawal by 2nd
Quiz #9
Lab #13 (due Dec 7)
In-class coding #9 Friday
Ch 19: Program Design (multiple versions and bridging to C++)
15 minutes class time for SPOT survey
|
15
| Dec 8
| Final review
Final exam sample questions and reminders
|
| Dec 15,16,17
| A1 Final exam (30%): Dec 15, 8:30-10:30am, Main Gym rows 15,17,19,21
A2 Final exam (30%): Dec 16, 8:30-10:30am, Main Gym rows 2,4,6,8,10
A3 Final exam (30%): Dec 17, 1:00-3:00pm, Main Gym rows 16,18,20,22,24
(closed book, a letter-size paper with handwritten notes on both sides allowed)
***WARNING: Students must verify this date on BearTracks when the Final Exam Schedule is posted.
The final exam planner is found on the Registrar's website:
https://www.ualberta.ca/registrar/examinations/exam-schedules/
|
| Jan 12
| Deferred final exam (Monday, starting at 11:00am)
|
Grading Scheme:
- Mark distribution (110 marks possible; course work w/dues):
- 18%
13 lab exercises, 6 marked and 2 bonus (3% each; 5 basic, 4 intermediate w/1 bonus Thanksgiving, 4 advanced w/1 bonus Readingweek)
- 18%
9 in-class coding (2% each, 20-minute, due at the end of the respective Friday lectures)
- 18%
9 quizzes (2% each, a single 15-minute try inside time window Thursday 00:01am - Friday 11:59pm; no replacement quiz)
- 20%
2 midterm exams (10% each, 45-50 minutes class time on Wednesdays Oct 8, 2025 and Nov 5, 2025, respectively)
- 30%
1 Final exam (2 hours on scheduled dates)
Midterm and Final exams are closed book, only a letter-size paper with your handwritten notes allowed.
- Course work policies:
- Submissions will NOT be accepted after the corresponding due time, for all quizzes, in-class coding, and lab exercises:
- all quizzes are done in Canvas;
- all in-class coding are done in the last 20 minutes of the lectures, submitted to Canvas;
- all lab exercises are submitted to your GitHub.
- Lab demo:
- for each lab exercise, 50% students will be randomly selected to demo their submissions and marked, after the due time;
- allow at least 7 days for TAs to finalize the marking;
- demo should be done within 7 days (but before the final exams), mostly during labs but could be arranged with your TAs;
- refusing to demo zeros the lab marks.
- Excused Absence (EA):
- requests should be made to the instructor; if granted, all associated marks are moved to the final exam;
- an acceptable excuse exists, and requested within reasonable time frame (not too early or too late);
- for a missed final exam, the student must apply to their faculty (not the instructor)
for permission to write the deferred exam on Jan 12, 2026 (Monday, 11:00am).
- Collaboration by consultation model:
- you are encouraged to discuss the course work, lab exercises in particular, each other;
- if you wish, you may search for existing solutions out there!
- But you must write your solutions independently.
Do not copy/mimic code from your fellow classmates; neither let the others copy/mimic your code! Both are plagiarism.
For all submitted C programs, you must use comment lines (at the top) to claim that you write the codes yourself,
or whichever resources (other than the provided course materials -- textbook, lecture notes, demo programs) you use.
- Re-evaluation:
requests should be made to the marker(s) within 7 days of the marking (re-marking could reduce your mark);
after that time, marks cannot be changed.
- Final grades are based on our interpretation of grading system defined in
Academic Regulations.
• The class is not curved --- no pre-set failing percentage or pre-set class average.
• We strive to assign each student a grade they deserve.
• The following **mark (not percentage)** cutoffs will be respected:
- 90+ → A+ (Excellent) --- guaranteed (in A1/A2);
- 80+ → A, A- (Excellent);
- 70+ → B+, B, B- (Good);
- 60+ → C+, C, C- (Satisfactory);
- 50+ → D+, D (Minimal Pass) --- "<50 marks" is an F (in A1/A2).
Disclaimer: This Course Outline is released and becomes final on September 2, 2025.
Any typographical errors herein are subject to change and will be dated and announced in class.
| |