⇦ Back

CS107 - Looking Back

At the start of the quarter, we laid out the following learning goals that we hoped to achieve:

The goals for CS107 are for students to gain mastery of to achieve competence in and have exposure to

Here's a look back at how we worked to achieve these learning goals via the different topics we covered, and why they're important.

Unix, Command Line and C

A rounded-square icon of a terminal

How can we use the command line and C to write, compile and run our programs?

Writing, Testing, Debugging and Profiling Code
(gdb) b myFunc
(gdb) r input.txt
...

How can we write programs with good style, create comprehensive test cases and use tools such as GDB and Valgrind to debug and profile our code?

Topic 1: Bits and Bytes

The 4-bit two's complement signed integer representation number wheel, displaying the two's complement representations of numbers starting at 0 at the top and going clockwise around the wheel up to 7, then -8 and back up to 0.

How can a computer represent integer numbers?

Topic 2: Chars and C-Strings

a diagram of a character array with 6 characters, numbered with indexes 0 to 5, storing the individual characters 'H' 'e' 'l' 'l' 'o' '\0'.

How can a computer represent and manipulate more complex data like text?

Topic 3: Pointers, Stack and Heap

A memory diagram showing the stack and heap, with pointer named ptr on the stack storing address 0xffe0, which has an arrow pointing to an array on the heap that contains 3 elements, the numbers 1, 0 and 7.

How can we effectively manage all types of memory in our programs?

Topic 4: Generics
void *ptr
memcpy(dst, src, size)
cmp_fn

How can we use our knowledge of memory and data representation to write code that works with any data type?

Topic 5: Assembly
mov %rax, %rbx
test %rbx, %rbx
jle 0xffe2c

How does a computer interpret and execute C programs?

Topic 6: Heap Allocators

A diagram of a single block on the heap that is marked free with payload size 16 bytes.  The header is at address 0x10 in memory and the payload is 16 bytes starting at address 0x18.

How do core memory-allocation operations like malloc and free work?

Interwoven Topic: Ethics
🏦

How do we act responsibly in maintaining security, protecting privacy, and ensuring warranted trust in the systems we build and maintain?