Click here to go to the SI Home Page
.

Philhour

Summer 2007 Curriculum Development for AP Computer Science A

Most recent update August 16, 2007 6:22 PM Mandelbrot Set

The purpose of this site is to document my summer grant work on the development of a curriculum for AP Computer Science A using the principles of backward design.

Jump to:

 

 

 

  • Essential Questions
    • What is an algorithm?
    • How can we judge the complexity of an algorithm?
    • Are there any problems that are "unsolvable" by any computation?
    • What defines a programming language?
    • By what criteria should we choose one programming language over another?
    • How can we most efficiently design data structures and their associated algorithms? What limits an algorithm's efficiency?
    • Why do so many computer scientists claim their work isn't really about computers at all?
    • How and why are computer algorithms linked philosophically to theories of mind?

[top]

  • Enduring Understandings
    • Programming is largely concerned with the analysis and manipulation of data sets through the use of computational algorithms.
    • Well-written code is efficient, easy for a future user to understand, and re-usable.
    • A well-designed program carefully thought-out in advance will be easier to code, sport fewer bugs, and require less maintenance in the future.
    • Computer Science (CS) as an academic discipline is much more than just the use of computers; it is more closely related to philosophy and symbolic logic. CS reveals things about the world that have nothing to do with computers or machines.
    • The Java programming language is widely used at this point in history due to its particular combination of simplicity (particularly involving memory management), security, and broad compatibility.
    • There are thousands of programming languages out there; studying the differences between them can lead to key insights into the nature of CS.
    • Ultimately, all "high-level" programming languages are translated into the native machine language of your particular computer.
    • Computer scientists have a unique set of ethical responsibilities in regards to intellectual property, privacy, and other legal and social concerns related to information technology.

[top]

  • Knowledge and Skills
    • By the end of the course, students will be able to...
      • describe how and why a "high-level" programming language is translated into the native machine language for a particular computer
      • describe and use (for simple operations) the fundamental concepts that make up native machine language: the assignments to and from memory (i.e., variables), conditional branching (if / then statements), calculations (more precisely, Boolean logic operations), and sub-routines
        • Example 1st semester midterm exam problem: Write a routine in plain english that uses the fundamental operations of machine language (memory, branching, Boolean logic, and sub-routines) to calculate the sum of two two-bit numbers and returns a three bit number.
      • describe the advantages and disadvantages of a variety of programming languages
        • Example 1st semester midterm exam problem: What features of Java make it relatively portable compared to other programming languages? Why is Java considered to be relatively secure compared to other programming languages?
      • design, code, test, debug, and maintain many small, medium, and large programs
        • Example 1st semester midterm exam problem: What two things are wrong with the following HelloWorld program? (The program aims to make a pop-window titled "Hello World!" when compiled and run.)

          import javax.swing.*;

          class HelloWorld {

          public static void HelloWorld() {

          JFrame window;
          window = new JFrame();
          window.setTitle("Hello World! ")
          window.setSize(150, 100);
          window.setVisible(true);

          }

          }

      • use the Java programming language with fluency; namely ...
        • compile and execute programs written in Java
          • Example 1st semester midterm exam problem: What do the PATH and CLASSPATH settings in an IDE tell the compiler about the Java "setup" on your computer?
        • describe the function and theory behind the Java Virtual Machine
          • Example 1st semester midterm exam problem: describe the Java Virtual Machine and its relationship to the translation of Byte Code.
        • describe and effectively use the basic programming control concepts in Java such as loops and conditionals
          • Example 1st semester final exam problem: write a program that will output the first 100 odd numbers that are divisible by 7
        • describe and effectively use Java's primitive types (such as int and string)
          • Example 1st semester midterm exam problem:declare a floating-point variable called pie and give it the initial value of 3.14; convert pie to a String containing the digits and symbols "3.14"
        • design Java objects and classes within an appropriate class hierarchy
          • Example 1st semester final exam problem: write a class heirarchy that most aptly captures the relationships between the fundamental particles of nature (protons, neutrons, and electrons) and the atoms and molecules they make.
        • analyze and use a set of Java classes written by another programmer (including the AP subset of the Java class library)
          • Example 2nd semester final exam problem: using the Deck, Suit and Card methods (detailed in Ch 13) write a routine that will sort a randomly shuffled deck into four suits. The cards to not need to be in rank order.
        • understand and use the concepts of inheritance and abstraction in Java programming
          • Example 1st semester final exam problem: under what conditions might you create an abstract class? Give at least two examples of a practical situation for which abstraction would be useful.
        • expect, trap, and handle errors and exceptions in Java programs at runtime
          • Example 2nd semester final exam problem: write a method that returns the tangent of an angle using the Taylor approximation; in implementing your method use a try-catch statement that throws an exception when the input angle is PI/2.
        • program to terminal display (plain text) and through a graphical user interface (GUI) in Java
        • describe and use the concept of recursion as needed
          • Example 2nd semester final exam problem: write a method that uses recursion to calculate the result when you raise int A to the int B power.
        • describe and use standard algorithms such as Sequential Sort, Binary Sort, Bubble Sort, Merge Sort, and Quicksort to manipulate one-dimensional arrays
          • Example 2nd semester final exam problem: sort the provided one-dimensional array with two different sorting algorithms. Calculate the number of operations performed by each sort, the total time taken for the sort, and use this information to determine which sort method is superior for this data set. (Example data set might be a randomized list of numbers from 1 to 500.)
        • use data and procedural abstraction and encapsulation in Java
          • Example 1st semester final exam problem: write a Java program that demonstrates the usefulness of data and procedural encapsulation.
        • use declarations in Java
        • use preconditions, postconditions, and assertions in Java
        • use integer bounds and understand floating point error in Java
        • perform array traversals, insertions, and deletions in Java
      • use the "Big-O" notation to describe the efficiency of an algorithm
      • describe and maintain the computer hardware used during class
      • reflect on the legal and ethical issues surrounding computer science
      • exceed, as a class, the national pass rate for the AP Computer Science A exam in this first year
      • use and understand some topics beyond those required for the AP exam, including (but not limited to):
      • share and reflect on some of the history of computer science
        • Example 1st semester midterm exam problem: compare and contrast the impact of Ada Lovelace and John von Neumann on the development of computer programming.
      • understand and describe the concept of a Turing Machine and the Turing Test
        • Example 1st semester midterm exam problem: what is the difference between a Turing Machine and a Universal Turing Machine?
      • use the Inform 7 programming language and IDE to write simple text-adventure games
      • use the Greenfoot program to write simple graphics-oriented games

