Project Nayuki

My university courses

I sometimes get asked about what courses I took at postsecondary school. So I’m publishing this list, hoping that it can start conversations on topics I’m familiar with.

I did a major in computer science and a minor in mathematics at the University of Toronto, St. George (downtown) campus, years .

The lists of topics below are not taken from course descriptions, but are summarized from my experiences of what was actually covered in the course instances that I took.

By category

Basic programming:

  • CSC150H: Accelerated Introduction to Computer Science (Python, Java)
  • CSC207H: Software Design (software engineering techniques)
  • CSC209H: Software Tools and Systems Programming (C, Unix)
  • CSC343H: Introduction to Databases (SQL queries, normalization)

Algorithms and theory:

  • CSC240H: Enriched Introduction to the Theory of Computation (proofs, induction, automata)
  • CSC265H: Enriched Data Structures and Analysis (trees, hashes, graphs)
  • CSC375H: Enriched Algorithm Design & Analysis (approximations, dynamic programming, network flow)
  • CSC365H: Enriched Computational Complexity and Computability (Turing machines, NP-completeness)
  • CSC310H: Information Theory (prediction, compression)
  • CSC438H: Computability and Logic (first-order logic, incompleteness)

Low-level computing:

  • CSC258H: Computer Organization (wiring logic gates, assembly language)
  • CSC369H: Operating Systems (resource management)
  • CSC372H: Microprocessor Software (interrupts, task scheduling)

Advanced programming:

  • CSC324H: Principles of Programming Languages (Prolog, functional programming)
  • CSC488H: Compilers and Interpreters (build a compiler)
  • CSC494H: Computer Science Project (Erlang distributed computing)
  • ECE1724HS1: Programming Massively-Parallel Multiprocessors with CUDA

Computer networks:

  • CSC358H: Principles of Computer Networks (queuing theory, routing)
  • CSC458H: Computer Networking Systems (OSI model, TCP emulation)

Numerical computing:

  • CSC350H: Numerical Algebra and Optimization (floating-point, Gaussian elimination, root-finding)
  • CSC351H: Numerical Approximation, Integration and Ordinary Differential Equations (polynomial interpolation, etc.)

Machine learning:

  • CSC321H: Introduction to Neural Networks and Machine Learning (architectures, training)
  • CSC401H: Natural Language Computing (analyze English sentences)


  • MAT223H: Linear Algebra I (basic)
  • MAT224H: Linear Algebra II (abstract)
  • MAT137Y: Calculus! (with epsilon-delta)
  • MAT237Y: Multivariable Calculus (again with epsilon-delta)
  • MAT244H: Introduction to Ordinary Differential Equations (methods for solving)
  • MAT301H: Groups and Symmetries (prove lots of theorems)
  • MAT315H: Introduction to Number Theory (modular arithmetic)
  • MAT335H: Chaos, Fractals and Dynamics
  • STA257H: Probability and Statistics I (manipulate distributions)


  • ECO100Y: Introduction to Economics (price signals, micro & macro)
  • LIN100Y: Introduction to General Linguistics (IPA, syntax)
  • CLA160H: Introduction to Classical Studies (ancient Greece, Roman Empire)
  • CSC290H: Communication Skills for Computer Scientists (writing, presentations)

By course

