Introduction to Computer Science

  8-12 graders

  Credits awarded on transcript  

  Pre-algebra completed with B- or better

  UC A-G approved for [G] Elective credits

  Self paced instructor-guided  

  Personalized 1-1 support

  Office hours 1 hour per week

  1198 per student, per semester  

  90 minutes per class

  4-8 students per class

  Twice per week over 36 weeks

  1198 per student, per semester  

  2 hours per day (summer)  

  8-10 students per class

  4 days per week 2, 4, or 6 weeks

  479 per student, per week  

This is an introductory high-school level course that is designed for students in 9th grade with algebra readiness skills. No prior programming experience is required. It is inspired by a highly successful Introductory Computing course (15-112, Fundamentals of Programming and Computer Science) that has been taught at Carnegie Mellon University for over 10 years. It is predicated on the notion that learning about programming and computer science should be fun and engaging. This requires interesting problems to solve, as computational problem-solving is the core of computer science.

Students start with 2D Graphics using a simple drawing package in Python, and use their creativity and imagination to draw different shapes, from simple to complex. We start students students with graphical problems because they are visually engaging, allow for multiple correct solutions, and provide visual cues when a solution goes awry. Students also learn to use functions, reuse code, and read from and write to files.

By the end of the course, students will be able to apply the basic skills learned in this course to take more advanced Python courses or learn other programming languages such as Java.

A natural progression from this course is for students to take AP® Computer Science courses or Introduction to Data Science.


   University of California A-G approved for [G] College-Preparatory Elective credits.      NCAA Approved.

Course Outline

    hide details
  1. Shapes You Can Draw
    Running our first program can be so much more than “Hello World!” In this unit students will create drawings with their first Python programs. We simplify the process for beginners so that they can learn the structure of Python programs and the debugging process while solving challenges and creating increasingly complex pictures. By the end of this unit students will be able to draw just about anything they can imagine.
  2. Functions, Variables, Properties, and Interaction
    Students will define their first functions to easily change the color and other details of the shapes that they are drawing. Their functions will build in complexity as they add multiple parameters and leverage variables to generalize their functions. Students are also introduced to creating user interaction functions that take mouse input to change various aspects of their code.
  3. Basic Conditionals and Helper Functions
    A fundamental concept in computer science is implementing decision trees in code. In this unit students will be introduced to conditionals by creating basic if-statements, if-else statements and multiple if statements. To help with the increasing complexity of conditionals we will show students how to leverage flow diagrams to visualize the logic that defines their programs. Students will also learn how to use helper functions to simplify code through abstractions.
  4. Methods and Conditional Branching
    Students are introduced to more complex branching scenarios with if-elif-else statements. Students will learn how to map out a problem so they know when to deploy the various types of conditional statements. In addition, they will manipulate objects in new ways through methods.
  5. Compound and Nested Conditionals
    Students will learn about compound conditional statements that use the Boolean operators and, or, and not to check multiple conditions at once and improve the interactions in their program. Students will also learn about nested conditional statements to create cascading decision trees.
  6. Data Structures and Automation
    Data structures are a critical part of every programming language, but can also be a difficult stumbling block. Students will begin working with groups of objects that can be organized to act as one object, or iterated through to address each individual member of the group. We will introduce tools so that students can automate their program, creating animations that run continuously.
  7. For Loops and Local Variables
    We introduce the idea of variable scope and the difference between global and local variables. Students will recognize function parameters as local variables and how global variables can be accessed throughout their program. For loops will now give students the ability to create a series of shapes that are related to each other.
  8. Math Library and Nested Loops
    Students will learn how to apply math operators like integer division (//) and the modulus operator (%) to determine odd and even numbers, multiples, and round to nearest numbers. They will learn the most widely used math functions, including generating random numbers. Finally we explore nested loops to build multiple dimensions of iteration.
  9. Data Types, Strings, While Loops
    We go deeper into data types and how we can get input from users by prompting them to input text. We will explore the String data type in detail by going over looping and indexing with Strings and the various String methods. To finish the unit we will add the While loop to our students’ toolbox to support more open ended and flexible iterations.
  10. Lists and Return Values
    Students will learn the very important list data structure – they will create and use lists and the indexes of each value in a list. Students will learn to update values in a list within a program and see how lists can be used to update various components of a program.
  11. 2D Lists and Board Games
    We will extend the skillset of using lists to include 2-dimensional lists so students can work with tables of data and loop through rows and columns. They will learn to access specific elements of a 2-D list using two indexes. Students will explore building games with 2D lists and will learn how to conduct hit testing to determine what elements to interact with.
  12. Final Project
    During this final unit we will celebrate everything the students have learned by giving them a chance to build a capstone project. We will add a couple more optional tools so that students can add pictures and sounds to their programs. Students will design a program from scratch and build it through the iterative process that we walked through in the last unit.

Summer of Code
    see detailed summer schedule

To take any of our courses, students must be familiar with opening a browser, navigating to a website, and joining a Zoom meeting.

Students must have a quiet place to study and participate in the class for the duration of the class. Some students may prefer a headset to isolate any background noise and help them focus in class.

Most course lectures and content may be viewed on mobile devices but programming assignments and certain quizzes require a desktop or laptop computer.

Students are required to have their camera on at all times during the class, unless they have an explicit exception approved by their parent or legal guardian.

Our technology requirements are similar to that of most Online classes.

A desktop or laptop computer running Windows (PC), Mac OS (Mac), or Chrome OS (Chromebook).
Students must be able to run a Zoom Client.
A working microphone, speaker, webcam, and an external mouse.
A high-speed internet connection with at least 15mbps download speed (check your Internet speed).

This course includes several timed tests where you will be asked to complete a given number of questions within a 1-3 hour time limit. These tests are designed to keep you competitively prepared but you can take them as often as you like. We do not proctor these exams, neither do we require that you install special lockdown browser.

In today's environment, when students have access to multiple devices, most attempts to avoid cheating in online exams are symbolic. Our exams are meant to encourage you to learn and push yourself using an honor system.

We do assign a grade at the end of the year based on a number of criteria which includes class participation, completion of assignments, and performance in the tests. We do not reveal the exact formula to minimize students' incentive to optimize for a higher grade.

We believe that your grade in the course should reflect how well you have learnt the skills, and a couple of timed-tests, while traditional, aren't the best way to evaluate your learning.