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, year 2007–2012.
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)
Mathematics:
- 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)
Miscellaneous:
- 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 |