Joy of Computing

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

  1099 per student, per semester  

  90 minutes per class

  4-8 students per class

  Twice per week over 36 weeks

  1099 per student, per semester  

  2 hours per day (summer)  

  8-10 students per class

  4 days per week 2, 4, or 6 weeks

  449 per student, per week  

Joy of Computing is an introductory-level course meant for all students, grades 7 or higher, regardless of whether they intend to pursue a major in a STEM discipline or not. You don't need a prior background in computer science or even basic programming. One year studying Computer Science will help students explore careers they may not have considered open to them. Students who take an introductory course such as the Joy of Computing —

  • Gain confidence in problem-solving abilities
  • Understand better how computers really work
  • Broaden their understanding of how computers impact every career and discipline
  • Stretch their creativity by bringing their own ideas to life
  • Learn skills that they can apply to a wide range of fields and interests
  • Learn new ways to help their community through technology

This class introduces students to the big ideas of computer programming in a fun, friendly, and graphical way. The emphasis is on creativity and problem solving, and not on learning a particular programming language. This is a project-based course. Students learn fundamental building blocks of programming by building graphical narratives and stories during class and get live feedback from their instructor.

The course is taught using Snap! a block language developed at University of California at Berkeley to teach programming to students ages 13 to adult. Unlike Scratch, Snap! is a very powerful language that can be used to teach advanced concepts like recursion, functional programming, and so on.

The primary objective of the course is to inspire a passion for computer science and motivate students to further study, lay a solid foundation of computer programming fundamentals, and develop creativity and problem solving skills. By the end of the course, students will be ready to take text-based programming language courses such as Python and Java. This course is offered to students in grades 7 or above as their first computer programming course.


        NCAA Approved.

Course Outline

    hide details
  1. Introduction
    Students learn the basics of Snap! programming and build their very first visually engaging application using simple program logic as well as animated backgrounds. They develop a reference frame for programming and learn the tools they need to express their creativity. Their first few projects include graphics, animation, and story telling.
  2. Conditionals
    If-then-else is a simple, yet powerful construct that forms the building block of conditional logic for every modern program. In building conditional logic, students learn about data types, including boolean types that determine which of the two or more branches of logic their program should execute, and how to make such determination dynamically. Nesting these constructs allows students to learn about composing complex boolean logic.
  3. Drawing
    In this unit, students learn to draw simple as well as complex shapes by providing low-level pen movement instructions. Students appreciate the relevance and importance of knowing their coordinate system as well as the underpinnings of creating shapes using low-level geometrical commands. Breaking down the drawing of simple shapes into pen movement instructions teach students how to get computers to follow low-level instructions.
  4. Variables
    Students are introduced to the notion of variables - a key programming concept that allows a symbol to change the value it represents based on user input or the result of a computation. Variables make programs dynamic and responsive to computational changes as well as user input, and is key for making interactive games.
  5. Functions
    Functions allow students to represent complex logic as a simple, blac-box abstraction, like a lego block. By building their own functions, students appreciate that built in functions are similar and can easily be replaced by custom logic written by students.
  6. Storytelling
    Students have the basic building blocks at this point to explore their creativity and imagination in story telling and represent it using code. Through numerous curated and instructor guided projects, students create visually compelling stories and bring it to life using constructs they have learned so far in the course.
  7. Concurrency
    Can two things happen at the same time, or are things always executed sequentially? What is the difference between concurrent and parallel execution, and what are the implications of that? Students ponder such advanced questions and experience it first hand by implementing a program that shows the difference in program behavior between the two implementations.
  8. Lists and Maps
    While variables allow students to represent and manage a few pieces of information, data structures such as lists and maps allow them to represent any number of objects or information pieces in a manner that can be used by their program logic. Students apply these data structures to create games that illustrate the power of such simple data structures.
  9. Anchoring and Cloning
    Students learn not only how to manipulate or change individual objects, but how to maintain relative state of related but different objects through anchoring one object relative to another, or by cloning an object and updating certain attributes selectively to build a diverse population of similar but different objects.
  10. Recursion
    Recursive programming teaches students how to represent functions that can be expressed using simpler forms of the same function. It is an advanced and powerful construct that students learn in AP Computer Science A using Java, yet this course teaches them the basic building blocks of recursion using visual projects that draw fractals.
  11. Creative Projects
    In this capstone unit, students bring together the lessons learned over the earlier units and synthesize it to solve a problem that showcases their own imagination and creativity. With instructor guidance, students may reach far beyond the curriculum to creative true masterpieces!

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.