Student Resources
Immersion Courses
Admitted MPCS students without prior experience in programming or discrete mathematics should plan to begin the program by enrolling in one or both immersion courses. Students with previous experience can opt to take Placement Exams to test out of the immersion program.
The two immersion courses are:
Fast-paced and rigorous, they offer essential training in programming and discrete math, ensuring students are fully equipped to tackle the advanced coursework that follows. Each course spans one academic quarter.
- Part-time students are advised to take one course per quarter.
- Full-time students may take both immersion courses simultaneously, though doing so will extend the program by one quarter.
Important Details
- The workload for these courses is substantial.
- Students admitted in Round 1 or Round 2 can begin their courses in either the Summer or Autumn quarter. Students admitted in Round 3 are only eligible to start in the Autumn quarter.
- Immersion courses do not count towards the degree requirements of the MPCS.
- These courses are offered online during the Summer quarter and in the evenings on-campus in Hyde Park during the Autumn quarter.
- Immersion courses are open exclusively to admitted MPCS students.
Course Overviews
MPCS 50101: Concepts of Programming
Course Description
In this course students will get an introduction to the field of computer science by learning to program in Python. Students will write code each week, learning the essentials of how to solve real-world problems in an object-oriented programming language. We will learn about fundamental data structures and algorithms, professional coding practices, algorithm design, automated testing, and the fundamentals of object-oriented programming.
In MPCS 50101, we provide an immersive introduction to programming for students who may not have prior experience. We will use the Python programming language to explore general-purpose computer programming and algorithmic reasoning, in an object-oriented context.
Course Contents
During this course, students will learn:
- how to construct algorithms, and express them as computer programs;
- how to refine and improve programs by an iterative process;
- the core principles of object-oriented programming;
- fundamental data structures: arrays, sets, maps, and trees;
- the basics of computational efficiency and “big O” notation.
MPCS 50103: Math for Computer Science: Discrete Math
Course Description
This course is an introduction to ideas and techniques from discrete mathematics that are commonly used in computer science. It emphasizes mathematical proof and problem solving, employed on a variety of useful and interesting topics: combinatorics, discrete probability, graphs, and basic number theory.
On completion of the course, students will be practiced in using mathematical concepts and techniques to solve problems, and in expressing mathematical notions precisely. They will be able to use ideas and techniques from discrete mathematics in subsequent courses in computer science, in particular courses in the design and analysis of algorithms, networks, numerical methods, software engineering, data analysis, and machine learning.
Course Contents
- Mathematical reasoning and proofs: An introduction to mathematical reasoning, common logical fallacies, mathematical proofs and various proof techniques including, most importantly, mathematical induction.
- Combinatorics: Counting, permutations, combinations, binomial theorem, pigeon hole principle, inclusion-exclusion principle, bijective counting, recurrences.
- Number Theory: Divisibility, Euclid’s division algorithm, prime numbers, modular arithmetic, Fermat’s little theorem.
- Discrete Probability: conditional probability, independence, Bayes rule, random variables, expected value, linearity of expectation, variance, Markov’s inequality, the probabilistic method as a proof technique.
- Graphs: Directed and undirected graphs, various representations of graphs, graph isomorphism, graph colouring, paths, connectivity, Eulerian and Hamiltonian paths, trees, bipartite graphs, matchings.