Canada · Ontario Curriculum Expectations
Grade 11 Computer Science
This course explores the foundations of computer science through advanced programming structures, algorithmic efficiency, and systems architecture. Students build complex software solutions while examining the social and ethical implications of emerging technologies in a global context.

01Algorithmic Foundations and Complexity
Students investigate the efficiency of different algorithms and learn to evaluate performance using Big O notation. This unit focuses on searching, sorting, and the mathematical logic behind code optimization.
Students will define what an algorithm is, explore its characteristics, and practice designing simple algorithms for everyday problems.
Explore the core principles of computational thinking, focusing on breaking down complex problems and identifying essential information.
Students will learn about fundamental data structures like arrays and lists, understanding their properties and basic operations.
Analyze and implement linear and binary search algorithms, comparing their efficiency based on data organization.
Implement and visualize basic sorting algorithms like selection sort and bubble sort to understand their step-by-step process.
Explore more efficient sorting algorithms, focusing on insertion sort's incremental approach and merge sort's divide-and-conquer strategy.
Analyze and implement quicksort, understanding its pivot selection and partitioning process, and briefly introduce other advanced sorts.
Students will learn to evaluate algorithm performance using Big O notation, understanding how it describes growth rates.
Apply Big O notation to analyze the time and space complexity of various algorithms, including search and sort.
Explore the power of recursion to solve complex problems by breaking them into smaller, self-similar sub-problems.
Practice implementing recursive solutions for problems like factorial, Fibonacci sequence, and tree traversals.
Compare and contrast iterative and recursive approaches to problem-solving, focusing on efficiency, readability, and memory usage.
Explore basic graph concepts, including nodes, edges, and common graph representations (adjacency matrix, adjacency list).

02Object-Oriented Programming and Design
Focus on the principles of encapsulation, inheritance, and polymorphism to create modular and reusable software. Students transition from procedural scripts to robust system designs.
Students will understand the fundamental concepts of OOP: objects, classes, and instances, and their role in modeling real-world entities.
Implement access modifiers to protect internal object states and ensure data integrity.
Design systems using parent and child classes to model real-world relationships and reduce code redundancy.
Utilize interfaces and abstract classes to define common behaviors across different object types.
Students will learn to use abstract classes to define common interfaces for a group of related classes, enforcing specific behaviors.
Compare and contrast composition and inheritance as design principles for code reuse and relationship modeling.
Students will be introduced to common software design patterns (e.g., Singleton, Factory) as reusable solutions to recurring problems.
Learn to write unit tests for classes and methods to ensure code correctness and facilitate refactoring.
Develop strategies for identifying and fixing errors in object-oriented code, utilizing debugging tools and techniques.
Students will learn the basics of Git for tracking code changes, collaborating with others, and managing project versions.
Explore techniques for improving existing code without changing its external behavior, focusing on readability, maintainability, and efficiency.
Learn to anticipate and handle runtime errors gracefully using try-catch blocks and custom exceptions.
Overview of the stages involved in software development, from requirements gathering to deployment and maintenance.

03Data Structures and Management
Students move beyond simple arrays to explore dynamic data structures like linked lists, stacks, and queues. The unit also introduces basic database concepts and data persistence.
Compare the implementation and use cases of arrays versus linked lists in memory management.
Students will implement singly and doubly linked lists, understanding node manipulation and traversal.
Model real-world processes like undo mechanisms and print buffers using linear data structures.
Students will implement stack and queue data structures using arrays or linked lists, and apply them to simple problems.
Explore non-linear data structures, focusing on the properties and operations of binary search trees for efficient data retrieval.
Students will implement and compare different tree traversal methods: in-order, pre-order, and post-order.
Introduction to hash functions and hash tables for fast data storage and retrieval, including collision resolution strategies.
Introduction to structured data storage, entity-relationship diagrams, and basic query logic using SQL.
Students will practice writing more complex SQL queries, including joins, subqueries, and aggregation functions, to retrieve and manipulate data.
Learn to read from and write to files, understanding different file formats (text, CSV) and error handling.
Explore the concepts behind NoSQL databases (e.g., document, key-value stores) and their use cases compared to relational databases.
Introduction to basic principles of data visualization to effectively communicate insights from data.
Implement and compare Breadth-First Search (BFS) and Depth-First Search (DFS) algorithms for traversing graphs.

04Networks and Digital Security
An exploration of how computers communicate across the internet and the protocols that keep data safe. Students learn about encryption, network layers, and cybersecurity threats.
Students will learn about the basic components of a computer network, network topologies, and different types of networks (LAN, WAN).
Break down the layers of network communication from physical hardware to software applications.
Understand how IP addresses uniquely identify devices on a network and the function of the Domain Name System (DNS).
Students will learn about the fundamental principles of cybersecurity, including confidentiality, integrity, and availability (CIA triad).
Identify common attack vectors like phishing, SQL injection, and man-in-the-middle attacks.
Study the history and application of symmetric and asymmetric encryption in securing digital communications.
Introduction to the process of investigating cyber incidents, collecting digital evidence, and responding to breaches.
Examine key privacy regulations (e.g., GDPR, CCPA) and their impact on data handling and user rights.
Explore the principles of ethical hacking as a method to identify vulnerabilities and improve system security.
Introduction to fundamental web development languages for creating static web pages and interactive elements.
Explore the concepts of cloud computing, different service models (IaaS, PaaS, SaaS), and their advantages and disadvantages.

05The Impact of Computing on Society
Critically examine the role of technology in shaping culture, economy, and individual rights. This unit covers AI ethics, the digital divide, and environmental sustainability.
Investigate how machine learning models can inherit and amplify human biases from training data.
Analyze the gap between those with and without access to modern technology and the impact on global equity.
Explore the carbon footprint of data centers, e-waste, and the energy demands of blockchain technology.
Examine the concepts of intellectual property, copyright, patents, and open-source licensing in the context of software development.
Discuss the societal and economic impacts of automation and artificial intelligence on various industries and job markets.
Explore the responsibilities and rights of individuals in the digital world, focusing on ethical online behavior, privacy, and digital footprint.
Learn to manage a project using sprints, user stories, and iterative feedback loops.
Implement unit testing and user acceptance testing to ensure software reliability and usability.
Communicate technical concepts and project outcomes to both technical and non-technical audiences.