CMPUT201 is essentially an introductory programming course focussing on the C language.
I have cotaught this course with Hazel Campbell before.
The goal of this course is to teach you to program in a weakly staticly typed programming language that is relatively low level.
We teach C and a lot of C. The course is very hands on.
Course Description
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 C++ and software development tools of the UNIX environment.
Course Prerequisites:
CMPUT 175.
(Preferred to have knowledge of, or co-taking, CMPUT 229, 272, and 204)
Course Objectives and Expected Learning Outcomes:
- Be able to handle any intermediate programming problem by using standard C99 under Linux
- Have the skills to combine your knowledge of program design and data structures (174/175), with a low-level understanding of the features provided in higher-level languages like Python (174/175)
- Be prepared to use low-level programming constructs, program design, and data structures, with algorithms and mathematics in future courses (204/272) and application-specific knowledge in future courses (291/379) to design and implement non-trivial software
- Understand the layout and usage of memory from a user-space perspective
- Be able to program using raw pointers and manual memory allocation/de-allocation
- Understand fundamental binary data types, their limitations, and be able to program using them
- Understand the difference between a value and a pointer (or reference to a value)
- Understand the difference between passing information by value and by reference, and when each is used, and when each should be used
- Be able to learn a new language with a different syntax
- Be able to program in typed languages effectively
- Be able to program in compiled languages effectively
Lecture Notes
My last batch of lecture notes are right here: https://github.com/abramhindle/CMPUT201W20B2-public/
- What is C
- [Operators, Assignment] (https://github.com/abramhindle/CMPUT201W20B2-public/blob/master/week02/presentation.org)
- Types, Signs, Defs, Arrays
- Functions and Pointers
- Structs and Enums
- Enums, Unions, Malloc, Heap
- Heap, Malloc, Recursive Structs, GDB
- Memory again, Preprocessor, Multiple Files
- Preprocessors, Linking
- Bases, Bitwise Operators, Floats
- Coupling, Cohesion, Complexity, DOOM Source Code Walkthrough
- IO and mmap
Derivative Work
Feel free to clone and copy provided you give my collaborators and myself appropriate attribute and follow the licenses.
This course is based on:
C Programming: A Modern Approach Paperback – March 31 2008
by K. King (Author)