Ontario · Grade 11 · ICS3U in Python or Java

ICS3U computer science help, 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

Three courses for a Grade 11 computer science student

The companion course follows the school’s own outline. The two language courses go deeper for students who want more than the course asks.

The Ontario curriculum

What ICS3U covers, strand by strand

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.

ICS3U strands and overall expectations, quoted from the 2008 Ontario curriculum document (read 22 October 2026)
StrandWhat the overall expectations sayWhat 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

The details students meet most

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”.

Problem solving is in the curriculum by name

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.

Why every school’s course outline looks different

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.

How the final mark is built

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

ICS3U vs ICS3C, and what changed in the Grade 10 course list

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 and ICS3C compared, from the 2008 Ontario curriculum document (read 22 October 2026)
ICS3UICS3C
Full titleIntroduction to Computer Science, Grade 11, University PreparationIntroduction to Computer Programming, Grade 11, College Preparation
DestinationUniversity 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”
PrerequisiteNoneNone
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.”
ArraysNamed in the first overall expectation: one-dimensional arraysThe 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 strandD. Topics in Computer Science (research areas, careers)D. Computers and Society, including procedures for safe computing
Leads toICS4U, which lists ICS3U as its prerequisiteICS4C, which lists ICS3C as its prerequisite
CreditOne creditOne credit
The Grade 10 listing, two facts side by side (Ontario curriculum website content service and the 2008 document, read 22 October 2026)
CourseWhere it is listedIssuedHow it is organized
ICD2O, Digital Technology and Innovations in the Changing WorldThe current Ontario curriculum website, which lists five computer studies courses: ICD2O, ICS3U, ICS3C, ICS4U and ICS4C2023, Grade 10, OpenThree strands: Computational Thinking and Making Connections; Hardware, Software, and Innovations; Programming
ICS2O, Introduction to Computer StudiesThe 2008 curriculum document. It is not on the current website’s computer studies list2008, Grade 10, OpenThree strands: Understanding Computers; Introduction to Programming; Computers and Society

Choosing between U and C

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.

What the Grade 10 change means for a family

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

ICS3U in Python or in Java: what changes for the student

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.

The same ICS3U ideas in Python and Java (ours; every example was run in Python 3.13 and Java 22)
IdeaPythonJava
Running a programRun the file; the interpreter reads it line by lineCompile with javac, then run with java; nothing runs until the whole file compiles
A variablecount = 0, and the type follows the valueint count = 0;, with the type declared and fixed
A one-dimensional arrayA list: marks = [72, 85, 64], which can growint[] 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 indexesfor i in range(len(marks)):for (int i = 0; i < marks.length; i++)
Dividing 7 by 27 // 2 is 3 and 7 / 2 is 3.57 / 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 blockIndentationBraces, with a semicolon after each statement
First errors students meetIndentationError, NameError and TypeError, mostly while the program runscannot find symbol, missing semicolons and type mismatches, before it runs

If the school teaches Python

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.

If the school teaches Java

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

One ICS3U problem, solved in Python and Java

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.

  1. Restate the output. Two numbers: a length and a start day. Writing this down first stops the classic half-answer that reports the length and forgets the start.
  2. Decide what to remember while walking the array once. The current run (how long, and where it began) and the record so far (how long, and where it began). Four variables, each with one job.
  3. Write the rule for one day. If the day meets the goal, the current run grows by one, and if it was 0 it begins today. If the day misses the goal, the current run drops to 0.
  4. Decide when to update the record. Every time the current run grows, compare it with the record. Updating only when a run breaks misses a run that lasts to the final day, which is the bug in practice question 7.
  5. Decide the tie rule in code. Use strictly greater than. An equal run never replaces the record, so the earlier run wins, as the problem asks.
  6. List the extreme cases before running anything. An empty log, a log where no day qualifies, a single day exactly at the goal, a run that ends on the last day, and two runs of equal length.
Python · longest run (ours)python
# 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.

Java · longest run (ours)java
// 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.

Trace table for the sample log with goal 30 (ours, generated by instrumenting the Python version)
iDayMinutesMeets goal?Run lengthRun startRecord lengthRecord start
0135yes1111
1240yes2121
2310no0121
3430yes1421
4545yes2421
5650yes3434
6720no0434
7830yes1834
8930yes2834
91030yes3834
Our test plan: expected against actual, both languages (ours; all six pass)
Input log (goal 30)ExpectedWhy this case
empty0 days, start 0Nothing to loop over: the method must still return safely
10, 200 days, start 0No day qualifies
301 day, start 1Exactly at the goal: tests at least, not more than
10, 30, 302 days, start 2The run ends on the last day
30, 30, 10, 30, 302 days, start 1A tie: the earlier run must win
35, 40, 10, 30, 45, 50, 20, 30, 30, 303 days, start 4The sample log, with a tie at the end

What the trace table shows

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.

Why this is worth an hour

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

Ten ICS3U practice questions

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.

Question 1 · trace · Pythonpython
total = 0
for k in range(1, 8, 2):
    total = total + k
print(total)

What does this print? List every value k takes.

Question 2 · trace · Javajava
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.

