Where can a Waterloo teenager learn Python and AI properly?
Modern Age Coders teaches Python and AI live online to Waterloo teens aged 13 to 18, either in a group of fifteen to twenty students or with a private teacher. Most start with Python for Teens, then move to AI and Machine Learning for Teens, CCC preparation or the Ontario Computer Science Companion. Lessons are booked in Eastern time, and the first is free.
Few cities put a teenager closer to Canadian computing than Waterloo. The University of Waterloo’s Centre for Education in Mathematics and Computing, known as CEMC, writes the Canadian Computing Competition, hosts the Canadian Computing Olympiad and publishes free Python lessons, and a student here can use every one of them from a laptop at home. Being near all that does not, on its own, teach anyone to program. What turns it into skill is steady practice with someone who reads the code back and asks why. This page sets out what CEMC offers a Waterloo teen in 2026 to 2027, quoting CEMC, what Ontario computer studies courses expect, which AI tools a teenager may legally use, and a first machine learning project we built on the City of Waterloo’s own trail counter records.
Facts last verified 22 October 2026. Teaching is online; no Waterloo branch is claimed.
Each fits a stage of an Ontario high school timetable or the CEMC contest year. A free first lesson checks the level before anyone commits to one.

From a first print statement to dictionaries, files and functions: exactly the Python a teen needs to fetch and summarise the trail counter data on this page.
See the syllabus
Train, test and question real models in Python. The trail counter exercise below is the first lesson of this course, shrunk to fit a page.
See the syllabus
Original practice problems in the style the CCC uses, timed and graded the way the online grader marks them, ahead of Wednesday 17 February 2027.
See the syllabus
Extra practice and project help beside a school ICS3U or ICS4U course. It runs alongside the credit and does not replace it.
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 syllabusCEMC is part of the University of Waterloo, and most of what it publishes is free. Quotes below are CEMC’s, read from its own pages on 22 October 2026; summaries are ours.
| Resource | What CEMC says | What it means for a teen |
|---|---|---|
| Canadian Computing Competition (CCC) | “North and South America: Wednesday, February 17, 2027” | One online sitting at school. Junior or Senior is chosen by skill, “regardless of their grade” |
| Languages allowed in the CCC | “CCC participants may use C, C++, Python 2, Python 3, or Java.” | Python is allowed, with a caveat CEMC states itself (below) |
| Canadian Computing Olympiad (CCO) | About 20 top official Senior writers are invited “to the CCO at the University of Waterloo each spring” | The next step after a strong Senior paper; CEMC adds that “CCO participants must use C++.” |
| Computer Science Circles | Site title “Computer Science Circles”, tagged “[Python Programming Tutorials]” | Free browser-based Python lessons from variables to recursion |
| Past contests | “Below you will find resources from the last 10 years.” | A decade of old papers, free; “There is no registration or fee required” |
One line on CEMC’s CCC page matters a great deal for a Python student: “it may not always be possible to achieve a perfect score with a particular language choice (for example, Python or Java)”. That is CEMC being candid about time limits on the hardest problems. Our reading is simple. Python is the right first language for almost every teen, and the right contest language for Junior and early Senior work; a student aiming at the fifth Senior problem, or at the CCO, eventually needs C++ as well, and we plan for that switch rather than discovering it in February.
CEMC is plain that “all students must participate through their school.” A Waterloo teen cannot sign up for the CCC alone. The contest is “Written in school, participants write online, individually.” We help with the preparation; a teacher at school handles the registration.
CEMC’s 2026 news item says CEMC, “along with the Faculty of Mathematics at the University of Waterloo, supports the team that represents” Canada at the International Olympiad in Informatics, which “returned from Tashkent, Uzbekistan with four medals”.
CEMC writes that the CCC “is not required for admission to the Faculty of Mathematics at the University of Waterloo.” Teens write it to learn and to be tested fairly, not because a door depends on it. Our Waterloo CS admission page covers the courses that do count.
Modern Age Coders is not part of CEMC or the University of Waterloo and is not endorsed by either. We never copy CEMC problems or solutions into lessons; students read the originals in CEMC’s free archive and practise on problems we write ourselves.
A Waterloo high school student follows the Ontario curriculum. These are the ministry’s course descriptions as its curriculum service returned them on 22 October 2026; where we summarise, we say so.
| Course | Grade and year issued | What the ministry text includes | Prerequisite |
|---|---|---|---|
| MTH1W, Mathematics | Grade 9, 2021, de-streamed | Coding inside math: “read code to predict its outcome, and alter code to adjust constraints, parameters, and outcomes” | None listed |
| ICD2O, Digital Technology and Innovations in the Changing World | Grade 10, 2023, Open | To “investigate current and emerging innovations in digital technology, including automation and artificial intelligence, and assess their benefits and limitations” | None listed |
| ICS3U, Introduction to Computer Science | Grade 11, 2008, University | Our summary: software built alone and in teams, using a development life cycle | None |
| ICS4U, Computer Science | Grade 12, 2008, University | Modular design and complex, fully documented programs (our summary) | ICS3U |
ICD2O is the only Ontario course on the current list whose own expectations name artificial intelligence. It asks students to weigh benefits and limitations, which is a different thing from building a model; its programming strand stops at the instruction to “use fundamental programming concepts to write simple programs”. ICS3U and ICS4U are where serious programming happens, and the 2008 document notes that “Each of the courses listed above is worth one credit.” None of these courses trains a neural network or evaluates one, and none has to. That gap, between talking about AI and testing a model against data it has never seen, is where our AI and machine learning course spends its time.
Teens who code only in MTH1W often meet Python in short snippets they edit rather than write. We start them on full programs early, so ICD2O feels easy and ICS3U is not their first real program.
ICS3U has no prerequisite, and the University of Waterloo’s computer science page lists Grade 11 U Introduction to Computer Science as its recommended course. Many of our Waterloo students take it with our companion course beside it.
ICS4U follows ICS3U. Students who want the CCC Senior paper, a machine learning project for a portfolio, or both, usually add one of those in this year. The Ontario computer science pathway page maps the sequence in detail.
We teach alongside a student’s school courses and we do not grant Ontario credits. ICS3U, ICS4U and ICD2O credits are earned only at school. We are not connected with the Ontario Ministry of Education or any Waterloo school board.
The City of Waterloo publishes hourly counts from counters on its trails. Our students download one counter’s history, train three very simple models on 2018 and test them on 2019. Every number in this section is our own calculation, not the City’s.
| Model (trained on 2018) | How it guesses a 2019 day | Average miss on 2019 (people per day) |
|---|---|---|
| Baseline | The same number every day: the 2018 daily average, about 171 | 90 |
| Weekday model | The 2018 average for that day of the week | 90 |
| Month model | The 2018 average for that month, from about 59 a day in January to 324 in July | 65 |
Here is the whole project in standard-library Python. It pages through the City’s public query service 2,000 rows at a time, adds the hourly counts up by date, keeps only dates with all 24 hours, and scores each model by its mean absolute error. It printed the three numbers in the table when we ran it on 22 October 2026:import json, urllib.request, datetime
URL = ("https://services.arcgis.com/ZpeBVw5o1kjit7LT/arcgis/rest/services/"
"City_of_Waterloo_Trail_Counter_Data/FeatureServer/0/query"
"?where=LOC_ID%3D4&outFields=DATE,TOTAL_COUNT&orderByFields=OBJECTID"
"&resultRecordCount=2000&f=json&resultOffset=")
daily, hours, offset = {}, {}, 0
while True:
page = json.load(urllib.request.urlopen(URL + str(offset)))
rows = page["features"]
if not rows:
break
for r in rows:
a = r["attributes"]
day = datetime.datetime.fromtimestamp(a["DATE"] / 1000, datetime.timezone.utc).date()
daily[day] = daily.get(day, 0) + (a["TOTAL_COUNT"] or 0)
hours[day] = hours.get(day, 0) + 1
offset += len(rows)
full = [d for d in daily if hours[d] == 24]
train = [(d, daily[d]) for d in full if d.year == 2018]
test = [(d, daily[d]) for d in full if d.year == 2019]
def fit(key):
groups = {}
for d, n in train:
groups.setdefault(key(d), []).append(n)
return {k: sum(v) / len(v) for k, v in groups.items()}
def error(key):
model = fit(key)
return round(sum(abs(model[key(d)] - n) for d, n in test) / len(test))
print(offset, "hourly rows,", len(train), "train days,", len(test), "test days")
print("same guess every day:", error(lambda d: 0))
print("guess by weekday:", error(lambda d: d.weekday()))
print("guess by month:", error(lambda d: d.month))
A model is only interesting if it beats a dumb guess. Guessing the yearly average every day misses by 90 people a day on 2019. Knowing the weekday does not help at all here, which surprises most students; knowing the month cuts the miss to 65.
Training on 2018 and testing on 2019 is honest in a way a random split is not: the model never sees the future it is graded on. Students then try training on 2017 to see whether a longer history helps.
The same counter can carry two spellings. In the City’s file, LOC_ID 2 appears as both “Iron Horse Tail at John St. W.” and “Iron Horse Trail at John St. W.”, and LOC_ID 10 as both “Spur Line Trail at Roger Street” and “Spurline Trail South of Roger St.”. Group by ID, never by name.
The 2019 days averaged about 133 people against 171 in 2018, so every 2018 model guesses high. Is that a real change in walking and cycling, a counter moved or partly blocked, or something else? The data alone cannot say. The City’s own note warns that construction meant traffic “has been diverted around many EcoCounter installations resulting in a perceived drop in traffic”, without naming this counter. And 15 April 2018, 14 September 2019 and 15 September 2019 record zero people across all 24 hours, which looks more like a counter gap than an empty trail. A student who flags those days before trusting the error figure is doing real data science.
Two more honest details. The item description says “This data is updated daily”, yet the newest rows we could fetch are dated 30 November 2021, so this is a historical exercise, not a live feed. The whole table held 534,489 rows across all counters on the day we queried it; we used one counter so a laptop finishes in seconds. The data is used under the Waterloo Open Data User Licence, which lets anyone “use the Information commercially”. Contains information provided by the City of Waterloo under licence (licence, dataset). The City has not endorsed this page or our teaching.
Age limits come from each company’s own terms, and contest rules come from the organiser. We read each document on 22 October 2026 and teach inside those limits.
| Tool or setting | What the document says | What we do |
|---|---|---|
| ChatGPT (OpenAI Terms of Use, effective January 1, 2026) | “If you are under 18 you must have your parent or legal guardian’s permission to use the Services.” | Used only with a parent’s permission, and never to write graded work |
| Claude (Anthropic Consumer Terms, effective Oct 8, 2025) | “You must be at least 18 years old” | Never recommended to anyone under 18 |
| The CCC itself (CCC Online Grader rules) | Internet use is forbidden, including “generative AI such as CoPilot or ChatGPT”, and “AI-based tools within an IDE cannot be used.” | Contest practice is done with every AI helper switched off |
The CCC rule is the one that changes how a teen should practise. On 17 February 2027 a CCC writer will have an editor, the official language documentation and their own head; the autocomplete that finishes a loop in a school assignment is gone. Students who learned with an assistant always on tend to freeze at that point. So our contest lessons run with AI tools off from the first week, and our machine learning lessons treat an AI tool as something to test, not something to trust.
OpenAI puts the permission decision with the parent until 18. We tell families exactly where in a course a tool would be used, and a teen whose parent says no loses nothing: every lesson works without it.
Claude is an 18-and-over product under Anthropic’s terms, so it never appears in a lesson for teenagers. The agentic coding course in the row of four above is an adult course for the same reason, and we do not place teens in it.
The trail counter project uses no AI service at all. Fitting averages by hand is the start of machine learning, and a teen who can explain why the month model wins understands more than one who pasted a prompt.
Clocks in Waterloo move on 1 November 2026 and on 14 March 2027. Clocks in India, where our teachers are based, stay put. The hours below only illustrate the gap; they are not a timetable.
| Period | Waterloo on | Gap to India | Saturday 10 am to noon in Waterloo | Weekday 5 to 7 pm in Waterloo |
|---|---|---|---|---|
| Now, until the 1 November 2026 change | UTC-4 | 9 h 30 min | India evening, 7:30 to 9:30 pm | India early morning, 2:30 to 4:30 am the next day |
| Winter, after 1 November 2026 | UTC-5 | 10 h 30 min | India evening, 8:30 to 10:30 pm | India early morning, 3:30 to 5:30 am the next day |
| Summer, after 14 March 2027 | UTC-4 | 9 h 30 min | India evening, 7:30 to 9:30 pm | India early morning, 2:30 to 4:30 am the next day |
Every class we confirm is written in Eastern time. In the week before 1 November 2026 and again before 14 March 2027 we resend each student’s times so that the change costs nobody a lesson.
Waterloo sits in the 226, 382, 519 and 548 area codes, which share south-western Ontario. Any of them works in the form below: type the ten digits and leave out the 1.
The CCC falls on Wednesday 17 February 2027, deep in the UTC-5 months. We schedule the last mock paper for the weekend before, at the same local hour the school plans to sit it.
Ages are a guide only. Placement depends on the code a student can already write, and the free lesson is where we find that out.
Full programs rather than snippets: input, loops, lists and functions, with a habit of predicting output before running it, the MTH1W skill taken further.
Python for TeensProblem Solving for TeensA CCC Junior attempt for those who want it, and first files of real data such as the Waterloo trail counts.
CCC Junior and Senior Preparation (Canadian Computing Competition)Data Science for TeensSupport beside school computer science, and machine learning with proper train and test splits.
Ontario Computer Science CompanionAI and Machine Learning for TeensCCC Senior with a plan for C++, or a larger independent AI project the student can explain line by line.
C++ for TeensAI and Machine Learning for TeensBecause the hardest part of the trail project is not the code; it is noticing what is wrong with the result.
An AI assistant will happily write the trail counter script. It will not stop to ask why 2019 runs low, whether a zero day is a broken counter, or why the same ID carries two names. Those questions come from a student who has written the loop, seen the output and felt something was off. That instinct is what we are trying to build.
So we teach thinking first: break the problem into steps, write each step, predict the output, then check it. AI tools come in later, within the age rules above, as something a student questions the way a reviewer questions a draft. A teen who learns that way can use any tool that appears in the next five years; one who learned by pasting cannot.
The CCC rules ban AI helpers for exactly this reason: on contest day the thinking has to be the student’s own. The longer argument is in is coding still worth learning in 2026.
Classes are online, so a teen near Uptown Waterloo and one in Cambridge sit in the same lesson without a drive.
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 Kitchener, Cambridge and the townships around them join the same classes on the same Eastern time clock as Waterloo students.
A batch of fifteen to twenty teens at one level, or one teacher for one student when the goal is a CCC Senior paper or an ICS4U project.
Every project lives in the student’s own folder, written by them. School assignments stay the student’s own work; we explain ideas and never write marked work.
A laptop or desktop with Python 3 installed, a microphone, and a steady connection. We help set up Python in the first class if it is not there yet.
Lesson one costs nothing and is taught like any other; at the end the teacher names a course and a level. We ask for no card details.
No Waterloo office
Modern Age Coders has no centre in Waterloo and claims none. Every class is live and online, taught by teachers in India, on Waterloo time.
Each fee below shows in your own currency, with the code printed next to it.
A full live lesson, free, ending with a placement and a suggested course.
The monthly fee for a batch of fifteen to twenty teens working at the same level.
The monthly fee for one teacher with one teen, at hours the family picks.
A Waterloo family pays the same as one anywhere in Canada. Billing begins only once the free lesson is done and a course and hours are agreed; the pricing page covers missed lessons and holiday weeks.
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
Tell us the grade and what the student has written so far. A beginner gets a first Python program; a stronger student might get the trail counter data or a timed CCC-style problem of ours.
What Waterloo parents and teenagers ask us most.
Yes, online and live. There is no Waterloo centre: teenagers from 13 to 18 log in from home, either to a group of fifteen to twenty or to private lessons with their own teacher.
Python for Teens, unless the free class shows they already write full programs. AI and Machine Learning for Teens comes after Python is fluent enough to read every line.
No, and we do not grant Ontario credits of any kind. The credit belongs to the school course; our companion adds practice, explanations and project feedback on the side.
Only with your permission, because OpenAI's terms say users under 18 need a parent's or legal guardian's permission. Every lesson also works without it.
No. Anthropic's terms say users must be at least 18, so we never recommend Claude to anyone under 18.
No. The CCC grader rules forbid generative AI such as CoPilot or ChatGPT, and AI-based tools inside an editor. We train contest students with AI switched off.
A teacher at the student's school registers them; CEMC does not accept individual sign-ups. The 2027 sitting is on Wednesday 17 February 2027, per CEMC, and we prepare students with problems we write ourselves.
For Junior and most of Senior, yes. CEMC itself warns that a perfect score may not always be possible in Python or Java, so students aiming at the top Senior problems or the CCO add C++.
Weekdays or weekends, flexible: choose your batch, or for a very personalised plan choose 1-on-1 at your convenience, weekend mornings or weekdays. All times are confirmed in Eastern time.
No. We are an independent online school. We point students to CEMC's free resources and never reuse CEMC problems in our lessons.
Contest students can read the CCC Junior guide, the CCC Senior guide and the CCO guide. For courses and admission, see ICS3U help and the Waterloo AIF guide, or start from coding classes in Ontario.