How does a Richmond Hill teenager learn Python and AI properly, outside school hours?
Modern Age Coders runs live online Python and AI classes for Richmond Hill teens aged 13 to 18, in a group of fifteen to twenty or with one private teacher. Most begin with Python for Teens, then branch into machine learning, contest training for the CCC, or support beside a school ICS3U course. Classes run on Eastern time; the first one is free.
A Richmond Hill student meets code earlier than many parents expect. Ontario’s Grade 9 math course asks for it, the Grade 10 digital technology course names artificial intelligence outright, and two university-preparation computer science courses follow in Grades 11 and 12. What school cannot always give is time: time to write long programs, get them wrong and find out why. That is the gap our lessons fill. Below we set out the Ontario expectations a teen here will meet, quoted from the ministry and EQAO, how the CCC Junior paper is built according to CEMC, which AI tools a 13 to 17 year old may use under each company’s own rules, and a classifier our students build from York Region’s street tree records along Yonge Street, Bayview Avenue and the other regional roads.
Facts last verified 22 October 2026. Teaching is online; no Richmond Hill branch is claimed.
Each matches a point in an Ontario timetable or the CEMC contest year. The free class decides which one fits, not the age on a form.

Variables to functions, lists, dictionaries and files: enough Python to page through a public data service and turn nine thousand tree records into a table.
See the syllabus
Classification and regression with honest testing. The nearest-neighbours model further down this page is one early lesson from it.
See the syllabus
Timed sets of CCC-style problems we write ourselves, marked the way the online grader marks a submission.
See the syllabus
Explanations, extra practice and project feedback while the student takes ICS3U or ICS4U at school. It sits next to the credit; it is not the credit.
See the syllabusBrowse the course atlas for more than one hundred options and use the coding roadmap to check prerequisites.
The four we are known for
These run underneath everything above. Every one is live and online, placed by ability rather than by age, and the first class is free.