Question 3 · trace · Pythonpython
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?

Question 4 · trace · Javajava
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?

Question 5 · debug · Javajava
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?

Question 6 · debug · Pythonpython
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.

Question 7 · debug · Pythonpython
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

Full answers to the ten questions

Each answer says what the program does and why, because the reasoning is what earns marks. Every program was run to confirm the output.

  1. 16. 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.
  2. 3 1 3.5. With two ints, 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.
  3. 42 15 23. 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].
  4. 9. The trace of n is 12, 6, 3, 10, 5, 16, 8, 4, 2, 1, with steps counting each change, so steps ends at 9. Tracing a while loop is about the condition: the loop body runs only while n is not 1, so the final 1 is never processed.
  5. A run-time error. With <=, 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.
  6. It prints 0; it should print -3. This is a logic error: the program runs without complaint and gives a wrong answer. Starting 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).
  7. It prints 0; it should print 3. The record is only updated when a run breaks, and this run never breaks: it lasts to the last day. Either add the same comparison once more after the loop (if 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.
  8. It returns 1. Only 90 is strictly greater than 72; both 72s are equal, so they do not count. The test that matters is a value equal to the limit, because that is where greater-than and greater-than-or-equal disagree. Both versions are in the code below.
  9. See the code below. Numbers below 2 are not prime. For anything else, try divisors from 2 while the divisor squared is at most n: if n had a factor larger than its square root, its partner factor would be smaller and already tried. Test with -3, 0, 1 (not prime), 2 (the smallest prime and the only even one), 9 (a square, the edge of the loop), 29 (prime) and a large prime. Our run listed 2, 3, 5, 7, 11, 13, 17, 19, 23 and 29 as the primes below 30.
  10. (a) A one-dimensional array or list of 30 numbers: one pass to total them, a second pass to count those above the average. (b) At ICS3U level, two parallel arrays, one of words and one of counts, with a linear search for each word; a Python dictionary or a Java HashMap does the same job faster and is worth learning next. (c) Parallel arrays of names and marks work if every swap during sorting moves both arrays together; in ICS4U the cleaner answer is one array of student objects, which the Grade 12 curriculum describes as arrays of “compound data types”.
Answer 8 · Pythonpython
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))   # 1
Answer 8 · Javajava
public 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;
}
Answer 9 · Pythonpython
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 True
Answer 9 · Javajava
public 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

Is ICS3U hard?

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.

Loops and indexes

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.

Debugging without guessing

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.

Planning before typing

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.

The project near the end

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.

Who finds it easier, and who finds it harder

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

An ICS3U final exam review plan

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.

  1. Find out what the final evaluation is. Ask whether there is a written exam, a coding exam on the computer, a project, or a mix, and how much each part is worth. The curriculum allows an examination, performance, essay or other method.
  2. Audit the course outline. List every unit from the school’s own outline and mark each one solid, shaky or lost. Start revision with the shaky ones, not the lost ones: they move fastest.
  3. Rebuild the vocabulary. Data type, array, index, bound, parameter, return value, local and global scope, syntax, logic and run-time error. Write a one-line definition and a two-line example for each.
  4. Trace by hand every day. Three short programs a day, on paper, with a trace table, before running them. Written questions often ask students to read code, and tracing is how you read it.
  5. Rewrite the classic algorithms from a blank file. Total, highest or lowest, count, linear search, then inserting into a sorted array. No notes, no copying, then compare with your class versions.
  6. Practise the three kinds of error. Take a working program, plant one syntax, one logic and one run-time error, and swap with a classmate. Naming the kind of error is often its own exam question.
  7. Write one complete test plan. For one of your programs: normal values, boundary values and invalid input, with expected results written before you run it.
  8. Finish the project before polishing it. Keep a saved working version at every milestone, write the documentation as you go, and stop adding features a week before it is due.
  9. Sit one timed practice under exam conditions. Use your own old tests and our ten questions above, at the real length, with no computer for the written part.
  10. Use the last day for review only. Reread your error log and trace tables. No new topics the night before.
A four-week countdown to the ICS3U final evaluation (ours)
Weeks to goFocusFinished when
4Outline audit and vocabularyEvery unit marked; every term defined with an example
3Tracing and the classic algorithmsFive algorithms rewritten from blank files without help
2Errors, test plans and the project coreThe project runs end to end and has a written test plan
1Timed practice and reviewOne full timed practice done and its mistakes logged

After Grade 11

From ICS3U to ICS4U and to university computer science

ICS3U opens one door inside high school and helps with a second outside it. The curriculum and the universities’ own pages say exactly how.

What ICS4U adds after ICS3U, quoted from the 2008 Ontario curriculum document (read 22 October 2026)
ICS4U expectationIn 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 toolsManaging source code with “proper version control”
Computer science admission for Ontario students, as listed on the universities’ own pages on 22 October 2026
ProgramCourses the page listsAlso 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 MCV4USupplemental application: Required
University of Toronto Mississauga (TMX)ENG4U / EAE4U, MHF4U and MCV4UMDM4U: Recommended
University of Toronto Scarborough (TXC)ENG4U / EAE4U, MCV4U and MHF4UAll three campuses ask for an “Ontario Secondary School Diploma (OSSD) with six subjects at the 4U/M level, including English”

