ICS / SCH / 01
Problem solving for teens
Logic, data structures and the algorithms ICS4U asks for.
Open the syllabusOntario · Grade 11 · ICS3U in Python or Java
ICS3U is where many Ontario teens write their first serious programs, and where many of them first get stuck: an index that runs one past the end of an array, a loop that never stops, a project deadline that felt far away until suddenly it did not. This page explains the course from the ministry’s own curriculum document, solves one problem in both Python and Java with the reasoning laid out, and gives ten practice questions of our own with full answers. We teach alongside the student’s school course and do not grant Ontario credits; families who need the credit take it at school or through a credit provider.
Teaching live online since 2020 · 10,000+ students · Python or Java, whichever the school uses
In short
ICS3U is Ontario’s Grade 11 university-preparation computer science course, Introduction to Computer Science, with no prerequisite. Students write programs with variables, arrays, loops and subprograms, then design software as a team. Modern Age Coders gives ICS3U help live online, in a batch or one to one, through our course Ontario Computer Science Companion: ICS3U and ICS4U, in Python or Java.
Learn it with a teacher
The companion course follows the school’s own outline. The two language courses go deeper for students who want more than the course asks.

ICS / 01
Grades 11 and 12. Paced to the school course outline, in Python or Java, with tracing, testing and project planning.
Open the syllabus →
ICS / 02
Ages 13 to 18. For classes that teach ICS3U in Python, and for students who want real projects beyond it.
Open the syllabus →
ICS / 03
Ages 13 to 18. For schools that teach in Java: types, arrays, methods, then objects and classes.
Open the syllabus →The Ontario curriculum
Every ICS3U class in Ontario is built on one document: The Ontario Curriculum, Grades 10 to 12: Computer Studies, issued in 2008. It describes ICS3U plainly: “This course introduces students to computer science.” It also says students “will also write and use subprograms within computer programs”, and its course entry ends with “Prerequisite: None”. The course is organized in four strands.
| Strand | What the overall expectations say | What that means in class (our reading) |
|---|---|---|
| A. Programming Concepts and Skills | “use different data types, including one-dimensional arrays, in computer programs”; “use control structures and simple algorithms”; “use subprograms within computer programs”; “use proper code maintenance techniques and conventions” | Variables and types, if statements and loops, lists or arrays, functions or methods, and code that another person can read |
| B. Software Development | “use a variety of problem-solving strategies to solve different types of problems independently and as part of a team”; “design algorithms according to specifications”; “apply a software development life-cycle model to a software development project” | Planning before coding, pseudocode and flow charts, test plans, and the larger project most schools set near the end |
| C. Computer Environments and Systems | “relate the specifications of computer components to user requirements”; “use appropriate file maintenance practices to organize and safeguard data”; “demonstrate an understanding of the software development process” | CPU, memory and storage, organising files and backups, and what an editor, compiler and debugger each do |
| D. Topics in Computer Science | “describe policies on computer use that promote environmental stewardship and sustainability”; “demonstrate an understanding of emerging areas of computer science research”; “describe postsecondary education and career prospects related to computer studies” | E-waste and ergonomics, a short research report on a field such as cryptography or artificial intelligence, and where computer science leads |
Strand A is where the marks are won and lost, and its specific expectations are precise. Students describe arrays in terms of “elements, indexes, and bounds”, and they write algorithms to “count elements in an array, calculate a total, find highest or lowest value, or perform a linear search”. Those four algorithms turn up again and again in tests, so we make students rebuild each one from a blank file.
The same strand asks students to “identify and correct syntax, logic, and run-time errors”, to “use a tracing technique to understand program flow” and to “validate a program using a full range of test cases”. Tracing and testing are written into the course, not optional extras. It also covers how a computer stores data internally, naming “binary, hexadecimal, ASCII, Unicode”.
Strand B lists the strategies students should use: “stepwise refinement, divide and conquer, working backwards, examples, extreme cases, tables and charts, trial and error”. The worked problem further down uses three of them on one page: stepwise refinement, a table, and extreme cases.
Strand B also names example tasks, including how to “add data to a sorted array”, the “determination of primes”, and algorithms that handle “division by zero, roots of negatives”. Question 9 in our practice set is a prime checker for exactly this reason.
Families searching for an ICS3U course outline often find that two schools teach the course in a different order, or in different languages. The 2008 document explains why: “The computer programming language used and the order in which concepts are taught is left to the teacher’s professional judgement.” It adds that some teachers choose an “objects-first” approach.
So the outline your teen’s teacher hands out is the real map. In our first class we ask for it, and we plan around its unit order rather than our own.
The 2008 curriculum document sets the rule for Grades 9 to 12: “Seventy per cent of the grade will be based on evaluations conducted throughout the course.” The other part is a final evaluation: “Thirty per cent of the grade will be based on a final evaluation in the form of an examination, performance, essay, and/or other method of evaluation suitable to the course content and administered towards the end of the course.”
In ICS3U that 30 per cent is usually a final exam, a final project (often called the culminating task), or both. How a school splits it is the school’s choice, so ask the teacher early. The document also says each course “is worth one credit”, granted for a grade of “50% or higher”.
Source: The Ontario Curriculum, Grades 10 to 12: Computer Studies (2008), course pages for ICS3U and the assessment section, read 22 October 2026. The course list on the current Ontario curriculum website, read through its public content service the same day, still shows ICS3U with the issue year 2008. Modern Age Coders is not connected with the Ontario Ministry of Education.
U or C, and Grade 10
Grade 11 computer studies in Ontario comes in two versions, and Grade 10 has changed on the current curriculum website. Both are easier to understand side by side.
| ICS3U | ICS3C | |
|---|---|---|
| Full title | Introduction to Computer Science, Grade 11, University Preparation | Introduction to Computer Programming, Grade 11, College Preparation |
| Destination | University preparation courses are “designed to equip students with the knowledge and skills they need to meet the entrance requirements for university programs” | College preparation courses are designed to meet “the requirements for entrance to most college programs or for admission to apprenticeship or other training programs” |
| Prerequisite | None | None |
| Emphasis | “a foundation in the broad spectrum of computer science concepts and applications” | “College preparation courses focus on the development of computer programming skills.” |
| Course description opens | “This course introduces students to computer science.” | “This course introduces students to computer programming concepts and practices.” |
| Arrays | Named in the first overall expectation: one-dimensional arrays | The word array does not appear in the ICS3C expectations (our reading of the document); string handling such as “swap two characters, capitalize first letter” is named instead |
| Fourth strand | D. Topics in Computer Science (research areas, careers) | D. Computers and Society, including procedures for safe computing |
| Leads to | ICS4U, which lists ICS3U as its prerequisite | ICS4C, which lists ICS3C as its prerequisite |
| Credit | One credit | One credit |
| Course | Where it is listed | Issued | How it is organized |
|---|---|---|---|
| ICD2O, Digital Technology and Innovations in the Changing World | The current Ontario curriculum website, which lists five computer studies courses: ICD2O, ICS3U, ICS3C, ICS4U and ICS4C | 2023, Grade 10, Open | Three strands: Computational Thinking and Making Connections; Hardware, Software, and Innovations; Programming |
| ICS2O, Introduction to Computer Studies | The 2008 curriculum document. It is not on the current website’s computer studies list | 2008, Grade 10, Open | Three strands: Understanding Computers; Introduction to Programming; Computers and Society |
The choice is about destination, not ability alone. A student aiming at a university program in computer science, engineering or mathematics usually takes the U course, because only ICS3U leads to ICS4U. A student heading for a college program in programming or IT has a real course in ICS3C, with its own Grade 12 follow-on.
Neither course has a prerequisite, so a Grade 11 student who has never written code can enrol in either. That is also why the first month of ICS3U can feel steep: some classmates arrive having coded for years, and others are starting from zero.
The current website describes ICD2O this way: “Students will learn and apply coding concepts and skills to build hands-on projects and investigate artificial intelligence, cybersecurity, and other emerging digital technologies.” ICS2O appears in the 2008 document and not on that list.
Neither source we read says one course replaced the other, so we will not say it either. What matters for ICS3U is simpler: the 2008 table lists no prerequisite for it, so no Grade 10 course is required to take it. A Grade 10 course with programming in it is still a gentle start.
Python or Java
The curriculum leaves the language to the teacher, so Ontario students meet ICS3U in Python, Java and sometimes other languages. The ideas are the same. What the student types, and the errors they hit first, are not. This comparison is ours.
| Idea | Python | Java |
|---|---|---|
| Running a program | Run the file; the interpreter reads it line by line | Compile with javac, then run with java; nothing runs until the whole file compiles |
| A variable | count = 0, and the type follows the value | int count = 0;, with the type declared and fixed |
| A one-dimensional array | A list: marks = [72, 85, 64], which can grow | int[] marks = {72, 85, 64};, with a fixed length |
| How long is it? | len(marks) | marks.length for an array, name.length() for a string |
| Loop over the indexes | for i in range(len(marks)): | for (int i = 0; i < marks.length; i++) |
| Dividing 7 by 2 | 7 // 2 is 3 and 7 / 2 is 3.5 | 7 / 2 is 3 with ints; (double) 7 / 2 is 3.5 |
| Comparing two strings | == compares the text | == can say false for equal text; use .equals() |
| Marking a block | Indentation | Braces, with a semicolon after each statement |
| First errors students meet | IndentationError, NameError and TypeError, mostly while the program runs | cannot find symbol, missing semicolons and type mismatches, before it runs |
Python lets students write a working program in the first lesson, which is good for confidence and risky for habits. Because a variable can hold anything, a mistake such as adding a string to a number only shows up when that line runs, sometimes in the middle of a test.
Our Python students learn to read a traceback from the bottom up, to name variables clearly, and to stop leaning on shortcuts the course will not accept, such as built-in max() when the task is to write the highest-value algorithm themselves.
Java asks for more before anything works: a class, a main method, declared types, braces and semicolons. Students often spend the first weeks fighting the compiler. That strictness pays off later, because the compiler catches whole families of mistakes before the program ever runs.
Our Java students learn to read a compiler message for its line number and its one useful word, to keep integer division in mind, and to compare strings with .equals(). If cannot find symbol is the current enemy, our page on the cannot find symbol error walks through its usual causes.
The curriculum asks students to “explain the difference between an interpreter and a compiler”, and the first row of the table above is that answer in practice. A student who switches language between ICS3U and ICS4U keeps every idea and relearns only the spelling. For the longer argument about which language suits a beginner, see Python vs Java: which to learn first.
A worked problem, ours
This is our own problem, written for this page, at the level of an ICS3U unit test on arrays and loops. The code matters less than the thinking around it: break the problem down, trace it by hand, then test the edges. Both versions below were run and print the same line.
The problem. A student logs the minutes they practise coding each day. Given the daily log and a goal, find the longest run of consecutive days on which they practised at least the goal, and the day that run started. Days are numbered from 1. If no day meets the goal, report 0 and 0. If two runs tie, report the earlier one.
# Longest run of days at or above a goal (ours)
def longest_run(minutes, goal):
"""Return (length, start_day) of the longest run of days
with minutes >= goal. Days are numbered from 1.
No qualifying day gives (0, 0). On a tie, the earlier run wins."""
record_len = 0
record_start = 0
run_len = 0
run_start = 0
for i in range(len(minutes)):
if minutes[i] >= goal:
if run_len == 0: # a new run begins today
run_start = i + 1 # day numbers start at 1
run_len += 1
if run_len > record_len: # strictly greater: a tie keeps the earlier run
record_len = run_len
record_start = run_start
else:
run_len = 0 # the run is broken
return record_len, record_start
log = [35, 40, 10, 30, 45, 50, 20, 30, 30, 30]
length, start = longest_run(log, 30)
print("Longest run:", length, "days, starting on day", start)Output: Longest run: 3 days, starting on day 4. The index i starts at 0, so the day number is i + 1: the off-by-one that sinks many first attempts is handled in one place.
// Longest run of days at or above a goal (ours)
public class LongestRun {
// Returns {length, startDay}. Days are numbered from 1.
// No qualifying day gives {0, 0}. On a tie, the earlier run wins.
public static int[] longestRun(int[] minutes, int goal) {
int recordLen = 0;
int recordStart = 0;
int runLen = 0;
int runStart = 0;
for (int i = 0; i < minutes.length; i++) {
if (minutes[i] >= goal) {
if (runLen == 0) { // a new run begins today
runStart = i + 1; // day numbers start at 1
}
runLen++;
if (runLen > recordLen) { // strictly greater: a tie keeps the earlier run
recordLen = runLen;
recordStart = runStart;
}
} else {
runLen = 0; // the run is broken
}
}
return new int[] {recordLen, recordStart};
}
public static void main(String[] args) {
int[] log = {35, 40, 10, 30, 45, 50, 20, 30, 30, 30};
int[] result = longestRun(log, 30);
System.out.println("Longest run: " + result[0] + " days, starting on day " + result[1]);
}
}Same output. Java cannot return two numbers directly, so the method returns a two-element int array, a common ICS3U pattern before students meet objects in ICS4U.
| i | Day | Minutes | Meets goal? | Run length | Run start | Record length | Record start |
|---|---|---|---|---|---|---|---|
| 0 | 1 | 35 | yes | 1 | 1 | 1 | 1 |
| 1 | 2 | 40 | yes | 2 | 1 | 2 | 1 |
| 2 | 3 | 10 | no | 0 | 1 | 2 | 1 |
| 3 | 4 | 30 | yes | 1 | 4 | 2 | 1 |
| 4 | 5 | 45 | yes | 2 | 4 | 2 | 1 |
| 5 | 6 | 50 | yes | 3 | 4 | 3 | 4 |
| 6 | 7 | 20 | no | 0 | 4 | 3 | 4 |
| 7 | 8 | 30 | yes | 1 | 8 | 3 | 4 |
| 8 | 9 | 30 | yes | 2 | 8 | 3 | 4 |
| 9 | 10 | 30 | yes | 3 | 8 | 3 | 4 |
| Input log (goal 30) | Expected | Why this case |
|---|---|---|
| empty | 0 days, start 0 | Nothing to loop over: the method must still return safely |
| 10, 20 | 0 days, start 0 | No day qualifies |
| 30 | 1 day, start 1 | Exactly at the goal: tests at least, not more than |
| 10, 30, 30 | 2 days, start 2 | The run ends on the last day |
| 30, 30, 10, 30, 30 | 2 days, start 1 | A tie: the earlier run must win |
| 35, 40, 10, 30, 45, 50, 20, 30, 30, 30 | 3 days, start 4 | The sample log, with a tie at the end |
Look at the last three rows. Days 8, 9 and 10 make a run of 3, the same length as the run starting on day 4, and the record does not move. Without the trace, a student who used greater-than-or-equal would get day 8 and never see why.
The curriculum asks for “manual code tracing, extra code to output the state of variables” as debugging methods. This table is both: we wrote it by hand first, then printed the same eight columns from the program to check it.
The test plan follows the steps the curriculum spells out for a test plan, including to “calculate expected outcomes, record actual outcomes”. Students who write the expected column before running the code catch their own mistakes; students who run first tend to believe whatever the program prints.
Every later ICS3U topic reuses this shape: walk an array once, keep a small amount of state, update it carefully, test the edges. Our students solve versions of it for marks, temperatures and game scores until the shape is automatic.
Practice, ours
These ten questions are our own, written for this page. They are not taken from any school, board or exam. Questions 1 to 4 are tracing, the next three are debugging, then two ask you to write a method and the last asks you to choose a data structure. Work each one on paper before you check the answers below.
total = 0
for k in range(1, 8, 2):
total = total + k
print(total)What does this print? List every value k takes.
int x = 7; int y = 2; System.out.println(x / y + " " + x % y + " " + (double) x / y);
What is the exact line printed? Explain each of the three parts.
nums = [4, 8, 15, 16, 23, 42] print(nums[len(nums) - 1], nums[2], nums[-2])
What does this print? Which index expression would not work in Java, and what would you write instead?
int n = 12;
int steps = 0;
while (n != 1) {
if (n % 2 == 0) {
n = n / 2;
} else {
n = 3 * n + 1;
}
steps++;
}
System.out.println(steps);Build a trace table with columns n and steps. What is printed?
int[] marks = {72, 85, 64};
int sum = 0;
for (int i = 0; i <= marks.length; i++) {
sum += marks[i];
}
System.out.println(sum);This compiles but fails. What happens, what kind of error is it, and what is the fix? What should it print once fixed?
def highest(temps):
top = 0
for t in temps:
if t > top:
top = t
return top
print(highest([-8, -3, -12]))A student tests this with a week of winter temperatures. What prints, what should print, and what kind of error is it? Fix it.
def longest_streak(minutes, goal):
record = 0
run = 0
for m in minutes:
if m >= goal:
run += 1
else:
if run > record:
record = run
run = 0
return record
print(longest_streak([10, 30, 30, 30], 30))This is a first attempt at the worked problem above. What does it print, what should it print, and why? Give a fix.
Question 8 · write a method. In Python or Java, write count_above(values, limit) (Java: countAbove) that returns how many values are strictly greater than limit. What does it return for the values 55, 72, 90, 72 and 40 with a limit of 72?
Question 9 · write a method. Write is_prime(n) (Java: isPrime) that returns true only for prime numbers. List the test values you would use and why.
Question 10 · choose a data structure. For each task, say what you would store the data in and why. (a) The 30 marks of one class, to find the average and count how many are above it. (b) How many times each word appears in a paragraph. (c) Each student’s name with their mark, to be printed from highest mark to lowest.
Answers, ours
Each answer says what the program does and why, because the reasoning is what earns marks. Every program was run to confirm the output.
range(1, 8, 2) starts at 1, steps by 2 and stops before 8, so k takes 1, 3, 5 and 7, and the total is 1 + 3 + 5 + 7 = 16. The stop value is never included: the habit to check whenever range appears.x / y is integer division, so 7 / 2 is 3. x % y is the remainder, 1. The cast turns x into 7.0 before the division, so the third part is 3.5. The cast applies to x only, which is why it has to come first.len(nums) - 1 is 5, the last index. nums[2] is the third element, because indexes start at 0. nums[-2] counts from the end and is 23. Java has no negative indexes; there you would write nums[nums.length - 2].<=, i reaches 3, but the last index of a three-element array is 2, so Java throws ArrayIndexOutOfBoundsException (Index 3 out of bounds for length 3). Change <= to <. Fixed, it prints 221.top at 0 assumes every value is positive, and none of these are. Start with the first element instead: top = temps[0], and decide separately what an empty list should do (return None, or refuse it).run is greater than record, copy it across), or update the record every time the run grows, as the worked problem does. Testing a run that ends on the last day is the extreme case that finds it.def count_above(values, limit):
count = 0
for v in values:
if v > limit: # strictly above: equal does not count
count += 1
return count
print(count_above([55, 72, 90, 72, 40], 72)) # 1public static int countAbove(int[] values, int limit) {
int count = 0;
for (int v : values) {
if (v > limit) { // strictly above: equal does not count
count++;
}
}
return count;
}def is_prime(n):
if n < 2: # 1, 0 and negatives are not prime
return False
d = 2
while d * d <= n: # a factor pair always has one side at most the square root
if n % d == 0:
return False
d += 1
return Truepublic static boolean isPrime(int n) {
if (n < 2) { // 1, 0 and negatives are not prime
return false;
}
for (int d = 2; d * d <= n; d++) {
if (n % d == 0) {
return false;
}
}
return true;
}Both versions return the same results for every whole number from -3 to 29 in our run. A loop condition of d * d <= n avoids calling a square root function and the rounding questions that come with it.
An honest answer
It depends less on talent than on four specific skills, and all four can be taught. Here is what our Grade 11 students actually find hard. Nobody can honestly promise a mark in advance, and we do not.
Where a loop starts, where it stops and which index is the last one. Python’s range stops before its end value; a Java array of length 3 ends at index 2. In our classes, most marks lost on arrays come from being one position out.
Faced with an error, many students change things at random. The curriculum asks them to interpret error messages and trace programs, and that is a habit: read the message, find the line, predict, then test.
The course expects pseudocode, flow charts and a test plan. Students who type first get through short programs, then hit a wall when the project arrives.
Strand B asks students to “apply a software development life-cycle model to a software development project”, and names the phases as “problem definition, analysis, design, writing code, testing, implementation, maintenance”. In most schools that becomes a larger final project, often called the culminating task, worked on over several weeks.
What goes wrong is rarely the code. It is a project chosen too big, started too late, with no working version saved along the way. We help students cut a project to a size they can finish, then add features only once the core works.
Students who have coded before often coast for a month, then meet arrays and subprograms with the same habits that worked for ten-line programs. Students who have never coded find the first weeks steep but often build cleaner habits, because they learn tracing from the start.
A student comfortable with Grade 10 math usually finds the logic manageable. A better warning sign than any math mark is a student who cannot explain, line by line, a program they wrote last week.
Exam review
A plan of ours for the last month of the course, written for a final evaluation that is part exam and part project. Adjust it once the teacher confirms what the final evaluation actually contains.
| Weeks to go | Focus | Finished when |
|---|---|---|
| 4 | Outline audit and vocabulary | Every unit marked; every term defined with an example |
| 3 | Tracing and the classic algorithms | Five algorithms rewritten from blank files without help |
| 2 | Errors, test plans and the project core | The project runs end to end and has a written test plan |
| 1 | Timed practice and review | One full timed practice done and its mistakes logged |
After Grade 11
ICS3U opens one door inside high school and helps with a second outside it. The curriculum and the universities’ own pages say exactly how.
| ICS4U expectation | In the curriculum’s words |
|---|---|
| Prerequisite | “Introduction to Computer Science, Grade 11, University Preparation”, that is, ICS3U |
| The course in one line | “Students will use modular design principles to create complex and fully documented programs, according to industry standards.” |
| Searching | “create linear and binary search algorithms to find data in an array” |
| Sorting | “create a sort algorithm (e.g., bubble, insertion, selection) to sort data in an array” |
| Recursion | “design a simple and efficient recursive algorithm” |
| Object-oriented design | “encapsulation, inheritance, method overloading, method overriding, polymorphism” |
| Files | “read from, and write to, an external file” |
| Teamwork tools | Managing source code with “proper version control” |
| Program | Courses the page lists | Also on the page |
|---|---|---|
| University of Waterloo, Computer Science | “Six Grade 12 U and/or M courses including” Advanced Functions, Calculus and Vectors, “Any Grade 12 U English” and “One other 4U course” | Recommended course: “Grade 11 U Introduction to Computer Science”. Admission average “from the low to mid-90s”. The Admission Information Form “is required for admission”; its deadline is February 15, 2027 |
| University of Toronto St. George (TAD) | ENG4U / EAE4U and MCV4U | Supplemental application: Required |
| University of Toronto Mississauga (TMX) | ENG4U / EAE4U, MHF4U and MCV4U | MDM4U: Recommended |
| University of Toronto Scarborough (TXC) | ENG4U / EAE4U, MCV4U and MHF4U | All three campuses ask for an “Ontario Secondary School Diploma (OSSD) with six subjects at the 4U/M level, including English” |
Waterloo names ICS3U, by its title, as a recommended course for Computer Science, and lists Advanced Functions and Calculus and Vectors among the required ones. None of the three University of Toronto listings we read names a computer science course among its prerequisites. In both cases mathematics is the requirement and ICS3U is the preparation.
So a Grade 11 student serious about university computer science should plan the math sequence first: Functions in Grade 11, then Advanced Functions, and Calculus and Vectors in Grade 12. Our math tutoring for Canadian students covers that sequence.
A first-year computer science course moves quickly. Students who arrive able to trace code, test the edges and plan a program spend their first term on new ideas rather than on the habits ICS3U teaches.
Contests are the other bridge. The Canadian Computing Competition is run by the University of Waterloo’s CEMC, which says “all students must participate through their school.” Its Junior level starts with questions CEMC describes as “basic loops and conditions”, very like ICS3U. Our CCC preparation page explains the format.
Sources, read 22 October 2026: The Ontario Curriculum, Grades 10 to 12: Computer Studies (2008) (ICS4U course pages); University of Waterloo, Computer Science and its Admission Information Form page; University of Toronto, Computer Science; CEMC’s How contests work and CCC pages. Requirements change between admission cycles, so check the universities’ pages in the year your teen applies. We are not connected with either university or with CEMC.
Online, summer school and the credit
Many searches for ICS3U online or ICS3U summer school come from families who want the credit itself. That part we do not offer, and it is better to say so clearly.
An ICS3U credit is granted by the school that teaches and evaluates the course: the student’s own school, a board’s summer or night school, or an Ontario credit provider. Modern Age Coders is none of these. We teach alongside the student’s school course and do not grant Ontario credits.
For the diploma, computer studies counts in the compulsory-credit choice groups on Ontario’s graduation requirements page: in Group 3 for students who started Grade 9 in 2023 or earlier, and in the STEM-related course group for later starters (page updated September 02, 2026).
Families come to us when a student is taking ICS3U at school, online or in summer school and wants a second teacher: someone to trace their code with them, explain an error, review the plan for the project or run a practice exam. We work from the student’s own assignments and outline.
Some families start the summer before Grade 11, so that the first unit of ICS3U is a second look rather than a first. A summer course with a credit attached moves fast, and the same groundwork helps there too.
| Period | Eastern time is | India time is ahead by |
|---|---|---|
| Until 1 November 2026 | UTC-4 | 9 hours 30 minutes |
| 1 November 2026 to 14 March 2027 | UTC-5 | 10 hours 30 minutes |
| From 14 March 2027 | UTC-4 | 9 hours 30 minutes |
Most of Ontario is on Eastern time; parts of the northwest keep a different clock, so families there should confirm times in their own zone. The clocks go back on 1 November 2026 and forward on 14 March 2027, so confirm the class time with us again in the week of each change.
Where your teen is now
Our own stages, drawn from teaching students through their first real programming course.
| Stage | What it looks like |
|---|---|
| 1. Copier | Runs examples from class and changes the numbers, but cannot yet say why a line is there |
| 2. Tracer | Predicts the output of a short program on paper before running it, and is usually right |
| 3. Planner | Writes pseudocode and a test plan first, then subprograms with parameters |
| 4. Ready for ICS4U | Starts from a blank file, debugs without guessing, and explains any line of their own code |
Ask your teen to explain one program from this week out loud. A student who can walk through it line by line is further along than their latest mark may show.
Stage 2 is where outside help changes most. Tracing is slow at first, and a patient second teacher makes it a habit instead of a chore.
Predict before you press Run. Write what you expect, then compare. The gap is where you learn.
Keep an error log: the message, the line, the cause, the fix. By exam time it is the most useful page you own.
The catalogue
Each one is taught live online by a regular teacher, in a batch or one to one.
ICS / SCH / 01
Logic, data structures and the algorithms ICS4U asks for.
Open the syllabusICS / SCH / 02
Saved versions for every project milestone.
Open the syllabusICS / SCH / 03
A third language, and a fast one.
Open the syllabusICS / CON / 01
Timed problems in the CEMC contest format.
Open the syllabusICS / CON / 02
Harder problem sets once the CCC feels easy.
Open the syllabusICS / CON / 03
Plan, build and present with a team.
Open the syllabusICS / NXT / 01
One of the research areas strand D names.
Open the syllabusICS / NXT / 02
Real data sets, cleaned and charted in Python.
Open the syllabusICS / NXT / 03
Websites and browser games friends can open.
Open the syllabusHow classes run
Weekdays or weekends, flexible: choose your batch, or for a very personalised plan choose 1-on-1 at your convenience, weekend mornings or weekdays.
Weekdays
After school in Ontario time, set when you choose the batch.
Weekends
Weekend mornings in Eastern time suit many Grade 11 timetables.
1-on-1
Around tests, project deadlines and the exam weeks.
The same person who knows the outline.
Whatever the class uses, usually Python or Java.
Explained, never written for them.
Shared screen, shared trace table.
Practice timed to the school dates.
Fifteen to twenty, or just your teen.
Student work
Projects by learners who once stood where an ICS3U student stands now. The student labs page has more.