[top]

  • Assessment and Performance Tasks
    • Major projects in this course will require students to
      • design and code a sketch program with the following specifications
        • a graphical user interface (GUI)
        • a variety of pen styles and colors
        • a set of standard shapes
        • one or more advanced functions, to be chosen by the student (for instance, a Save/Load procedure so sketches can be permanent...)
        • (much of this project is worked in the course textbook itself)
      • design and code a database program with the following specifications:
        • query-driven and menu-driven interfaces
        • a Save/Load option through file I/O
        • the ability to sort, copy, crop, and merge datasets
        • an advanced, student-designed raison d'etre: is this the database for a social networking site? A spy agency's encrypted file system? A "Google Streetview"-type application that allows navigation through our school? ...
        • (much of this project is worked in the course textbook itself)
      • design, code, and play graphics-based games of the students' own design in Java using Greenfoot
      • design, code, and play text-based interactive fiction of the students' own design in Inform 7
      • design and code Java applets based on physics problems; these applets will be used by students in our physics classes
      • work the AP Computer Science Gridworld Case Study
    • There will be a large number of minor projects and homework assignments. Small computing projects are fairly standard, so we will rely on the course textbook for examples (see below). The typical level of difficulty of the more minor programming projects are as follows:
      • "Write a program that displays a 3-by-3 grid of black and white rectangles. The rectangles should be positioned so that no two rectangles of the same color are adjacent to each other."
      • "The local bookstore has a markup of 10 percent on each book sold. Write a program that takes the sales price of a book as input and displays the following outputs: (1) the markup amount of the book just sold; (2) the wholesale amount (to go to the publisher) of the book just sold; (3) the total sales prices of all of the books sold thus far; (4) the total markup amount of all of the books sold thus far."
      • "A perfect number is a positive integer such that the sum of the divisors equals the number. Thus, 28 = 1 + 2 + 4 + 7 + 14 is a perfect number. If the sum of the divisors is less than the number, it is deficient. If the sum exceeds the number, it is abundant. Write a program that takes a positive integer as input and displays whether the number entered is perfect, deficient, or abundant."
      • "Design a hierarchy of classes that models the classification of your favorite region of the animal kingdom. Your hierarchy should be at most three classes deep and should employ abstract classes on the first two levels."
      • "Write and test a recursive method that returns a string with the characters in reverse order."
    • Students will take a number of practice tests (or partial tests) in advance of the AP exam in May -- these tests are available at the College Board website

