AP Computer Science A Syllabus Course Overview This is an entry level college course, and will be conducted as such. I hope this is an exciting prospect, since it frees us to focus with intensity on the course material, challenging as it is, exploring as a group the many creative opportunities the subject offers for imaginative and practical expression. It also demands the mutual respect and responsible behavior befitting professionals working together to achieve a common purpose. Certainly, the standing expectation is that all participants will conduct themselves accordingly. Those who do exceptionally well may earn college credit. We will explore software as an art form. We will explore software as one of the most powerfully practical and influential technologies ever devised. And we will explore the social consequences of our activities with an attempt to provide an appropriate awareness of the balance that must be struck between what is possible, what is practical, and what is appropriate. The course will be divided into three concurrent activities: 1. class instruction and supporting homework exercises of technical concepts as outlined by the course syllabus 2. individual research and group discussions relating to the workplace and social implications of computer science 3. individual and group projects We will run our class as a small, software company; organizing ourselves and our activities in a manner that a contract development company might adopt in performing its professional services for its customers. Expectations of each member of such a company are usually quite high, expectations of oneself as well as expectations of one another, since the success of their endeavor invariably depends on the success of the entire group operating as a team. Plan to work hard, learn a lot, and have fun. Texts and Resources Teukolsky, Roselyn. Barron's AP Computer Science A, 5th Edition. Hauppauge, New York, Barron's Educational Series, Inc., 2010. GridWorld AP Computer Science Case Study. The College Board, 2007. Parlante, Nick, Stanford University. CodingBat Java, http://codingbat.com. McGann, L. Brian, Pacific Collegiate School, Santa Cruz, CA. PumaJ Java Educational Framework, http://pacificcollegiate.com/ourpages/auto/2010/8/20/53433896/ PumaJDistribution101208.zip. Course Planner Fall Semester Week 1 2 Topic Introduction to Online Programming Resources Programming Projects / Essays Introduction to CodingBat. Methods Writing Methods: CodingBat Exercises Hardware and Software Components of a Computer System Hardware and Software Components of a Computer System Methods Writing Methods with Strings: CodingBat Exercises The String Class Tests/Large Scale Projects Quiz 1 Methods Quiz 2 Strings [8] Week 3 4 5 6 Topic Programming Projects / Essays Tests/Large Scale Projects String and Object Classes Barron's Chapter 4, The String Class Social Impacts Essay: Social Networks and Personal Privacy [9] Introduction to Integrated Development Environments Writing and Debugging Classes with BlueJ Quiz 3 Conditionals Conditionals Barron's Chapter 1, Java Introduction [4,5] Iterations Writing Methods with Quiz 4 Iterations: CodingBat Exercises Iterations Arrays Writing Methods with Arrays: CodingBat Exercises Arrays [4,5] Barron's Chapter 4, Built-In Classes First PumaJ Project 7 8 Arrays Standard Classes Standard Classes Barron's Chapter 4, Built-In Classes Quiz 5 Arrays PumaJ Practice with Shapes [3,4,5] Barron's Chapter 2, Classes and Objects PumaJ Shapes in Random Locations and Colors[1] 9 Standard Classes [3,4,5] Barron's Chapter 2, Classes and Objects PumaJ Shapes in Random Separate Locations [3,4,5] Week 10 11 Topic Classes and Objects Classes and Objects Programming Projects / Essays Tests/Large Scale Projects Barron's Chapter 2, Classes and Objects Quiz 6 PumaJ Shapes PumaJ Resizing Shapes [3,4,5] Barron's Chapter 2, Classes and Objects Quiz 7 Classes and Objects PumaJ Moving Shapes and Bouncing Shapes 12 Classes and Objects Barron's Chapter 2, Classes and Objects PumaJ Managing Many Bouncing Shapes 13 Inheritance and Polymorphism Barron's Chapter 3, Inheritance and Polymorphism PumaJ Bouncing Shapes with Obstructions 14 Inheritance and Polymorphism Inheritance and Polymorphism [3,4,5] Quiz 8 Inheritance and Polymorphism [3,4,5] Barron's Chapter 3, Inheritance and Polymorphism PumaJ Bouncing Separate Shapes Against All Sides 15 [3,4,5] Barron's Chapter 3, Inheritance and Polymorphism [3,4,5] Quiz 9 Inheritance and Polymorphism PumaJ Bouncing Separate Shapes Against Everything 16 Simple Multimedia PumaJ Bouncing Sounds GUI Interactivity/IO PumaJ Clicking Shapes PumaJ Product Development Contract PumaJ Product Development Contract [3,4,5] [3,4,5] Week 17 Topic PumaJ Product Development Contract Finals Programming Projects / Essays Tests/Large Scale Projects PumaJ Product Demonstrations Product Demonstrations Semester Final Exam Cumulative Spring Semester Week 1 Topic Arrays Review Programming Projects / Essays Tests/Large Scale Projects Writing Methods with Arrays: CodingBat Exercises Barron's Chapter 6, Arrays and Array Lists 2 3 4 GridWorld Case Study GridWorld Case Study, Part 1 [4,7] Arrays Review Writing Methods with Arrays and Array Lists: CodingBat Exercises Quiz 11 Arrays GridWorld Case Study GridWorld Case Study, Part 2 [7] Career Awareness Artificial Intelligence Speaker Corporation Research Oracle Corporation Report GridWorld Case Study GridWorld Case Study, Part 2 [7,9] Career Awareness Field Trip Field Trip to Oracle GridWorld Case Study GridWorld Case Study, Part 3 Quiz 12 GridWorld Case Study [7] Week 5 Topic GridWorld Case Study Programming Projects / Essays GridWorld Case Study, Part 3 Creating A Bug You Can Call Your Own 6 GridWorld Case Study Tests/Large Scale Projects GridWorld Case Study, Part 4 [7] Creating A World You Can Call Your Own Quiz 13 GridWorld Case Study [7] 7 Work on Final Performance Work on Final Performance [3,4,5,6] 8 Recursion Barron's Chapter 7, Recursion Work on Final Performance Work on Final Performance Quiz 14 Recursion [3,4,5,6] 9 Work on Final Performance Work on Final Performance [3,4,5,6] 10 Work on Final Performance Work on Final Performance [3,4,5,6] 11 Sorting and Searching Barron's Chapter 8, Sorting and Searching Work on Final Performance Work on Final Performance [3,4,5,6] Sorting and Searching Barron's Chapter 8, Sorting and Searching Quiz 15 Recursion Work on Final Performance Work on Final Performance [3,4,5,6] 13 Work on Final Performance Work on Final Performance [3,4,5,6] 14 Work on Final Performance Work on Final Performance [3,4,5,6] 15 Review for AP Exam Review for AP Exam Quiz 16 AP Practice 16 Review for AP Exam Review for AP Exam Quiz 17 AP Practice 17 AP Exam AP Exam AP Exam Work on Final Performance Work on Final Performance [3,4,5,6] 12 Week 18 Topic Programming Projects / Essays Tests/Large Scale Projects AP Exam AP Exam AP Exam Work on Final Performance Work on Final Performance [3,4,5,6] 19 Work on Final Performance Work on Final Performance [3,4,5,6] 20 Work on Final Performance Work on Final Performance [3,4,5,6] 21 Final Performance Final Performance Final Performance [3] The course teaches students to design and implement computer-based solutions to problems in a variety of application areas. [4] The course teaches students to use and implement commonly used algorithms and data structures. [5] The course teaches students to develop and select appropriate algorithms and data structures to solve problems. [6] The course teaches students to code fluently in an object-oriented paradigm using the programming language Java. The course teaches students to use standard Java library classes from the AP Java subset delineated in Appendixes A and B of the AP Computer Science Course Description. (Note: Students who study a language other than Java in AP Computer Science must also be taught to use Java, as specified in the AP Java subset.) [7] The course teaches students to read and understand a large program consisting of several classes and interacting objects, and enables students to read and understand the current AP Computer Science Case Study posted on AP Central. [8] The course teaches students to identify the major hardware and software components of a computer system, their relationship to one another, and the roles of these components within the system. [9] The course teaches students to recognize the ethical and social implications of computer use. Examples of Teaching Strategies Lab Component Students work in the lab nearly every class period, typically individually, but sometimes with one or more partners. Lab work is extremely important for a number of reasons. First, learning Java is like learning any other language, complete with new vocabulary, grammar, and syntactical meaning. Mastering the language requires an enormous amount of practice, the effectiveness of which I have found to be greatly enhanced by intense and repetitive interaction both between individual students and myself, and between individual students and the others in the class. Further, working individually among others mimics many typical workplaces, providing the benefit of the potential for spontaneous collaboration among peers and a taste for what it is often like in a professional setting. The bond that inevitably forms among the members of such a team often fosters ad hoc collaborative reinforcement of concepts and techniques among members of the class that complements the benefits derived from my working with individuals one-on-one. Throughout all the lab work, students are introduced to the AP Java subset delineated in Appendices A and B of the AP Computer Science Course Description. Product Development Projects and the Final Performance Our class is modeled after a small software development company, with "development contracts" coming our way from time to time. Fulfilling these contracts requires the class to organize in such a way that the the corresponding products can be adequately defined, constructed, tested, and delivered. In so doing, students learn far more than the programming language itself, but in addition, many of the processes and procedures that are required to successfully build a real software product; they learn the importance of craftsmanship in addition to the art of effective expression. Our final product development project of the course is our "Final Performance". This is a relatively large product development effort that the class chooses itself. It typically involves a variety of computer systems working in concert to perform some sort of multimedia experience. It is complex enough that it requires decomposition into a number of component parts, with the class dividing into teams to design and build each one of them. Once completed, the teams work together to integrate and test the competed assembly. If the class judges the result to be of sufficient quality, a "performance" of the product is offered to be experienced by the school as a whole.