Syllabus

This is the syllabus for AP Computer Science A taught by John Spurgeon at Valley Catholic High School during the 2017-2018 academic year. Except for the Textbook section and minor details, it is identical to the syllabus for the 2016-2017 academic year.

General information about AP Computer Science A courses can be found on the AP Computer Science A Course Overview webpage and in the PDF document AP Computer Science A Course Description (Effective Fall 2014).

Overview

AP Computer Science A is designed to be equivalent to a first-semester introductory college computing course. It includes rigorous computer science content and skills that can be built on to complete further science, technology, engineering, mathematics, or computing studies.

This course introduces students to central ideas of computer science, inviting students to develop the computational thinking vital for success across multiple disciplines. It focuses on encouraging students to be creative and apply creative processes when developing computational artifacts. Students design and implement innovative solutions using an iterative process similar to what artists, writers, computer scientists, and engineers use to bring ideas to life.

To appeal to a broad audience, including those often underrepresented in computing, this course highlights the relevance of computer science by emphasizing the vital impact advances in computing have on people and society. By focusing on content that goes beyond the study of machines and systems, students have the opportunity to investigate the innovations in other fields that computing has made possible and examine the ethical implications of new computing technologies.

Prerequisites

The following paragraph is from page 7 of the AP Computer Science A Course Description (Effective Fall 2014).

The assumed prerequisites for entering the AP Computer Science A course include knowledge of basic English and algebra. A student in the AP Computer Science A course should be comfortable with functions and the concepts found in the uses of function notation, such as f(x) = x + 2 and f(x) = g(h(x)). It is important that students and their advisers understand that any significant computer science course builds upon a foundation of mathematical reasoning that should be acquired before attempting such a course.

Duration

AP Computer Science A is a two-semester course. Each semester consists of approximately 19 weeks of instruction time. Classes usually meet for 45 minutes a day, five days a week. Some class periods are less than 45 minutes, and there are fewer than five classes some weeks. AP exams occur around the 32nd week of classes. Taking into account planned and unplanned deviations from the regular schedule, there are about 130 hours of class time available during the entire course and about 110 hours (65 hours in semester one and 45 hours in semester two) of class time available prior to the AP exams.

Curriculum