[top]

  • Sequence of Learning
    • First quarter
      • Fundamentals of Java Unit I
        • Ch 1: Background [1 week]
        • Ch 2: First Java Programs [2 weeks]
        • Ch 3: Syntax, Errors, and Debugging [2 weeks]
        • Ch 4: Introduction to Control Statements [2 weeks]
      • using JGrasp to write, compile, and debug Java programs
      • using Windows Frotz to play text-adventure games
      • using Inform to write text-adventure games
      • history of computer science / Turing machines
      • 1st quarter major programming project: a first chapter in your work of interactive fiction (IF) (students will continue writing this throughout the year)
    • Second quarter
      • Fundamentals of Java Unit II
        • Ch 5: Introduction to Defining Classes [2 weeks]
        • Ch 6: Control Statements Continued [2 weeks]
        • Ch 7: Improving the User Interface [2 weeks]
        • Ch 8: Introduction to HTML and Applets [2 weeks]
      • using Javadoc and the Java API to generate and use information about classes
      • using Greenfoot to write Java programs in a graphical IDE
      • 2nd quarter major programming project: a Sketch program (described above)
    • 1st semester major programming project: conversion of a unique card, video, or board game so that it can be played by 2 or more players through Greenfoot
    • Third quarter
      • Fundamentals of Java Unit III
        • Ch 9: Introduction to Arrays [2 weeks]
        • Ch 10: Classes Continued [2 weeks]
        • Ch 11: Arrays Continued [2 weeks]
        • Ch 12: Recursion, Complexity, and Searching and Sorting [2 weeks]
      • introduction to the Gridworld case study
      • using the Linux operating system
      • 3rd quarter major programming project: a Database program (described above)
    • Fourth quarter
      • Gridworld case study
      • AP Exam preparation
      • 3rd quarter major programming project: student-designed with instructor's consent, related to Database program (described above)
    • 1st and 2nd semester major programming project: a complete work of interactive fiction written in Inform

[top]

  • Teaching Methodologies and Course Framework
    • Classes will consist of a mix of
      • lecture (as little as possible)
      • multimedia presentation (LCD displays of student and teacher work / incorporated with lecture)
      • solo programming time (at least 50% of in-class time, with more expected outside of class)
      • student demonstrations
      • individual work and group work
      • short-term (in class) projects and assignments
      • long-term (in and outside of class) projects.
    • Students will spend most of their time in the classroom programming and informally sharing solutions to problems.
    • The course is project-oriented. Projects are graded on a 4-pt scale, with the 3 or "B" grade given when a project meets the set of specifications. The 4 or "A" grade is reserved for projects that go above and beyond the specifications in a novel way that demonstrates mastery of the subject material.

[top]

  • Sufficient Evidence
    • The most easily defensible piece of evidence for student success in this course is a passing grade or higher on the AP Computer Science A exam in May. However, since the course amounts to more than just this AP CS A material, particularly the GUI programming and the Inform programming, we must rely as well on the major programming assignments as well as individual assessments of student understanding.

