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:

  1. 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.
  2. 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.
  3. 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.

 

  Last modified: September 09 2025 18:03:07  © Guohui Lin