CS Learning Repository Home

About This Repository

This is a work-in-progress repository of resources to help students learn difficult concepts during the intermediate years (years two and three) of undergraduate computer science. This work is part of ongoing dissertation research into supporting students as they engage with learning difficult concepts in these years.

The topics discussed in this repository were frequently identified by students as being problematic when learning them. Topics were identified through a survey distributed to students at universities across the United States. The findings of this research are pending publication.

Below are modules for each of the difficult concept areas. Each module contains explanatory material, worked examples, curated links, and videos. All modules are actively being developed.

Modules
Module 1 v0.3
Pointers, References & Memory Allocation
Stack and heap memory, pointer arithmetic, dynamic allocation with malloc and free in C. Covers single, double, and void pointers.
Open module
Module 2 v0.3
Data Structures
Arrays, linked lists, stacks, queues, deques, trees (BST, red-black, B-trees), and graphs. Traversal algorithms and implementation in C.
Open module
Module 3 v0.3
Algorithmic Proofs
Mathematical proof syntax and set theory, direct proofs, proof by contradiction, and proof by mathematical induction.
Open module
Module 4 v0.1
Principles of Programming Languages
Programming paradigms, formal syntax and semantics, type systems, scoping and closures, higher-order functions, and memory management strategies. NOTE: This is a work in progress module.
Open module
Module 5 v0.1
Theory of Computation
Finite automata (DFA/NFA), regular and context-free languages, Turing machines, decidability, the Halting Problem, and P vs NP complexity theory. NOTE: This is a work in progress module.
Open module