CMPUT 201: Practical Programming Methodology (Fall 2024, 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: (Preferred to have knowledge of, or co-taking, CMPUT 229, 272 and/or 204)

  • 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 under 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;
  • Be prepared to go from procedural (standard C) to object-oriented (C++, Java, etc.).

Student Responsibilities:

Time
Monday
Tuesday
Wednesday
Thursday
Friday
8:00am
 
 
lab machine maintenance
Lab D05/159
(TA)
 
9:00am
Lecture A1/1007
Lecture A1
Lecture A1
10:00am
 
 
lab machine maintenance
 
11:00am
Lecture A2/1017
In-person and
Online Office Hours
Lecture A2
In-person and
Online Office Hours
Lecture A2
12:00pm
Lecture A3/L1160
Lecture A3
Lecture A3
1:00pm
Lecture A4/1-140
Lecture A4
Lecture A4
2:00pm
Lab D01/159
(TA)
Lab D02/2-001
(TAs)
Lab D04/2-001
(TAs)
Lab D06/159
(TA)
Lab D08/1-001
(TAs)
3:00pm
4:00pm
5:00pm
 
Lab D03/1-001
(TAs)
 
Lab D07/1-001
(TAs)
 
6:00pm
 
 
 
7:00pm
 
 
 

Office hours:

  • Our work hours are 9am-5pm (except early morning and late evening labs);
  • your queries might not be answered immediately, and so start your work early;
  • Instructors try to join labs, as often as possible, to help TAs with Q&As (the first 30 minutes in particular);
  • In-person/online office hours (see above time table): Tuesday/Thursday 11am-1:45pm.

 
Office
CCID
Guohui Lin ( instructor)
ATH 353
guohui
Henry Tang ( instructor)
ATH xxx
hktang
 
Tomas Ordonez Gonzalez
Ilya Nalivaiko
Kelly Shih
Ashwin Shreekumar
Arman Tiwana
Ellis McDougald
Sumayya Taher
Ahmed Keshta
Harrison Peebles
Tauseef Nafee Fattah
Brayden Tober
Kush Padalia
Andy Tran
Harveer Singh Sarao
Yanze Song
 

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 / References: T. H. Cormen, C. E. Leiserson, R. L. Rivest, and C. Stein (2009). "Introduction to Algorithms (Third Edition)". The MIT Press.

Lecture & Lab Schedule (sign in eClass for announcements, course discussion, quizzes, lab exercises and assignment, sample exams, etc.):

Week Date Lecture Topics
1 Sep 4,6 Course overview
Ch 1: Introducing C
Ch 2: (getting started) C Fundamentals
Linux, vim/emacs, keyboard commands ("gcc -Wall [-Werror] -std=c99 source.c -o executable")
GitHub (version control, lab exercise submissions)
VSCode, ssh, scp (always backup your files)
2 Sep 9,11,13 Lab #1 (no mark, needed for the other labs)
Ch 3: Formatted Input/Output
Ch 4: Expressions
Ch 5: Selection Statements
Ch 8.1: One-Dimensional Arrays
Using gdb/gcc for debugging ("gcc -ggdb -std=c99 source.c -o executable")
3 Sep 16,18,20 Quiz #1 Lab #2 (due Sep 22)
Ch 6: Loops
Ch 7: Basic Types
Ch 8: Arrays
Refresh: bubble-sort, insertion-sort (these subjects are "programming materials")
Refresh: binary search; greatest common divisor (GCD)
4 Sep 23,25,27 Quiz #2 Lab #3 (due Sep 29)
Ch 9: Functions
Ch 10: Program Organization
Refresh: merge-sort, quick-sort
Check the return value of your program ("echo $?")
5 Sep 30, Oct 2,4 Quiz #3 Lab #4 (due Oct 6)
Ch 11: Pointers
Using valgrind for error checking ("gcc -g -Og" and "valgrind executable")
6 Oct 7,9,11 Lab #5 (due Oct 13)
Ch 17: Advanced Uses of Pointers (dynamic allocation)
Review; Quizzes #1-3 solutions
Midterm exam #1 in class on Friday/11th
(closed book, a letter-size paper with handwritten notes on one side allowed)
7 Oct 14,16,18 Quiz #4 Lab #6 (due Oct 20)
Ch 12: Pointers and Arrays
Ch 13: Strings
Using valgrind for error checking ("gcc -g -Og" and "valgrind executable")
8 Oct 21,23,25 Quiz #5 Assignment #1 (due Dec 8)
Ch 17: Advanced Uses of Pointers
Using gdb/gcc for debugging ("gcc -ggdb -std=c99 source.c -o executable")
9 Oct 28,30,1 Quiz #6
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")
10 Nov 4,6,8 Ch 16: Structures, Unions and Enumerations
Ch 17: Advanced Uses of Pointers (function pointers)
Using gdb/gcc for debugging ("gcc -ggdb -std=c99 source.c -o executable")
Midterm exam #2 in class on Friday/8th
(closed book, a letter-size paper with handwritten notes on one side allowed)
11 Nov (11,13,15) Reading week: no classes
12 Nov 18,20,22 Quiz #7
Ch 20: Low-Level Programming
Ch 22: Input/Output (FILE pointers)
13 Nov 25,27,29 Quiz #8
Makefile
time your program (runtime statistics), shell script, running background
Ch 18: Declarations
14 Dec 2,4,6 Quiz #9 Withdrawal by 3rd
Ch 19: Program Design (multiple versions and bridging to C++)
15 minutes class time for SPOT survey
15 Dec 9 Final review
  Q&A session:
Q&A session:
  Dec 16*** A1 Final exam (33%): Dec 16, 8:30-10:30am
A2 Final exam (33%): Dec 19, 1:00-3:00pm
A3 Final exam (33%): Dec 18, 1:00-3:00pm
A4 Final exam (33%): Dec 17, 1:00-3:00pm
(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/fall-2024-winter-2025-exam-planner

  Jan 31 Deferred final exam (Friday, starting at 11:00am)


Grading Scheme:

  1. Mark distribution (course work w/dues):
    • 30%  5 lab exercises (3% each; basic/intermediate) and 1 large assignment (15%; advanced)
    • 18%  9 quizzes (2% each, a single 15-minute try inside time window Thursday 00:01am - Friday 11:00pm; no replacement quiz)
    • 22%  2 midterm exams (10% + 12%, 50 minutes class time on Fridays Oct 11, 2024 and Nov 8, 2024, 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. Term work policies:
    • Submissions will NOT be accepted after the corresponding due date, for all quizzes, lab exercises and assignment:
      • all quizzes are done in eClass;
      • all lab exercises and assignment are submitted to your GitHub.
    • Lab demo:
      • due to large class sizes, we will randomly select only 1/3 students to demo their lab exercises, after they submit their works;
      • allow at least 7 days for TAs to mark;
      • demo should be done within 14 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):
      • an acceptable excuse exists, and requested before the due date or within reasonable time frame;
      • requests should be made to the instructor; if granted, all associated marks are moved to the final exam;
      • for a missed final exam, the student must apply to their faculty (not the instructor) for permission to write the deferred exam on Jan 31, 2025 (Friday, 11:00am).
    • Collaboration by consultation model:
      • you are encouraged to discuss the lab exercises and assignment 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 --- not to fail any pre-set percentage of students, neither to target for any pre-set average.
    • We strive to assign each student a grade they deserve.
    • The following **mark (not percentage)** cutoffs will be respected:
    • 90+ → A+ (Excellent) --- guaranteed;
    • 80+ → A, A- (Excellent);
    • 70+ → B+, B, B- (Good);
    • 60+ → C+, C, C- (Satisfactory);
    • 50+ → D+, D (Minimal Pass) --- "<50 marks" is an F.

 

Disclaimer: This Course Outline is released and becomes final on September 3, 2024. Any typographical errors herein are subject to change and will be dated and announced in class.

 

  Last modified: July 19 2024 13:11:08  © Guohui Lin