Canada · Ontario Curriculum Expectations
Grade 12 Computer Science
This course prepares students for post secondary computer science by focusing on abstract data types, complex algorithm analysis, and the social implications of automation. Students develop professional grade software solutions while exploring the underlying hardware and networking protocols that power the modern web.

01Data Structures and Abstract Data Types
Students move beyond primitive types to explore how complex data can be organized and manipulated efficiently using stacks, queues, and linked lists.
Students will explore the fundamental concepts of data organization and the need for efficient data management in programming.
Understanding how data elements are stored in non-contiguous memory locations and managed through pointers or references.
Students will learn the basic structure and operations of singly linked lists, including insertion and deletion.
Exploring variations of linked lists and their specific use cases and implementation complexities.
Exploring LIFO structures and their practical applications in operating systems and print spooling.
Understanding FIFO structures and their applications in task scheduling and buffer management.
Implementing hierarchical data structures to optimize searching and sorting operations.
Exploring different methods to visit nodes in a tree, such as in-order, pre-order, and post-order traversal.
Understanding the importance of tree balancing for maintaining search efficiency and exploring self-balancing tree algorithms.
Introducing heap data structures and their application in implementing efficient priority queues.
Exploring hash tables for fast data retrieval and understanding collision resolution strategies.
Introduction to graph data structures, their representations (adjacency matrix/list), and basic traversal algorithms (BFS/DFS).
Understanding the concept of ADTs as a mathematical model for data structures, focusing on their interface rather than implementation.

02Algorithm Analysis and Optimization
A deep dive into computational complexity, Big O notation, and the mathematical foundations of efficient code.
Students will learn the importance of evaluating algorithm efficiency and the metrics used for comparison.
Evaluating the performance of algorithms as input size grows toward infinity.
Understanding and comparing O(1), O(log n), O(n), O(n log n), O(n^2), and O(2^n) complexities with practical examples.
Analyzing the memory usage of algorithms using Big O notation, considering auxiliary space.
Mastering the divide and conquer approach to solve complex problems by breaking them into smaller sub-problems.
Comparing recursive and iterative solutions, focusing on their advantages, disadvantages, and performance implications.
Analyzing and implementing basic sorting algorithms like Bubble Sort, Selection Sort, and Insertion Sort.
Understanding the divide-and-conquer strategy of MergeSort and its O(n log n) complexity.
Exploring QuickSort, its pivot selection strategies, and average-case efficiency.
Comparing linear search, binary search, and hash table lookups in terms of efficiency.
Introduction to greedy algorithms and their application in optimization problems, such as coin change or shortest path.
Exploring dynamic programming as a technique for solving complex problems by breaking them into overlapping subproblems.
Reviewing various algorithm design paradigms: brute force, divide and conquer, greedy, dynamic programming, and backtracking.

03Networks and Distributed Systems
Examining how computers communicate across local and global networks using standardized protocols and layers.
Students will explore the fundamental concepts of computer networks, including network topologies and types.
Analyzing the layered architecture that allows diverse hardware to communicate over the internet.
Understanding the differences between connection-oriented (TCP) and connectionless (UDP) protocols and their use cases.
Exploring how IP addresses identify devices and how routers direct traffic across networks.
Understanding how domain names are translated into IP addresses and the hierarchical structure of DNS.
Investigating basic network vulnerabilities and common security measures like firewalls and intrusion detection systems.
Investigating how data is protected in transit through encryption and authentication methods.
Understanding how digital signatures ensure data integrity and authenticity, and the role of digital certificates.
Understanding the shift from local hardware to distributed, virtualized resources in the cloud.
Examining the unique security and privacy challenges associated with cloud computing.
Introduction to distributed systems architecture and the benefits of microservices for scalability and resilience.
Exploring the concepts of edge computing and its role in supporting the Internet of Things (IoT).
Introduction to techniques for investigating network security incidents and responding to breaches.

04Software Engineering Principles
Applying industry-standard methodologies to manage the lifecycle of a software project from requirements to maintenance.
Students will learn about the software development lifecycle and the importance of systematic approaches to building software.
Understanding how to gather, analyze, and document user and system requirements for a software project.
Comparing traditional linear development models with modern iterative approaches.
Exploring the traditional Waterfall model and hybrid approaches, identifying their strengths and weaknesses.
Learning about design patterns, modularity, cohesion, and coupling for creating maintainable and scalable code.
Implementing unit tests, integration tests, and debugging strategies to ensure robust code.
Mastering debugging techniques and implementing effective error handling mechanisms in software.
Using industry-standard tools to track changes and collaborate on shared codebases.
Understanding the importance of code reviews, coding standards, and documentation for team collaboration and code quality.
Exploring the final stages of the software lifecycle, including deployment strategies and ongoing maintenance.
Students will begin planning their capstone project, applying software engineering principles to define scope, requirements, and initial design.