AI and ML
An AI nutrition coach that reads what you eat and works you toward a target.

AI and ML
A chatbot that answers mathematics and programming questions, built and deployed by a student.

AI and ML
An assistant that helps a young person recognise unsafe situations online.

Web app
A weather forecasting site with live conditions for any location.
Fees
The first class costs nothing. After it, families pay a monthly fee for eight live classes a month, with the currency code printed beside it, no term contract, and you can stop at the end of any month.
Free first class
Free
no card required
Group batch
$100 USD
a month, eight live classes
One to one
$150 USD
a month, eight live classes
What families say
Families and students on Google, quoted as written.
★★★★★
"The one step solution for my son. Modern Age Coders make learning coding so simple that kids love it. The teachers explain complex concepts clearly with practical exercises and interactive content."
Ria Mukherjee
Parent
★★★★★
"Modern Age Coders has been a game-changer for me. I struggled to grasp IT concepts and coding before joining, but their classes transformed everything. I can now confidently write complex programs with ease."
Samriddha Mondal
Student
★★★★★
"One of the most wonderful education centres out there. Education is not limited to school syllabus but focuses on skill development."
Vansh Agarwal
Student
★★★★★
"My child Dhairya is really enjoying the Modern Age Coders classes. This is his first online class and he eagerly looks forward to it. I can already see his improvement, and the teachers are very cooperative."
Sonam Oswal
Parent of Dhairya
★★★★★
"Modern Age Coders have wonderful teachers who teach in a clear, easy and practical way. The teacher boosts students' confidence and inspires them to learn without hesitation."
Sonu Goyal
Parent
★★★★★
"I highly recommend this computer coding class! The teachers are incredibly knowledgeable and passionate about coding."
Ritu Kedia
Parent
Questions from Ontario families
ICS3U is Introduction to Computer Science, Grade 11, University Preparation, an Ontario course described in the 2008 Computer Studies curriculum for Grades 10 to 12. It covers programming with data types, one-dimensional arrays, control structures and subprograms, software development in teams, computer systems, and topics in computer science research and careers.
No. We teach alongside the student's school course and do not grant Ontario credits. Families who need the ICS3U credit take the course at school, at a board's summer or night school, or through an Ontario credit provider, and use our classes for the teaching and practice around it.
It is manageable for most students who keep up, but four things catch people: loop bounds and array indexes, debugging without guessing, planning before typing, and the larger project near the end. All four are skills that improve with practice. Nobody can honestly promise a mark in advance.
Either, depending on the school. The 2008 curriculum says the programming language and the order of topics are left to the teacher's professional judgement. We teach in whichever language your teen's class uses.
None. The 2008 curriculum lists no prerequisite for ICS3U, and the current Ontario curriculum website shows none either. ICS3U is itself the prerequisite for ICS4U, the Grade 12 university preparation course.
ICS3U is the university preparation course, Introduction to Computer Science, and leads to ICS4U. ICS3C is the college preparation course, Introduction to Computer Programming, which focuses on programming skills and leads to ICS4C. Neither has a prerequisite and each is worth one credit.
The 2008 curriculum sets 70 per cent of the grade from evaluations during the course and 30 per cent from a final evaluation near the end, such as an examination, a performance or another suitable method. Each school decides the exact form, so ask the teacher what the final evaluation contains.
On 22 October 2026, Waterloo listed Grade 11 U Introduction to Computer Science as a recommended course for Computer Science, with Advanced Functions and Calculus and Vectors among the required courses. The University of Toronto pages listed English and math courses for all three campuses and named no computer science course among the prerequisites.
ICS2O, Introduction to Computer Studies, is described in the 2008 curriculum document. The current Ontario curriculum website lists ICD2O, Digital Technology and Innovations in the Changing World (2023), as its Grade 10 computer studies course and does not list ICS2O. Neither source says one replaced the other.
Start four weeks out: confirm what the final evaluation contains, audit the school course outline, trace short programs by hand every day, rewrite the classic array algorithms from a blank file, practise naming syntax, logic and run-time errors, and finish the project before polishing it.
Weekdays or weekends, flexible: choose your batch, or for a very personalised plan choose 1-on-1 at your convenience, weekend mornings or weekdays. Times are agreed in Eastern time for most of Ontario; the clocks change on 1 November 2026 and 14 March 2027, so confirm the class time again in those weeks.
The first class is free. After that, families pay a monthly fee and can stop at the end of any month. The fees section on this page shows the current figure for a batch and for one to one.
Elsewhere on this site
More for Ontario students and families.
Every page we have written for Canadian families.
Live classes for Ontario learners of every age.
The Waterloo programming contest, explained.
Gauss, Pascal, Euclid and the rest of the CEMC set.
Functions, Advanced Functions, Calculus and Vectors.
A method for finding the line that is wrong.
Why Python cares where a line starts.
The ICS4U idea that ICS3U students ask about early.
What a live class with us looks like, minute by minute.
Start here
Tell us the school language, the unit your teen is on and the next test or deadline. The first class starts from their current assignment, not from a script.
Prefer to look first? Our teaching method is written out in full, and the companion course syllabus lists every week of the plan.
WhatsApp us · +91 91233 66161 · connect@modernagecoders.com
Classes are live on video with teachers who work from India, so nobody visits your home and there is no centre to drive to. WhatsApp is the quickest way to reach us from Ontario.
A priority demo is a full class of about 45 to 60 minutes. After the class the mentor sends a written skill report and a personal learning roadmap on WhatsApp. If you enrol, the demo fee is adjusted against your first month's fee. Share your demo Order ID with us on WhatsApp and we take it off.
Book a priority demo