CS50 is Harvard University’s introduction to the intellectual enterprises of computer science and the art of programming for students with a diversity of technological background and experience. CS50 for AP Computer Science Principles is an adaptation of CS50 specifically tailored to align with the AP Computer Science Principles curriculum framework. The course’s assignments, materials, and resources are all identical to the version of the course taught at the college-level, albeit adapted to suit a secondary school audience.
Among this course’s objectives is to supply students with a comprehensive introduction to the fundamentals of the discipline of computer science. We will do so using programming in several different languages as a vehicle to introduce these fundamentals, including such topics as algorithms, abstraction, data, global impact, and internet technologies. Though the course is programming-heavy, it should be stressed that this is not a “programming course”; rather, this course should be considered one of problem-solving, creativity, and exploration. By year’s end, students will have a richer understanding of the key principles of the discipline of computer science. Students will be able to speak intelligently about how computers work and how they enable us to become better problem-solvers, and will hopefully be able to communicate that knowledge to others.
Whether students elect to take no other computer science courses in their lifetime or consider this class the first step in a longer course of study, it is our sincere hope that they feel more comfortable with—and indeed sometimes skeptical of—the technologies that surround us each day.
Students are expected to submit all problems! If students would like to receive AP credit they will need to take the AP CSP Exam and complete the Create and Explore Tasks.
The only background required for CS50 for AP Computer Science Principles is completion of Algebra I or its equivalent.
No books are required for this course. However, students may want to supplement their preparation for or review of some lectures with self-assigned readings relevant to those lectures' content from either of the books below. The first is intended for those inexperienced in (or less comfortable with the idea of) programming. The second is intended for those experienced in (or more comfortable with the idea of) programming.
- C Programming Absolute Beginner's Guide, Third Edition
Greg Perry, Dean Miller
Pearson Education, 2014
ISBN 0-789-75198-4
- Programming in C, Fourth Edition
Stephen G. Kochan
Pearson Education, 2015
ISBN 0-321-77641-0
The book below is recommended for those interested in understanding how their own computers work for personal edification.
- How Computers Work, Ninth Edition
Ron White
Que Publishing, 2008
ISBN 0-7897-3613-6
This last book below is recommended for aspiring hackers, those interested in programming techniques and low-level optimization of code for applications beyond the scope of this course.
- Hacker's Delight, Second Edition
Henry S. Warren Jr.
Pearson Education, 2013
ISBN 0-321-84268-5
Consistent with the AP Computer Science Principles curriculum framework, the course’s material is organized around seven so-called “big ideas” as well as six computational thinking practices. The seven big ideas are:
- Creativity
- Abstraction
- Data and Information
- Algorithms
- Programming
- The Internet
- Global Impact
And the six computational thinking practices are:
- P1. Connecting Computing
- P2. Creating Computational Artifacts
- P3. Abstracting
- P4. Analyzing Problems and Artifacts
- P5. Communicating (both orally and in writing)
- P6. Collaborating
The core curriculum is identical to that of the college. The AP modules include topics that are not covered in CS50 here on campus, but are essential to the AP Computer Science Principles Course. The AP modules are less programming centric and can be used wherever you see fit.
Binary. ASCII. Algorithms. Pseudocode. Scratch.
Syntax. Variables. Data Types. Operators. Boolean Expressions and Conditionals. Loops.
Compiling. Debugging. Arrays and Strings. Command-Line Interaction. Exit Codes. Searching. Computational Complexity. Computational Models.
Functions. Tools for Debugging. More on Strings. Memory. Pointers. Structs.
Valgrind. More on Structs. Linked Lists. Hash Tables. Trees. Tries.
Internet Basics. HTTP. HTML. Forms. CSS. JavaScript.
Python. Conditionals. Booleans. Loops. Data Types. Functions.
Flask. MVC. Autocomplete. Events. Ajax. JSON.
Cookies. Sessions. Databases. SQL. Race Conditions.
Hardware. The Internet. Multimedia. Security.
Collecting Data. Analyzing Data.
The Development Process. Scaling. Models. Simulations. The Digital Divide. Ethics and Legalities of Computing.
We present below a recommended ordering of the curriculum and a suggested timetable. These recommendations are based on a 36-week long school year, where students are available for 180 classroom minutes. However, student experience can vary widely; these recommendations are designed to capture an "average" class.
- Understanding Technology (3 weeks)
- Chapter 0 (2 weeks)
- Performance Task 1: Explore (2 weeks)
- Chapter 1 (4 weeks)
- Chapter 2 (3 weeks)
- Chapter 3 (4 weeks)
- Chapter 4 (2 weeks)
- Data Science (1 week)
- Chapter 5 (3 weeks)
- Chapter 6 (3 weeks)
- Chapter 7 (3 weeks)
- Chapter 8 (2 weeks)
- Performance Task 2: Create (3 weeks)
- Impact of Computing (1 week)
This course's philosophy on academic honesty is best stated as "be reasonable." The course recognizes that interactions with classmates and others can facilitate mastery of the course's material. However, there remains a line between enlisting the help of another and submitting the work of another. This policy characterizes both sides of that line.
The essence of all work that students submit to this course must be their own. Collaboration on problems is not permitted except to the extent that students may ask classmates and others for help so long as that help does not reduce to another doing thier work for them. Generally speaking, when asking for help, students may show their code to others, but they may not view their peers', so long as they respect this policy's other constraints. Collaboration on the AP Computer Science Principle's through-course assessments, namely the create and explore task, is permitted to the extent prescribed by their description provided by the College Board.
Below are rules of thumb that (inexhaustively) characterize acts that the course considers reasonable and not reasonable. Acts considered not reasonable by the course are handled harshly.
- Communicating with classmates about problems in English (or some other spoken language).
- Discussing the course's material with others in order to understand it better.
- Helping a classmate identify a bug in his or her code in class, elsewhere, or even online, as by viewing, compiling, or running his or her code, even on your own computer.
- Incorporating snippets of code that you find online or elsewhere into your own code, provided that those snippets are not themselves solutions to assigned problems and that you cite the snippets' origins.
- Reviewing past semesters' quizzes and solutions thereto.
- Sending or showing code that you've written to someone, possibly a classmate, so that he or she might help you identify and fix a bug.
- Sharing snippets of your own code online so that others might help you identify and fix a bug.
- Turning to the web or elsewhere for instruction beyond the course's own, for references, and for solutions to technical difficulties, but not for outright solutions to problems or your own through-course assessments.
- White-boarding solutions to problems with others using diagrams or pseudocode but not actual code.
- Working with (and even paying) a tutor to help you with the course, provided the tutor does not do your work for you.
- Accessing a solution in CS50 Vault to some problem prior to (re-)submitting your own.
- Asking a classmate to see his or her solution to a problem before (re-)submitting your own.
- Decompiling, deobfuscating, or disassembling the staff's solutions to problems.
- Failing to cite (as with comments) the origins of code or techniques that you discover outside of the course's own lessons and integrate into your own work, even while respecting this policy's other constraints.
- Giving or showing to a classmate a solution to a problem when it is he or she, and not you, who is struggling to solve it.
- Looking at another individual's work during a test or quiz.
- Paying or offering to pay an individual for work that you may submit as (part of) your own.
- Providing or making available solutions to problems to individuals who might take this course in the future.
- Searching for, soliciting, or viewing a test or quiz's questions or answers prior to taking a test or quiz.
- Searching for or soliciting outright solutions to problems online or elsewhere.
- Splitting a problem's workload with another individual and combining your work, when prohibited.
- Submitting (after possibly modifying) the work of another individual beyond allowed snippets.
- Submitting the same or similar work to this course that you have submitted or will submit to another.
- Submitting work to this course that you intend to use outside of the course (e.g., for a job) without prior approval.
- Using resources during a test or quiz beyond those explicitly allowed in the test or quiz's instructions.
- Viewing another's solution to a problem and basing your own solution on it.