In the second semester of my 2016-17 junior year in high school, I decided that I wanted to take the AP Computer Science A test. In order to teach myself the skills necessary, I designed a course based around the curriculum for AP Computer Science A. In addition, I decided to apply the programming skills learned throughout the course to design and program a game in Java.

Below are the three books I used during my course:

  • Barron’s AP Computer Science A: This is a textbook by Barron’s that walks through all the skills needed for the test. This was the main way I learned the programming skills throughout the course. I did one chapter a week, including reading and exercises. It also included practice tests to track your progress. Buy it here.
  • The Art of Game Design: A Book of Lenses by Jesse Schell: This is an excellent in-depth book that lays out every detail of game design. It uses small statements Schell calls “lenses” which show you how to view a game in a different way. Schell is a former Imagineer, which is a creative designer for Disney. Buy it here.
  • The Nature of Code by Daniel Shiffman: This is a book that examines code in the context of “programming nature”. I used this book to teach myself some niche skills and also see useful examples of how I could apply my code to simulate real life events. Buy or read it here.


I am using three books for this year’s course. The first two are the Barron’s AP Computer Science A book and The Art of Game Design: A Book of Lenses, both of which I used last year. They were excellent books and super informative, so I think they’re a great choice. The third book I plan on using is a new one that I read this summer:

  • Challenges for Game Designers by Brenda Brathwaite and Ian Schreiber: This book is similar to The Art of Game Design, but is much more interactive. The book presents a series of exercises and challenges to help build skills in game design and in collaboration. I plan to use this more as a supplement to the course rather than reading through the entire thing. Buy it here.


Here’s the official syllabus I wrote up for my teachers to evaluate.

Students will be able to demonstrate that they know and understand how to use the following programming skills and concepts:

  • Console input and output
  • The main() method
  • Variable types and identifiers
  • Operators
  • If statements
  • Switch statements
  • For loops
  • For each loops
  • While loops
  • Javadoc comments
  • Classes
  • Visibility modifiers
  • Methods
  • Method overloading
  • References
  • This
  • Inheritance
  • Polymorphism
  • Casting
  • Abstract classes
  • Interfaces
  • Boxing and unboxing
  • Math class
  • Arrays
  • Arraylists
  • GUI building
  • Graphics
  • Creating and editing files

Students must also demonstrate that they know how to:

  • Go through the steps of developing any program
    • 1) Write or understand a program specification
    • 2) “Translate” the specification into classes and methods to be programmed
    • 3) Step by step program development (Program a class or method, test, debug, continue until class or method is finished)
    • 4) Bring together all classes and methods
    • 5) Test and debug
  • Collaborate with other programmers to create code (for example, one student will program a class, and another must write a subclass for that class)
  • Write clean and efficient code (code is readable and understandable by other programmers, uses the least amount of lines of code possible, and is not time-consuming to run)

Students will demonstrate that they understand the following concepts and how they work inside their game:

  • The element of surprise
  • Value
  • Mechanics
  • Story
  • Aesthetics
  • Technology
  • The experience
  • Theme
  • Intended audience
  • Flow
  • Space
  • Objects
  • Attributes
  • Stats
  • Goals
  • Rules
  • Chance
  • Balance
  • Meaningful choices
  • Competition
  • Reward and Punishment
  • Puzzles
  • Interface
  • Feedback
  • Indirect control
  • Avatar


Here’s my current schedule for what we’re going to do in the class.

  • Quarter 1: Teach basic programming skills in Java to the point where the students are ready to program a simple game.
  • Quarter 2: Design and build a non-digital prototype of the game that we’ll finish at the end of the year.
  • Quarter 3: Program the game in Java using the non-digital prototype as a reference.
  • Quarter 4: Finish programming the game. Have other people playtest and give feedback, then improve the game to a finished, polished product based on results.


At the end of the course, our class will have produced:

  • A non-digital prototype of the final game.
  • A programmed version of the final game.
  • A short “commercial” to pitch the game to an audience