This course satisfies the curricular requirements specified by the College Board and described in the AP Computer Science A Syllabus Development Guide.

  1. This course teaches students to design and implement computer-based solutions to problems. It includes a variety of problems involving interacting classes under each unit of study. Problems may vary from year to year. Typical examples include:
    • Let's go to the mall! — a multi-cultural take on "Hello, World!", where students begin working with code that involves inheritance and overriding methods.
    • Points in Space — students extend a class that models points in a two-dimensional plane and use the subclass to compute distances between points in three-dimensional space.
    • Traditional Stopwatch — students create a virtual two-button stopwatch using previously developed software components; students learn about class composition as an alternative to inheritance.
    • Quadrilaterals — students extend a general quadrilateral class to create blueprints for specific types of quadrilaterals such as parallelograms, rhomboids, rectangles, squares; students implement methods to compute perimeters and areas; students examine different ways to define and compute the area of a polygon and observe dramatic rounding error consequences of some implementations compared to others (the shoelace formula in particular).
    • The Josephus Problem — students are introduced to an ancient problem featured in the first chapter of Concrete Mathematics: a foundation for computer science by Graham, Knuth and Patashnik; students learn about an unexpected method for cycling elements in an array discussed in Chapter 2: Aha! Algorithms of Programming Pearls by Jon Bentley; students apply what they learn while implementing a method called cycleShiftLeft.
    • Rock, Paper, Scissors — students implement methods involving a class that represents a competitor in a Rock, Paper, Scissors tournament; students are introduced to the concept of a pseudo random number and practice using the method Math.random.
  2. This course teaches students to use and implement commonly used algorithms and data structures. Exercises include:
    • A lesson involving non-transitive dice: students store numbers in arrays and use the Math.random method to implement an algorithm used to simulate rolling dice.
    • A lesson involving cards: students store objects in arrays and ArrayLists, use the Math.random method to implement an algorithm used to shuffle cards, and practice implementing and using various sorting methods including insertion, selection, and merge sorts to sort objects representing cards.
    • A lesson on matrix multiplication that requires students to store numbers in arrays and use loops to traverse two-dimensional arrays.
    • A lesson on computing square roots that includes linear and binary searches as well as the Babylonian method or Heron's method.
  3. This course teaches students to select appropriate algorithms and data structures to solve problems. For example:
    • Recursive methods will be studied; typical examples include a method for computing powers of a number, a method for reversing the order of the characters of a string or elements of an array, a method for calculating the factorial and "termial" values (triangle numbers) of a non-negative integer, and a method for estimating the value of pi. Students will learn that recursive methods can be converted to methods that use iteration (e.g. for or while loops) instead of recursion. Students will participate in discussions about when and when not to use recursion; recursive and non-recursive versions of a function that returns a number in the sequence of Fibonacci numbers may be studied, for example, to illustrate trade-offs involving code simplification and program execution time.
    • Students will learn about the time and space trade-offs of using arrays vs. ArrayLists; students will consider how the need to insert values, delete values and retrieve values affects the decision to use an array vs. an ArrayList.
  4. This course teaches students to code fluently in an object-oriented paradigm using the programming language Java.
    • In Let's go to the mall!, for example, students study an example of a class hierarchy; they must diagram the relationships between the classes provided and then create their own program that includes multiple classes: at least one class must inherit from or extend another class, and at least one method or property must override another one.
  5. This course teaches students to use elements of the standard Java library from the AP Java subset in Appendix A of the AP Computer Science A Course Description.
    • Students receive instruction in multiple classes from the AP Java subset. In Rock, Paper, Scissors and in exercises involving dice and cards, for example, students learn about and practice using the Math.random method and the ArrayList class. In other exercises, students implement methods for computing powers and roots of number and compare their implementations with the corresponding methods—pow and sqrt—from the Math class.
  6. In this course, students are engaged in hands-on laboratory experiences, integrated throughout the course, which account for at least 20 hours of course time.
  7. This course teaches students to recognize the ethical and social implications of computer use.
    • Students read stories in the news (e.g. Self-Driving Cars Can Learn a Lot by Playing Grand Theft Auto) about social changes and ethical challenges that advances in computing are producing, and respond to what they read online or in journals such as Communications of the ACM.
    • Students will be introduced to Alan Turing and the role that his work with computers played in turning tide of World War II.
    • Students will learn about the role cryptography plays in enabling "secure" transactions, such as financial transactions, to take place on the internet today.
    • Students will be exposed to a paint-mixing metaphor that helps explain how public/private key algorithms may be used to encode and decode messages. Students will be introduced to the history of such algorithms and their importance to nation states. Students will learn about how to race to find better ways to encode and decode messages is driving advances in computing, such as the development of quantum computers.

Software

In class, students will work with Java programs using editors that run on the Microsoft Windows operating system. Students will compile and interpret Java programs using a version of the Java SE Development Kit (JDK) from Oracle. Students will also have the opportunity to create and run Java programs using web-based programs that are available online.

Notepad and Notepad++ are simple text editors that students may use to create and modify Java source code. An online Java integrated development environment (IDE) that students may use is available at https://www.compilejava.net.

In addition to using a text editor and core JDK utilities, students will also learn to use Microsoft PowerShell and a few basic commands needed to change directories, view the contents of a directory, invoke JDK utilities, and pass command-line arguments to programs.

Students may use other Java development tools in addition to those described above; however, students who choose to do so should be prepared to install, maintain and learn to use such software on their own computer hardware. Students should be comfortable editing, compiling and interpreting Java programs using basic tools like the ones described above before attempting to use more complicated IDEs.

Textbooks

(tentative)

The Java Tutorials by Gallardo et al.

  • Students may use the free online or eBook versions published by Oracle. A print version (6th edition, 2014) published by Addison-Wesley Professional is also available.
The Elements of Java Style by Vermeulen et al., published by Cambridge University Press.

Recommended Reading

Barron's AP Computer Science A by Roselyn Teukolsky.