Completing second-year courses
Second-year courses in the Computer Science program create a common foundation for CS students, and give you an opportunity to build a cohort and community. All 200-level CSC courses are required for the CS Specialist, and all but one (CSC209H) is also required for the Major. Students in the Minor might also want to take additional 200-level courses, to complete pre-requisites for upper-level courses and to build skills in some key areas of CS.
A special 200-level course, JSC270H, is restricted to students in the Data Science Specialist.
In addition to CSC courses, you’ll need to complete a course in linear algebra (for the CS Specialist) and in statistics (for the CS Specialist and Major). Check the Calendar for these and other 200-level course requirements for your program, and review Courseography to see a visual map of CS courses.
200-level CSC Courses
Enriched course options: CSC240H & CSC265H
Two 200-level courses are offered in an enriched format. CSC240H is an enriched version of CSC236H, and CSC265H is an enriched version of CSC263H. Enriched courses are more theoretical, move at a faster pace, and assume different prerequisite knowledge. These are courses for students with strong mathematical skills who like a mathematical approach to learning. Topics will be studied in greater depth and assignments will be more conceptually challenging.
These courses are good preparation for students who are also studying Mathematics, or who wish to take additional upper-level Theory courses (such as CSC373H, CSC463H, and CSC473H.)
While it is sometimes possible to move from an enriched to a regular offering of the course after the start of the term, you'll benefit most from starting in the course that is the best match for your interests and skills. To help you decide which course is right for you, you can review the syllabi from previous offerings of the courses alongside the Calendar course descriptions and prerequisite listings.
Watch a short video by Professor Faith Ellen about CSC240H to help you decide if this course is right for you.
Explore each course overview below to see what students and instructors have to say about:
How course content will prepare you for future CS studies and CS careers
How course assignments are structured to help you learn
Tips for success from instructors and students
(The information below supplements course descriptions in the Calendar, but you should always treat the Calendar as the definitive source for course and program requirements!)
Required for: ✅ CS Specialist ✅ CS Major ✅ CS Minor ✅ DS Specialist CSC207H: Software DesignThe course is about software design concepts, which are ways to think about and organize your code as you design and develop a large program in a team of programmers. We use Java to illustrate and apply these concepts, but they apply to most programming languages. |
Required for: ✅ CS Specialist ✅ CS Major ✅ CS Minor ✅ DS Specialist CSC236H: Introduction to the Theory of ComputationThe “second half” of CSC165H1, where we apply proof techniques to topics that are central to CS: algorithm correctness (how to prove it, but more importantly, how to use it to design correct algorithms from the start, instead of programming by trial-and-error); and algorithm complexity (expanding the analysis of worst-case time complexity to include recursive algorithms). |
Required for: ✅ CS Specialist ✅ CS Major ☐ CS Minor ☐ DS Specialist CSC258H: Computer Organization"CSC 258 is about ... understanding the actual machine that programs run on. ... What this course does is show how you would build a machine, from electrical properties, to making gates, and then devices." |
Required for: ☐ CS Specialist ☐ CS Major ☐ CS Minor ✅ DS Specialist JSC270H1: Data Science IComing soon! |
Looking ahead: Focuses and upper-level courses
In addition to courses required for your program, you should plan to take any 200-level courses that are prerequisites for upper-level courses of interest. Some suggestions:
Are there any 300- or 400-level courses that look especially interesting to you? Check the Calendar for full course offerings and pre-requisites, along with the course pathways illustrated on Courseography, to help you plan.
Consider whether you’d like to complete a Focus, and whether you need to take any 200-level courses as prerequisites or requirements for that Focus.
What is a Focus?
Focuses are optional ways to explore CS subfields as part of a Specialist or Major program (you can complete zero, one, or multiple Focuses), and consist of about 2.0 full credits of mostly upper-level courses that help you build expertise in the Focus area. Most of the courses that make up a Focus will count towards your program requirements, but you might need to complete an additional course or two to complete the Focus requirements. Even if you don’t want to complete a full Focus, or if you’re interested in a Focus that’s not available in your program, a Focus can be helpful in selecting upper-year courses, as it will point you towards the courses most relevant to your particular interest. Focus descriptions and requirements are in the Calendar. Focus areas include:
- Artificial Intelligence
- Computational Linguistics and Natural Language Processing
- Computer Systems
- Computer Vision
- Game Design
- Human-Computer Interaction
- Scientific Computing
- Theory of Computation
- Web and Internet Technologies