[top]

  • Resources
    • Course textbook selection
      • Fundamentals of Java: AP Computer Science Essentials for the A Exam, 3rd Edition, by Lambert & Osborne, published by Thomson Course Technology
        • Criteria for selection: This textbook was listed on the College Board's AP website as a suitable text for the course, one that had already been approved through the AP Audit process. I looked over several textbooks from a variety of vendors, including the Karel J Robot series. I would characterize the book I selected (Lambert & Osborne) as a conservative choice. Although it does begin teaching the concepts of class and objects early on, it is not a radically 'objects-first' oriented text as Karel J Robot is. In a few years I might want to transition to a more creative or radical text. In the meantime, Lambert & Osborne is sure to give the students precisely what they need to pass the A exam.
      • Java API (this is the complete online set of documentation for Java)
    • Course software selection
      • JGrasp Version 1.8.6_01 will serve as our primary IDE ( Integrated Development Environment)
        • Criteria for selection: JGrasp is a slim, straightforward IDE. There is very little hidden functionality. The actual AP exam is written to concentrate on Java, so our IDE should not have many bells & whistles that will be unavailable to the student at exam time. Students will learn to use JGrasp at the start of the course and will continue to use it throughout.
      • Greenfoot and the associated MyGame project
        • Criteria for selection: Albert found this great tool while at the National Educational Computing Conference (NECC) in summer 2007. Greenfoot is a fun, graphically-oriented IDE designed to educate students in object-oriented programming in Java. Greenfoot is very similar (but superior to) the AP Computer Science Case Study project called Gridworld (see below). We will begin working with Greenfoot in the 2nd quarter and continue to use it throughout the year. MyGame is a website where students can share their video games written with Greenfoot. We will begin working with MyGame in the 3rd quarter.
      • JDK (Java Development Kit, Version 6u1) (this package, from Sun, is required for work in Java)
      • Gridworld (AP Computer Science Case Study; this is a required package for the AP course)
      • Inform 7 (the text-adventure programming language and novel IDE)
      • Windows Frotz (the text-adventure interpreter)
    • Reference Materials
      • Textbooks
        • Introduction to Java Programming - Comprehensive Version by Daniel Liang
        • Big Java by Cay Horstman
        • Head First Java by Kathy Sierra
        • Beginning Programming with Java for Dummies by Barry Burd
      • AP Study Guides
        • Barron's AP Computer Science by Roselyn Teukolsky
        • Cracking the AP Computer Science A/AB Exams 2007 (Princeton Review)
        • 5 Steps to a 5 AP Computer Science by Kathleen Larson
        • 2004 AP Computer Science Released Exams
      • Reference books
        • AP Teachers Guide in Computer Science 2007 (College Board)
        • The Inform Designers Manual by Graham Nelson
        • Twisty Little Passages - An Approach to Interactive Fiction by Nick Montfort

[top]

  • Program of Self-study
    • AP Course
      • Over Summer 2007 I worked all three units of the course textbook (Fundamentals of Java). As I mentioned, this book covers all the material needed for the AP exam. Fortunately I found this experience to be one of review of fundamental concepts. I took the multiple-choice exam provided in the College Board course description as well as two free-response exams and used this experience as a basis for writing my quarter and semester exam study guides.
      • Our syllabus was approved by the College Board in its AP Audit of July 2007.
      • It can be difficult for students getting Java to compile in the JGrasp IDE for the first time. Here are the steps you have to take:
        • Make sure you have downloaded and installed both the Java Developers Kit and JGrasp.
        • Write a very simple HelloWorld.java program using JGrasp; save the program in a directory of your choice (perhaps create a Java directory in My Documents?)
          • Here's an example program:
        • import javax.swing.*;

          class HelloWorld {

          public static void main(String[] args) {

          JFrame window;
          window = new JFrame();
          window.setTitle("Hello World! ");
          window.setSize(150, 100);
          window.setVisible(true);

          }

          }

           

        • Use Settings -> Look & Feel to change the JGrasp to a Windows look and feel -- it is more natural
        • Go to Settings -> PATH/CLASSPATH -> Workspace and click
        • You will create TWO new paths in the PATH tab. Use the Browse tool to navigate to a directory that looks something like C:\j2sdk1.4.2_15. Click on the \lib directory and create the path. Do the same thing for the \bin directory.
        • You will create a CLASSPATH in the appropriate tab. Use the Browse tool and navigate to the directory where you have saved your hellowworld.java program in the first step
        • Press the green + to compile and the running man to run.
    • Gridworld Case Study
      • Over Summer 2007 I worked the Gridworld case study from within the Greenfoot framework. The two programs are so similar that my efforts into learning Greenfoot essentially taught me everything I needed to know about Gridworld. Since we will be writing many programs within Greenfoot starting in the 2nd quarter, working the Gridworld case in the 3rd quarter should be fairly straightforward for students.

 

[top]

 

 

 

 



Can't find what you're looking for or
see a problem with the web site? Let us know!

© Copyright 2010, St. Ignatius College Preparatory
2001 37th Avenue, San Francisco, CA  94116 · (415) 731-7500