If you were to take all 4 courses, here is the order in which to take them. However, you are not required to take them in this order. For example, you may choose to jump to #3, then take #4, and never take #1 or #2.
Introduction to Computer Science Principles: This semester-long course is for everyone, 9-12, those with and those without coding experience. Students will need to think logically, problem solve and do some math, which is why algebra I is a prerequisite. Homework is very light as we attempt to get all our work done in the classroom. We regularly work on labs that are instructive and self-paced. Classroom presentations are short and usually hands-on. There are four projects: Story Telling, Pong, Platform Game, and a final project of your choosing. There is lots of room for creativity and collaboration. The programming language is deep and allows the advanced programming students to learn important concepts and methods. Yet, it is also very graphical in nature, allowing for the artistically inclined to express themselves with animation, sounds and drawings. Here is a video of projects created in Fall of 2018-19.
AP Computer Science A: This yearlong course is the core of the Computer Science curriculum and is a great way to kickoff your journey into a Computer Science or related major. Students will spend the year learning to program in Java and some may choose to pay a University of Washington CSE 142A tuition fee for college credit. Due to the workload and rigor of the class, 9th graders are discouraged from taking this course (although some freshman have completed the course with an A). Students should be prepared to do a lot of work, and be happily rewarded. Many students without any prior computer experience have discovered a passion for CS in this class. Algebra II is a prerequisite. See student testimonials here. This class can fulfill a Math requirement.
Advanced Topics I & II: The focus of these semester long courses is to identify a meaningful and appropriate programming project where students will independently study & research topics that enable success in their project. Ideally, students would enroll in two semesters to reap the full rewards of the independent study. The course can be retaken for credit as many times as desired where only the first semester includes presentations, homework and quizzes intended to extend one's algorithm and data structure knowledge. Students are required to have successfully completed AP Computer Science A before taking this course and need to be ready to demonstrate maturity by being self-driven and highly motivated.
Freshman: I recommend you take Introduction to CS (#1 above). If you have some programming experience, or are particularly strong in math, and you are looking for a challenge, AP Computer Science Principles (#2 above) would be a good, yet challenging class to start with.
No Experience: If you have not ever done any programming, your first course really depends on your level of math, your time availability, and your interest in solving puzzles. Generally, if you're good at math and solving puzzles, you can choose to start with Intro to CS (#1 above) or either of the more difficult AP courses (#2 or #3 above). If you're the average math student, I recommend starting with Intro to CS (#1 above) which is fun and accessible to all.
Strong but Unsure: If you aren't sure where you belong because you are an AP quality student, but you're not so sure you're ready to do lots of programming, then you should start with AP CS P (#2 above).
Lots of Experience: The strongest course is the AP Computer Science A (#3 above). I've had some seriously experienced programmers in this course and they still learn a lot. Once you complete this course (or an equivalent), you really should take the Advanced Topics course (#4 above) because you'll get to dive deep into your areas of interest.
Below are the descriptions of the courses as found the in course catalog along with supplemental information.
INTRODUCTION TO COMPUTER SCIENCE PRINCIPLES
This introductory course offers students who are comfortable with math a hands-on learning approach to building creative projects and learning about the science of computers that surrounds us every day. Students create classic arcade style games such as Pong, Flappy Bird, Frogger, Pit Fall, Pac-Man and Asteroids. The course is far more than just a fun, collaborative environment for learning to program graphical and engaging games in Snap (a block-based programming language). The class is based on the UC Berkeley CS10 course and gently introduces students to game design, algorithms, procedural decomposition, object oriented design, concurrency, agile development methodologies, project management, refactoring and optimization.
This course is based on UC Berkeley CS10 and is an introduction to programming for students who have completed Algebra I, are comfortable with math, and looking for an opportunity to build creative projects. We will complete a number of interesting and challenging projects to demonstrate that programming provides a powerful set of tools for creative expression
We will be using the freely available Snap! visual programming language, an easy-to-learn language that allows for easy development of fun storytelling and game programs. The problem-solving skills students gain in this course will be helpful no matter what field they choose to pursue. The experience of writing programs will make them more savvy software users.
The course is the most introductory of the computer science offerings and would be many students' first course in computer science. Although the material is for the beginner, the projects are open-ended allowing students to exercise Snap's more advance features such as concurrency, recursion, cloning, and custom block creation.
AP COMPUTER SCIENCE PRINCIPLES
In this course, students will learn the fundamentals of computing – including problem solving, working with data, understanding the internet, cybersecurity, and programming. Students completing this course should leave with a broadened understanding of computer science for use in diverse majors and careers. Those wanting to earn AP credit will submit two “through-course performance tasks” to the College Board for grading, and will take a multiple-choice end-of-year exam. This course is not a prerequisite for AP Computer Science A, but AP Computer Science A is the logical follow-up class for students inspired to study computer science more deeply after completing this class.
This course is for students who have no computer programming experience; there are no computer science prerequisites to the course. However, it is an AP level course where students are expected to have a sound foundation of mathematical reasoning and written communication. The material covers a wide variety of concepts and potentially multiple computer languages that are quite different from one another. The course does not engage in extensive programming in any single language, but attempts to convey broader knowledge and concepts found across computer technologies.
AP COMPUTER SCIENCE A
This AP and College in the High School course introduces students to the fundamentals of computer science by teaching Java, an object oriented programming language. No prior programming experience is necessary to enroll, but the course is fast-paced and meant to replicate a college introductory programming class (CSE 142 at the UW. Students may choose to enroll for UW credit). Students are challenged to solve difficult problems and to develop object oriented code. Students will learn topics that include procedural programming (methods, parameters, return values), basic control structures (sequence, if/else, loops), file processing, collections, object-oriented design, and recursion. This course prepares students to take the AP CS A Exam in May.
Advanced Placement Computer Science is rigorous and fast-paced meant to replicate a college introductory programming class. The prerequisites are successful completion of Algebra II course, strong reading skills and a willingness to work hard!
This course will cover fundamentals of programming syntax and methodology using the Java programming language. Java is a good choice because it has all the features expected of a modern language while having fewer subtleties than, for example, C++. Java is also one of the languages in the highest demand in industry.
The course will be based on University of Washington’s excellent CSE 142 course and students may be able to qualify for UW credit through the UW in the HS program.
ADVANCED PROGRAMMING TOPICS 1 AND TOPICS 2
This course provides an opportunity for highly motivated students who have completed a yearlong college-level Computer Science course (AP Computer Science A) to continue their studies in this field. In this course you will learn about advanced data structures and algorithms, while expanding your knowledge of object-oriented programming. As the year progresses each student will be given increased flexibility to focus more deeply on the topics and technologies that catch and hold their interest.
This course will allow students who have completed the AP computer science course to expand their programming knowledge and work on significant projects. Lessons on software development processes, project design & management, and other topics will assist in completing the projects as well as advance their programming skills. Project design process will be taught during the semester to provide a method of better refining ideas and creating effective and useful projects. Students taking this course will be expected to be self-directed and ambitious. These projects will allow students to experience the satisfaction in creating relevant projects of their own design to demonstrate the value and power of computer science.