Code Title Topics Remarks
CSC150H Accelerated Introduction to Computer Science Python, Java, dictionary, recursion, sorting, inheritance, memory model, exception, generics, time complexity, JUnit Similar to CSC108H + CSC148H. Normally this course only covers one language.
CSC207H Software Design Java, SVN, regular expression (practical), GUI programming, XML, BlackBerry, design patterns (singleton, factory, visitor), user story, scrum Emphasizes teamwork rather than programming.
CSC209H Software Tools and Systems Programming Unix shell, Bash scripting, makefile, C programming, pointer, signal, fork, file I/O, pipe, socket, MapReduce
CSC240H Enriched Introduction to the Theory of Computation Predicate logic, proof technique (direct, contrapositive, contradiction, cases), quantification, mathematical induction (weak, strong, structural), algorithm correctness (precondition, postcondition, termination, loop invariant), big O notation, DFA, NFA, regular expression (theoretical), regular language and equivalence, pumping lemma Similar to CSC160H + CSC236H.
CSC258H Computer Organization Boolean algebra, logic circuit, breadboarding, floating-point representation and arithmetic, assembly language, microcode
CSC265H Enriched Data Structures and Analysis Abstract data type, average and worst-case time complexity, quicksort, red-black tree, augmenting data structures, hashing, universal hash function, Bloom filter, binary heap, binomial heap, union-find, amortized analysis, accounting method, potential method, breadth-first search (BFS), depth-first search (DFS), strongly connected components, lower bound on complexity, adversarial argument Enrichment to CSC263H.
CSC290H Communication Skills for Computer Scientists Presentation skills, self-critique of presentation, job interview, writing skills, meeting memo, research skills, citation, interpersonal communication, cognitive complexity, cognitive dissonance, perception checking, I-message, empathic listening, nondefensiveness, assertiveness, principled negotiation An English and communications course, not a computer science course.
CSC310H Information Theory Entropy, adaptive source modeling, run-length encoding (RLE), Huffman coding, arithmetic coding, LZ77, prediction by partial matching (PPM), binary symmetric channel (BSC), mutual information, maximum-likelihood decoding, syndrome decoding, generator matrix, parity-check matrix, Shannon’s noisy-channel coding theorem, Hamming code, low-density parity-check code (LDPC)
CSC321H Introduction to Neural Networks and Machine Learning Hidden layer, softmax, recurrent neural network, Bayesian inference, distributed representation, backpropagation, early stopping, mixture of experts, Hopfield net, restricted Boltzmann machine (RBM), autoencoder, capsule, support vector machine (SVM), MATLAB Taught by Geoff Hinton.
CSC324H Principles of Programming Languages Scheme, ML, Haskell, Prolog, context-free grammar (CFG), ambiguous grammar, lexical scoping, tail recursion, continuation-passing style (CPS), map, filter, fold, types, pattern matching, currying, lazy evaluation, Horn clause, unification, backtracking, negation as failure, cut Normally this course covers fewer than 4 languages.
CSC343H Introduction to Databases Relational algebra (union, intersection, difference, renaming, selection, projection, Cartesian product, theta join, natural join, division), SQL, grouping, aggregation, foreign key constraint, functional dependency, normal forms (1, 2, 3, BCNF) Other instances of this course may cover relational calculus.
CSC350H Numerical Algebra and Optimization Numerical error, catastrophic cancellation, condition number of matrix, Gaussian elimination with no/partial/full pivoting, LU decomposition, QR factorization, linear least squares approximation, singular value decomposition (SVD), Newton’s method, Broyden’s method, multidimensional optimization, MATLAB Enrichment to CSC336H.
CSC351H Numerical Approximation, Integration and Ordinary Differential Equations Approximation error, Taylor’s theorem, polynomial interpolation, Newton divided differences, B-spline, continuous least squares approximation, numerical integration, Simpson’s rule, Gaussian quadrature, Richardson extrapolation, Euler method, Runge–Kutta, MATLAB
CSC358H Principles of Computer Networks Queuing theory, M/M/1 and similar queues, ALOHA, stop-and-wait ARQ, go-back-n ARQ, selective repeat ARQ, Dijkstra’s algorithm for routing, Bellman–Ford algorithm for routing Covers theoretical network protocols, not actual ones.
CSC365H Enriched Computational Complexity and Computability Turing machine, decidable, semidecidable, diagonalization, halting problem, many-one reduction, Rice’s theorem, polynomial-time reduction, NP search problem, examples of NP-complete problems, proof of SAT being NP-complete, NL, PSPACE Enrichment to CSC363H. Later renamed to CSC463H. Taught by Stephen A. Cook.
CSC369H Operating Systems Process management, scheduling, system call, concurrency, monitor, deadlock, virtual memory, paging, file system, OS security, Harvard’s OS/161, C programming, code reading
CSC372H Microprocessor Software Altera DE2 Nios II, C, assembly language, interrupt handling, context switching, hardware interfacing, Lego building (Technic, motors, sensors), video synthesis by pixels, audio synthesis by samples, real-time scheduling, real-time operating system (RTOS), fixed-point arithmetic, linked list for thread management, applications and limitations of embedded microprocessors/microcontrollers Mostly lab work in programming on the DE2, rather than lectures.
CSC375H Enriched Algorithm Design & Analysis Approximation ratio, interval scheduling, makespan scheduling, greedy algorithm, Kruskal’s algorithm, Dijkstra’s algorithm, Floyd–Warshall algorithm, Huffman code, dynamic programming, divide-and-conquer algorithm, fast Fourier transform (FFT), network flow, Dinic’s algorithm, min-cut, linear programming, integer programming, randomization Enrichment to CSC373H. Taught by Allan Borodin.
CSC401H Natural Language Computing n-gram model, decision tree, hidden Markov model (HMM), Viterbi algorithm, Gaussian mixture model (GMM), expectation-maximization (EM), part-of-speech tagging, statistical machine translation, IBM Model 1, speech production theory, speech synthesis, information retrieval, MATLAB
CSC438H Computability and Logic Resolution (theorem-proving), PK (propositional sequent calculus), LK (predicate sequent calculus), soundness, completeness, register machine, primitive recursive function, Church–Turing thesis, recursively enumerable set, recursive set, diagonalization, Peano arithmetic, arithmetic hierarchy, Gödel’s incompleteness theorem
CSC458H Computer Networking Systems Latency and throughput, OSI model, line coding, Spanning Tree Protocol (STP), self-learning bridge, Classless Inter-Domain Routing (CIDR), packet forwarding decision, distance-vector routing, link-state routing, autonomous system (AS), peering and transit, path-vector routing, Address Resolution Protocol (ARP), Internet Protocol (IP), Internet Control Message Protocol (ICMP), TCP handshakes, TCP sequencing, congestion control, Stanford’s Virtual Network System (VNS), peer-to-peer (P2P) search, network attacks
CSC488H Compilers and Interpreters Programming language design considerations, LL and LR parsing, infix operator precedence, Java CUP (like Yacc), abstract syntax tree, symbol table, semantic analysis and checking, structure layout, stack frames, code generation for stack machine, common subexpression elimination, loop-invariant code motion, compiler-building project
CSC494H Computer Science Project Erlang, parallelization, fault tolerance, strong scaling, weak scaling, high-performance computing (HPC), Conway’s Game of Life, Mandelbrot set, SciNet Professor-defined project course.
ECE1724HS1 Special Topics in Software Engineering: Programming Massively-Parallel Multiprocessors with CUDA CUDA, defining and running kernels, processor architecture (registers, instruction scheduling, functional units, memory, cache), warp execution model, bank conflict, global memory access, parallel reduction, streams, MD5 cracking project Graduate-level course.
MAT137Y Calculus! Absolute value, mathematical induction, limit (epsilon-delta), Dirichlet function, least upper bound, intermediate value theorem, differentiation, chain rule, mean value theorem, curve sketching, implicit differentiation, related rates, Darboux integral (ε, δ), integration by parts, natural logarithm, sequence convergence (ε, δ), series convergence MAT135Y has no epsilon-delta, MAT157Y has more theoretical problems and less calculations.
MAT223H Linear Algebra I System of linear equations, row reduction, matrix inverse, span, basis, vector space, null space (kernel), rank, isomorphism, linear map, determinant, Cramer’s rule, inner product, Gram–Schmidt, least squares, eigenvalue and eigenvector
MAT224H Linear Algebra II Vector space, field, complex numbers, change of basis, eigenvalue and eigenvector, quadratic form, inner product space, normal linear operator, orthonormal basis, orthogonal complement, isomorphism
MAT237Y Multivariable Calculus Open and closed sets (ε, δ), limit (ε, δ), connectedness, partial derivative, chain rule, Jacobian, parametric function, integration, Jordan measure, cylindrical and spherical coordinates, vector field, gradient, curl, divergence, line integral, Green’s theorem, Gauss’s theorem, Stokes’s theorem, extrema
MAT244H Introduction to Ordinary Differential Equations First-order linear ODE, separable differential equation, exact differential equation, Wronskian, Abel’s identity, second-order linear constant homogeneous ODE, method of undetermined coefficients, variation of parameters, characteristic equation, phase portrait, fundamental matrix, stable/saddle/unstable/spiral fixed point
MAT301H Groups and Symmetries Group, abelian (commutative) group, equivalence relation, disjoint partition, division algorithm (theorem), Euler’s totient function, cyclic group, generator, integers mod n, order of an element, conjugate, subgroup, torsion subgroup, dihedral group, center of a group, external direct product, symmetric (permutation) group, orbit, cycle decomposition, alternating group, left/right coset, Lagrange’s theorem, Euler’s totient theorem, normal subgroup, quotient group, homomorphism, internal direct product
MAT315H Introduction to Number Theory Pythagorean triples, rational roots of polynomials, modular arithmetic, Chinese remainder theorem, Fermat’s little theorem, Euler’s theorem, exponentiation by squaring, roots mod n, quadratic reciprocity, Legendre symbol, Gaussian integers and factorization
MAT335H Chaos, Fractals and Dynamics Logistic map, fixed point, cycle, bifurcation, definition of chaotic, Sharkovskii’s period 3 theorem, fractal dimension
STA257H Probability and Statistics I Random variable, event, probability, expected value, probability-generating function (PGF), probability distribution function (PDF), moment-generating function (MGF), distributions (Bernoulli, geometric, exponential, Poisson, gamma, order statistic), central limit theorem
ECO100Y Introduction to Economics Supply and demand, marginal cost, elasticity, perfect competition, monopoly, externality, price ceiling/floor, game theory, gains from trade, inflation, GNP and GDP, Keynesian model, monetary policy
LIN100Y Introduction to General Linguistics Phonetics, phonology, morphology, syntax, semantics, minimal pair, International Phonetic Alphabet (IPA), phonological rule, X-bar theory
CLA160H Introduction to Classical Studies Classical Greece, Peloponnesian Wars, Hellenistic Age, Roman Republic, Roman Empire, Pax Romana, physical evidence from burials/pottery/texts/murals/architecture, Athens, Sparta, Rome, Asia Minor, polis, hoplite, Alexander the Great, Thucydides, Polybius, Augustus, citizenship, democracy, family, education, military campaigns, political office, philosophy, slavery, religions and cults