.
Philhour
AP Computer Science Curriculum
Most recent update
February 22, 2010 9:35 AM
Computer science is the study of information processing and algorithm design in the context of computer programming. In this course, students learn to write programs in the Java programming language, then use Java to solve a variety of computational problems with algorithms of their own design. Units of study include program design, control structures, data structures, object-oriented programming, inheritance, abstraction, collections, recursion, and standard algorithms. Projects vary each year but may include text-based and graphics-based game programming, interactive web development, and database design and maintenance. Students are required to take the Advanced Placement test AP Computer Science A administered in May.
Jump to:
Wiggins and McTighe describe essential questions that “(1) have no one obvious right answer, (2) raise other important questions, often across subject-area boundaries, (3) address the philosophical or conceptual foundations of a discipline, (4) recur naturally, and (5) are framed to provoke and sustain student interest.” What questions might our students still be grappling with twenty years from now?
- How is communicating with a computer different from communicating with a human?
- 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]
Wiggins and McTighe describe four criteria which “serve as filters to select ideas to teach for understanding. The idea, topic, or process (1) represents a big idea with enduring value beyond the classroom, (2) resides at the heart of the discipline, the ’doing’ of the subject in context, (3) requires uncoverage, and (4) offers potential for engaging students.” One can also ask: suppose in twenty years our students have forgotten specific pieces of content -- what should they remember?
- Computer programming is largely concerned with the analysis and manipulation of data sets through the use of computational algorithms. There is an infinite variety of data and algorithms.
- A well-designed program, carefully thought-out in advance, will be easier to code, demonstrate fewer bugs, and require less maintenance in the future. Well-written code is efficient, easy for a future user to understand, and re-usable.
- 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.
- 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.
- 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.
- 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
- This course is based largely on the AP Computer Science A course description provided by the College Board
- 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)
- input/output
- conditional branching (if / then statements)
- calculations (more precisely, Boolean logic operations), and
- sub-routines
Assembly Language for SI Students (ALSI)
- describe the advantages and disadvantages of a variety of programming languages
- design, code, test, debug, and maintain many small, medium, and large programs
- use the Java programming language with fluency; namely ...
- compile and execute programs written in Java in terminal and in IDEs
- describe the function and theory behind the Java Virtual Machine
- describe and effectively use the basic programming control concepts in Java such as loops and conditionals
- describe and effectively use Java's primitive types (such as int and string)
- design Java objects and classes within an appropriate class hierarchy
- analyze and use a set of Java classes written by another programmer
(including the AP subset of the Java class library)
- understand and use the concepts of inheritance and abstraction in Java programming
- expect, trap, and handle errors and exceptions in Java programs at runtime
- program to terminal display (plain text) and through a graphical user interface (GUI) in Java
- describe and use the concept of recursion as needed
- describe and use standard algorithms such as Sequential Sort, Binary Sort, Bubble Sort, Merge Sort, and Quicksort to manipulate one-dimensional arrays
- understand the importance of, and effectively use, data and procedural abstraction and encapsulation in Java
- write proper class, object, variable and method declarations in Java
- understand the need for, and use, preconditions, postconditions, and assertions in Java
- understand integer bounds and floating point error in Java
- perform array traversals, insertions, and deletions in Java
- 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
- use and understand some topics beyond those required for the AP exam, including (but not limited to) any or all of the following:
[top]
- Assessment and Performance Tasks
Wiggins and McTighe describe performance tasks as involving “complex challenges that mirror the issues and problems adults face. The challenges are authentic … they differ from academic prompts in that they (1) use real or simulated settings with the kinds of constraints, background noise, incentives, and opportunities an adult would find in a similar situation; (2) require students to address an identified audience; (3) are based on a specific purpose that relates to the audience; (4) allow students greater opportunity to personalize the task; and (5) are not secure; the task, criteria, and standards are known in advance and guide student work.”
- 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
- AP Computer Science Generic Project Rubric (.doc, .pdf)
- 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).
- 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
- [2007-08 Course Weblog archive:
1st semester, 2nd semester]
- First quarter
- Fundamentals of Java
- Ch 1: Background
- 2008-09 Problem set 1 (.doc, .pdf)
- 2009-10 Problem set 1 (.doc, .pdf)
- Using the terminal to write, compile, and debug Java programs
- Installation and compilation for Java on a Mac terminal, on a PC (using the Alpha Lab) in the command prompt, at home (depending on computer at home)
- Screenshot walkthrough of installation for terminal use on a PC with Vista:
- Playing text-adventure games
- Ch 2: First Java Programs
- Ch 3: Syntax, Errors, and Debugging
- Ch 4: Introduction to Control Statements
- 2008-09 Problem set 4 (.doc, .pdf)
- 2009-10 Problem Set 4 (.doc, .pdf)
- Javabat: sleepIn, diff21, nearHundred, icyHot, loneTeen, in3050, lastDigit, monkeyTrouble, parrotTrouble, in1020, intMax, max1020, sumDouble, makes10, hasTeen, close10
- Unit 1, Chapters 1 - 4: GUI Material
- 2008-09 Problem set GUI A (.doc, .pdf)
- 2008-09 Unit 1 GUI Cribsheet (.doc, .pdf)
- 2009-10 Problem set GUI A (.doc, .pdf)
- 2009-10 GUI Cribsheet (.doc, .pdf)
- Sections 2.7, 3.7, 4.1
- Second quarter
- Javabat
- String methods needed for Javabat warmups
- Javabat warmups: stringTimes, frontTimes, stringBits, stringSplosion, last2, stringX, makeAbba, extraEnd, firstTwo, and others in String1
- Fundamentals of Java
- Ch 5: Introduction to Defining Classes
- Concepts of Object Oriented programming (OOP)
- Revisit Table 1-4 (Chapter 1) that lays out the expedition analogy for OOP
- 2008-09 Problem Set 5A (.doc, .pdf)
- 2009-10 Problem Set 5A (.doc, .pdf)
- 2008-09 Problem Set 5B (.doc, .pdf)
- 2009-10 Problem Set 5B (.doc, .pdf)
- 2008-09 Problem Set GUI B (.doc, .pdf)
- 2009-10 Problem Set GUI B (.doc, .pdf)
- 2009-10 GUI Cribsheet (.doc, .pdf)
- Using an IDE (such as Eclipse) to write, compile, and debug Java programs
- Brief introduction to Arrays
- First semester Programming Project:
- 2009-10: Toddler Games -- students write games for toddlers (involving simple shapes and actions) using the GUI stuff we've worked on this term
- Third quarter
- Introduction to the Gridworld case study
- Fundamentals of Java
- Ch 6: Control Statements Continued
- Ch 7: Improving the User Interface
- Ch 8: HTML and Applets
- 2008-09 Problem Set 8 (includes GUI material) (.doc, .pdf)
- Note: we did no include a problem set from this chapter in the 2009-10 school year
- Fundamentals of Java
- Ch 9: Introduction to Arrays
- 2008-09 Problem Set 9 (includes GUI material) (.doc, .pdf)
- 2009-10 Problem Set 9 (includes GUI material) (.doc, .pdf)
- Student Test Scores Case Study
- Ch 10: Classes Continued
- 2008-09 Problem Set 10 (.doc, .pdf)
- 2009-10 Problem Set 10 (.doc, .pdf)
- No GUI material from Ch 10 used
- Continued work with the Gridworld case study
- Fundamentals of Java
- Ch 11: Arrays Continued
- Ch 12: Recursion, Complexity, and Searching and Sorting
- Fourth quarter
- AP Exam preparation
- using Inform to write text-adventure games
[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 (including 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 true mastery of & fluency in 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. See BJP's
Grading Philosophy.
- Rubric for evaluating student binders
[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
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)
Javabat (practice Java problems online)
Eclipse: Ganymede (this will serve as our primary IDE in the 2008-09 school year)
JGrasp Version 1.8.6_01 served as our primary IDE in the 2007-08 school year (
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
was used in the 2007-08 school year
- 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.
-
Inform 7 (the text-adventure programming language and novel IDE)
Windows Frotz (the text-adventure interpreter)
- Reference Materials
- AP Computer Science A course description provided by the College Board
- 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]