Python, web and AI projects where the learner still owns the thinking.
See the syllabus
Automate the work you already do, then let AI carry part of it.
See the syllabus
Train a model, read what it learned, and be able to say why it is wrong.
See the syllabus
Run AI coding agents on real work without losing control of the codebase.
See the syllabusThe wording in the middle column comes from the Ontario curriculum service and EQAO as we read them on 22 October 2026. The right-hand column is our own reading of what each line means at home.
| Grade and course | What the official text says | Why it matters at home |
|---|---|---|
| Grade 9, MTH1W | Students “create code by decomposing situations into computational steps in order to represent mathematical concepts and relationships” | Breaking a problem into steps is the core programming habit, and it starts inside math class |
| Grade 9, EQAO math | Window 12 January to 5 February 2027; “Results of this assessment are to be included as part of a student’s final course mark” | The provincial math test lands three weeks before the CCC, so January is a busy month |
| Grade 10, ICD2O (2023, Open) | “Students will learn and apply coding concepts and skills to build hands-on projects and investigate artificial intelligence, cybersecurity, and other emerging digital technologies” | The first school course that names AI; it surveys the field rather than training models |
| Grade 11, ICS3U or ICS3C (2008) | No prerequisite for either in the ministry table | A teen can start computer science in Grade 11 with no earlier course on the transcript |
| Grade 12, ICS4U (2008) | “Students will use modular design principles to create complex and fully documented programs”; ICS3U comes first | Large programs split into functions and modules, with documentation another person can read |
Read top to bottom, the table describes a ramp. In Grade 9 a student edits and writes short pieces of code to model math. By Grade 12 the same student is expected to plan a program in parts and document it so that a stranger could maintain it. Nothing in that ramp is out of reach for a teen who writes Python regularly, but the jump from MTH1W snippets to an ICS4U project is steep if Grade 10 and Grade 11 pass with little practice. We see that most often with students who took ICD2O as a survey course and then met ICS3U as their first experience of a program longer than a page.
We ask Grade 9 students to say what a loop will print before they run it. That habit carries the MTH1W coding strand and makes the EQAO questions that involve code far less mysterious.
ICD2O talks about AI and cybersecurity; our Grade 10 students write the small programs behind those words, such as a password checker or a first classifier, so the vocabulary has code underneath it.
ICS3U and ICS4U reward planning. Our companion course works on design before syntax: what the functions are, what each one takes and returns, and how to test a part before the whole exists.
Our lessons run beside the school timetable, and we do not grant Ontario credits: MTH1W, ICD2O, ICS3U and ICS4U credits come only from the school. Modern Age Coders has no link to the Ontario Ministry of Education, to EQAO or to any York Region school board.
The Canadian Computing Competition is run by the University of Waterloo’s CEMC. Figures and quotes below are CEMC’s own, read on 22 October 2026; the advice column is ours.
| Part of the paper | What CEMC publishes | How we prepare for it |
|---|---|---|
| Questions 1 and 2 | “(e.g. basic loops and conditions)” | Fluency drills: read input, loop, decide, print, with no time lost on syntax |
| Questions 3 and 4 | “(e.g. some combination of loops, conditions and counting)” | Careful counting problems of our own, checked against hand-worked small cases |
| Question 5 | “(e.g. recursion, two-dimensional arrays, efficient/insightful algorithms)” | Grids, recursion and the first ideas about running time |
| Length and scoring | “Time allowed for completion is 3 hours”; “Score out of 75” | Full three-hour mocks, never just single problems |
| 2026 Junior results | Mean 42.65 out of 75 across 3421 Junior contestants (CEMC results table) | A first-time writer should aim to finish the first three questions cleanly |
Two things in that table are worth a parent’s attention. First, the Junior paper is not a test of cleverness on question one; CEMC says plainly that the opening questions are about basic loops and conditions, which a teen who has written Python for a few months can do. Second, the 2026 Junior mean sat a little above half marks, and CEMC states that “Every participant scoring in the top 25% of all competitors receives a Certificate of Distinction.” A Richmond Hill student who arrives in February 2027 able to solve the first three questions without errors is already writing a respectable paper. CEMC lists the 2027 CCC for Wednesday 17 February 2027.
CEMC writes that “It is not possible for students to individually register for a contest”. A teacher orders the paper. If a student’s own school does not, CEMC suggests that “students can look for another local school that will allow them to join as a participant”.
For writers at schools in Canada, CEMC’s official status goes to students who were “born on or after July 1, 2007”. Younger Grade 9 and 10 students who start early simply have more years of practice ahead of them.
CEMC’s past papers stay in CEMC’s free archive, where students can read them; our lessons run on problems we write, never on CEMC problems or solutions. See our CCC Junior guide for the details.
York Region publishes a record for each street tree it owns or maintains along its regional roads, including in Richmond Hill. Our students download the Richmond Hill rows and teach a computer to guess each tree’s height band. All figures in this section come from our own code, not from the Region.
| Model | How it guesses a test tree’s height band | Share of the 1,880 test trees it gets right |
|---|---|---|
| Baseline | Always says “2 - 5 metres”, the most common band in the training trees | 63.9 per cent |
| 1 nearest neighbour | Copies the band of the single most similar training tree by trunk diameter and planting year | 72.3 per cent |
| 15 nearest neighbours | Takes a vote among the 15 most similar training trees | 76.8 per cent |
| 101 nearest neighbours | Takes a vote among the 101 most similar training trees | 74.5 per cent |
The program below is the whole exercise in standard-library Python. It asks the Region’s map service for the Richmond Hill rows 2,000 at a time, keeps the three fields it needs, shuffles the trees with a fixed seed so the result can be repeated, holds back one tree in five for testing, and scores two models. Run on 22 October 2026, it printed the baseline and the 15-neighbour figures in the table:import json, random, urllib.request, urllib.parse
from collections import Counter
URL = ("https://ww8.yorkmaps.ca/arcgis/rest/services/OpenData/"
"Biodiversity/MapServer/0/query?")
ask = {"where": "MUNICIPALITY='Richmond Hill'", "returnGeometry": "false",
"outFields": "CURRENTDBH,YEARPLANTED,TREEHEIGHT", "f": "json",
"orderByFields": "OBJECTID", "resultRecordCount": 2000}
trees, ask["resultOffset"] = [], 0
while True:
reply = json.loads(urllib.request.urlopen(URL + urllib.parse.urlencode(ask)).read())
if not reply["features"]:
break
for f in reply["features"]:
a = f["attributes"]
if a["TREEHEIGHT"]:
trees.append((int(a["CURRENTDBH"]), a["YEARPLANTED"], a["TREEHEIGHT"]))
ask["resultOffset"] += len(reply["features"])
random.seed(2026)
random.shuffle(trees)
cut = len(trees) * 4 // 5
train, test = trees[:cut], trees[cut:]
def guess(dbh, year, k=15):
near = sorted(train, key=lambda t: ((t[0] - dbh) / 10) ** 2 + ((t[1] - year) / 10) ** 2)
return Counter(t[2] for t in near[:k]).most_common(1)[0][0]
common = Counter(t[2] for t in train).most_common(1)[0][0]
base = sum(t[2] == common for t in test) / len(test)
knn = sum(guess(t[0], t[1]) == t[2] for t in test) / len(test)
print(len(trees), "trees,", len(train), "train,", len(test), "test")
print("always", repr(common), "->", round(100 * base, 1), "% right")
print("15 nearest neighbours ->", round(100 * knn, 1), "% right")
The diameter field, CURRENTDBH, is stored as text, so every value comes back as a string like “5” and has to be turned into a number. The height is not a number at all but a band such as “2 - 5 metres”, which makes this a classification problem rather than a regression.
Because nearly two thirds of the test trees sit in one band, a model that always says “2 - 5 metres” already scores 63.9 per cent. Any model worth keeping has to clear that line, and the 15-neighbour vote clears it by about thirteen points.
One neighbour copies noise from a single odd record; 101 neighbours blur real differences. Fifteen did best on this split. Students then reshuffle with a new seed to see whether fifteen still wins or whether that was luck.
Accuracy hides who gets ignored. Of the 57 test trees recorded as “0 - 2 metres”, the 15-neighbour model got only 16 right and called 38 of them “2 - 5 metres”. Of 150 trees in the “10 - 15 metres” band it got 61 right and placed 70 one band lower. Small classes get outvoted by big ones. That is a real lesson in machine learning, not a bug in the student’s code, and it is why we always print the breakdown beside the headline number.
Three more honest notes. A diameter of 5 appears on 2,816 of the 9,505 rows, mostly on trees planted in recent years, and a handful of rows record round values such as 100; the field does not state its unit, so we do not guess one. Planting years run from 1920 to 2026, with 170 rows planted in 2026 itself. And the file covers only the trees the Region owns or maintains: its own description says it holds street trees “within regional road right-of-ways”, with only “partial data available for Regional owned street trees in rural areas”, so it is not a census of every tree in the city. The commonest species in the Richmond Hill rows is the Ivory Silk Lilac (925 rows), ahead of the Kentucky Coffee Tree (673), and Bayview Avenue carries more rows than any other road (1,751). We use it under the York Region Open Data Licence, whose terms say users may “Use the Information commercially”; the Region suggests the credit “Contains public sector information made available under The Regional Municipality of York’s Open Data Licence”. The City of Richmond Hill’s own map layers carry no reuse licence, which is why we used the regional file. Nothing on this page is endorsed by York Region.
A tool’s minimum age is set by the company that runs it, and contest rules by the organiser. Each line below comes from the organisation’s own page, read on 22 October 2026.
| Tool or setting | What the organisation says | Our practice with 13 to 17 year olds |
|---|---|---|
| ChatGPT (OpenAI Help Center, “Is ChatGPT safe for all ages?”) | “ChatGPT is not meant for children under 13, and we require that children ages 13 to 18 obtain parental consent before using ChatGPT.” | Optional, only after a parent agrees in writing; no lesson depends on it |
| Claude, under Anthropic’s consumer terms dated Oct 8, 2025 | Users “must be at least 18 years old” | Not used and not suggested to anyone under 18 |
| Any AI helper during the CCC (CCC Online Grader rules) | Banned outright; the rules name “generative AI such as CoPilot or ChatGPT” | Contest practice happens with every assistant switched off |
For a Grade 9 or 10 student the practical question is not which chatbot is cleverest but what happens to their own thinking when one is always open. The tree model above is a good test. A chatbot could write the loop that fetches the pages. It would not notice that the diameter arrives as text, that the smallest trees are being outvoted, or that the file stops at the regional road allowance. Those are the observations that make the work the student’s own, and they come only from reading the data and the output line by line. So in our classes a teen writes and explains the code first. Where a parent has agreed to ChatGPT, it appears later as something to check against, never as the author.
OpenAI asks for a parent’s consent from 13 to 18. We put that decision with the family, say in advance which lessons could use the tool, and keep every lesson complete without it.
Anthropic limits Claude to adults, which keeps it out of every lesson we teach to under-18s. Our agentic coding course is for adults for the same reason, and teens are not placed in it.
We explain ideas and review a student’s reasoning. We do not write marked school work, and we would rather a teen hand in a smaller program they understand than a polished one they do not.
Richmond Hill moves its clocks back on 1 November 2026 and forward again on 14 March 2027, while India keeps one clock all year. The sample hours below show the gap and are not a published timetable.
| Dates | Richmond Hill offset | India ahead by | Sunday 9 to 10:30 am in Richmond Hill | Weekday 7 to 8:30 pm in Richmond Hill |
|---|---|---|---|---|
| Late October 2026, before the change | UTC-4 | nine and a half hours | 6:30 to 8 pm in India | 4:30 to 6 am the next day in India |
| 1 November 2026 to 14 March 2027 | UTC-5 | ten and a half hours | 7:30 to 9 pm in India | 5:30 to 7 am the next day in India |
| Spring and summer 2027, from 14 March | UTC-4 | nine and a half hours | 6:30 to 8 pm in India | 4:30 to 6 am the next day in India |
Every confirmation names the Richmond Hill time, never India time alone. Before each clock change we send the new times again, so the November and March weekends cost nobody a class.
Richmond Hill numbers use the 289, 365, 742 and 905 area codes, shared across the belt of cities around Toronto. Type all ten digits in the form below, without a leading 1.
The Grade 9 EQAO math window ends on 5 February 2027 and the CCC follows on 17 February. Students who want both get a plan in December that spaces the practice instead of stacking it.
The ages are rough. Placement follows what the student can already program, which the free class finds out in about twenty minutes.
Input, output, loops and lists in complete programs, plus the predict-before-you-run habit that MTH1W coding rewards.
Python for TeensCounting, searching and two-dimensional grids, with a CCC Junior attempt for students who want one.
Problem Solving for TeensCCC Junior and Senior Preparation (Canadian Computing Competition)Real public data, cleaned and tested: the York Region trees first, then larger sets and proper train and test splits.
Data Science for TeensAI and Machine Learning for TeensSupport beside ICS3U and ICS4U, and C++ for students who aim at the hardest CCC Senior problems.
Ontario Computer Science CompanionC++ for TeensBecause the useful part of the tree project is the doubt, and a tool cannot doubt on the student’s behalf.
A nearest-neighbours model is simple enough to explain on a whiteboard: find the most similar examples you already know, and copy what they say. A teen who has written one by hand knows exactly why it fails on rare cases, why the choice of k matters, and why a single accuracy figure can flatter it. That understanding transfers to every model they will meet later, including the large ones behind chatbots.
So our order is fixed. A student first describes the problem in plain words, then writes the steps, predicts the result, runs it and compares. Only after that, and only within the age rules above, might an AI tool come in as a second opinion to be checked. Students who learn in this order become the ones who can tell when a tool is wrong.
It is also how the CCC works: three hours, an editor and no assistant, so the reasoning on the page has to be the student’s. The longer argument is in whether coding is still worth learning in 2026.
Lessons are online, so a teen near Yonge and Major Mackenzie and another in Markham or Vaughan can share a class without a drive along Highway 7.
Weekdays or weekends, flexible: choose your batch, or for a very personalised plan choose 1-on-1 at your convenience, weekend mornings or weekdays.
Students in Markham, Vaughan, Aurora and Newmarket join the same groups, all on the Eastern time clock that Richmond Hill uses.
A class of fifteen to twenty at the same stage, or a teacher of their own when a deadline is close, such as a contest in February or a final ICS4U assignment.
Projects sit in folders the student owns, and the student writes them. We explain and review; graded school work stays the student’s own.
A laptop or desktop that can run Python 3, a headset or microphone, and a stable connection. If Python is not installed yet, the first class sets it up.
The first lesson is a real lesson, at no cost and with no card details asked. It ends with a named course and a level, or advice to wait.
No Richmond Hill centre
Modern Age Coders has no office or classroom in Richmond Hill and does not claim one. Teachers are based in India and teach live, online, at Richmond Hill hours.
Each fee shows in your own currency, with its code beside it.
One complete live lesson with no charge, ending in a placement and a suggested course.
Eight live classes a month with fifteen to twenty teens at one level, billed as a monthly fee.
One teacher for one teen at hours the family picks, billed as a monthly fee.
Richmond Hill families pay what families pay anywhere else in Canada. We bill nothing until after the free class, once a course and a schedule suit the family. Missed classes and holidays are covered on the pricing page.
Rated 4.9 across 547 Google reviews. These are real reviews, reproduced 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
Give us the grade and a line about what the student has coded so far. A beginner writes a first full program; a stronger student may get the York Region tree data or one of our timed CCC-style problems.
The ones we hear most often from families in Richmond Hill.
No. Every class is live and online, so a Richmond Hill teen joins from home. There is no centre in the city; students choose a group of fifteen to twenty or a private teacher.
Usually Python for Teens. If the free class shows complete programs already, we place higher. The same course backs up the coding strand of MTH1W, Grade 9 math.
No. We teach alongside the school course and we do not grant Ontario credits. The credit is earned only at school; we add practice, explanation and project feedback.
Yes, by OpenAI's own rule: its help centre says children aged 13 to 18 need parental consent. Our lessons never depend on it, so saying no costs your teen nothing.
No. Anthropic's consumer terms require users to be at least 18, so Claude is not part of any lesson for students under 18.
CEMC describes the first two questions as basic loops and conditions, and the 2026 Junior mean was 42.65 out of 75. A teen with a few months of steady Python can write a solid paper.
Not alone. CEMC says students cannot register individually; a school orders the contest. If the student's own school does not, CEMC suggests asking another local school.
No. CEMC's grader rules ban them by name, CoPilot and ChatGPT included, so our contest practice runs with every assistant turned off.
Weekdays or weekends, flexible: choose your batch, or for a very personalised plan choose 1-on-1 at your convenience, weekend mornings or weekdays. Every time is confirmed in Eastern time.
Yes. Students download York Region's published street tree records for Richmond Hill under the Region's open data licence and build the model themselves. The Region has not endorsed our teaching.
For school courses, read ICD2O explained, ICS3U help and ICS4U help. For contests, try the CCC past problems guide and the Canadian contest calendar, or go back to the Ontario page for the whole province.