What the two tables say together

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.

Why ICS3U still matters

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

ICS3U online and in summer school: help with the course, not 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.

Where the credit comes from

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).

Where we fit

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.

The Ontario clock for live classes, 2026 to 2027 (Eastern time, from the IANA time zone database 2026e; our teachers work on India time, UTC+5:30)
PeriodEastern time isIndia time is ahead by
Until 1 November 2026UTC-49 hours 30 minutes
1 November 2026 to 14 March 2027UTC-510 hours 30 minutes
From 14 March 2027UTC-49 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

Four stages from first program to ready for ICS4U

Our own stages, drawn from teaching students through their first real programming course.

Stages of a Grade 11 programmer (ours)
StageWhat it looks like
1. CopierRuns examples from class and changes the numbers, but cannot yet say why a line is there
2. TracerPredicts the output of a short program on paper before running it, and is usually right
3. PlannerWrites pseudocode and a test plan first, then subprograms with parameters
4. Ready for ICS4UStarts from a blank file, debugs without guessing, and explains any line of their own code

For parents

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.

For students

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

Nine more courses for Ontario high school coders

Each one is taught live online by a regular teacher, in a batch or one to one.

I

Alongside the school course

Grades 10 to 12

ICS / SCH / 01

Problem solving for teens

Logic, data structures and the algorithms ICS4U asks for.

Open the syllabus

ICS / SCH / 02

Git and GitHub for teens

Saved versions for every project milestone.

Open the syllabus
II

Contests and challenges

Grades 9 to 12

ICS / CON / 01

CCC Junior and Senior preparation

Timed problems in the CEMC contest format.

Open the syllabus

ICS / CON / 02

Competitive programming

Harder problem sets once the CCC feels easy.

Open the syllabus

ICS / CON / 03

Hackathon preparation

Plan, build and present with a team.

Open the syllabus
III

Where computer science goes next

Teens

ICS / NXT / 01

AI and machine learning for teens

One of the research areas strand D names.

Open the syllabus

ICS / NXT / 02

Data science for teens

Real data sets, cleaned and charted in Python.

Open the syllabus

ICS / NXT / 03

JavaScript for teens

Websites and browser games friends can open.

Open the syllabus

How classes run

Live classes that follow the school term

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.

One teacher all term

The same person who knows the outline.

The school’s language

Whatever the class uses, usually Python or Java.

Their own assignments

Explained, never written for them.

Tracing on screen

Shared screen, shared trace table.

Exam weeks planned

Practice timed to the school dates.

Batch or one to one

Fifteen to twenty, or just your teen.

Student work

What our students have built

Projects by learners who once stood where an ICS3U student stands now. The student labs page has more.

NutriLife AI nutrition coach project screenshot

AI and ML

NutriLife

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

by Bhavya · Open it

Misti AI chatbot for maths and coding screenshot

AI and ML

Misti

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

by Harshit · Open it

GuardianX AI internet safety assistant screenshot

AI and ML

GuardianX

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

by Vivaan · Open it

SkyCast weather forecast application screenshot

Web app

SkyCast

A weather forecasting site with live conditions for any location.

by Krish

Fees

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

  • A free first class
  • Bring this week’s assignment
  • No card needed
Book it

Group batch

$100 USD

a month, eight live classes

  • Fifteen to twenty students
  • One regular teacher
  • Choose your batch
  • Paid monthly
Start here

One to one

$150 USD

a month, eight live classes

  • A teacher for your teen alone
  • Times around school deadlines
  • Planned from their own course
Enquire

What families say

Rated 4.9 across 547 Google reviews

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: common questions

What is ICS3U?

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.

Do you grant the ICS3U credit?

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.

Is ICS3U hard?

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.

Does ICS3U use Python or Java?

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.

What is the prerequisite for ICS3U?

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.

What is the difference between ICS3U and ICS3C?

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.

How is the ICS3U final mark worked out?

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.

Do I need ICS3U for computer science at Waterloo or U of T?

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.

What happened to ICS2O?

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.

How should my teen study for the ICS3U final exam?

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.

What times are classes for Ontario families?

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.

How much does ICS3U help cost?

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

Related pages

More for Ontario students and families.

Coding classes in Canada

Every page we have written for Canadian families.

Coding classes in Ontario

Live classes for Ontario learners of every age.

CCC preparation

The Waterloo programming contest, explained.

Waterloo math contests

Gauss, Pascal, Euclid and the rest of the CEMC set.

Online math tutor for Canada

Functions, Advanced Functions, Calculus and Vectors.

How to debug code

A method for finding the line that is wrong.

Python IndentationError

Why Python cares where a line starts.

Recursion for beginners

The ICS4U idea that ICS3U students ask about early.

How we teach

What a live class with us looks like, minute by minute.

Start here

Book a free first class

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.

The first class is free, and we never ask for card details to book it.

Want a class sooner? Book a priority demo

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

Keep exploring Modern Age Coders

Related courses and guides

Learn more

Free resources

From the blog

Start here

Free classPriority demoCall us