Solution Home | Administrative Concerns | Pre-K–K | 1–5 | 6–8 | 9–12 | Teaching Teachers

Solution: Grades 9 to 12

Learning Objectives:
Unfortunately, many design tools and computer languages focus considerably low-level details. For example, in many development tools the programmer is forced to "use explicit storage allocation, so the programmer must think about the size, location, and extent in time of each data aggregate. They use strong typing, encouraging the programmer to concentrate on the precise encoding of symbolic information rather than on the meaning. They provide half a dozen specific, hardwired control structures, emphasizing the sequence of events in a computation rather than the input-output behavior of functions. Complex data structures are manipulated with explicit pointers, a common source of confusion and bugs" (Fellows).

While such complex languages certainly are powerful for the right tasks, even at the high school level it is vital to focus attention on programming languages like Java and Python that do not require such extreme attention to low-level details. These languages emphasize expression and design over details, minimizing the time and effort spent teaching syntactic details, pointer arithmetic, and other technical points. These languages also provide much more intuitive error messages that minimize the time spent debugging. While debugging is a great skill for a computer scientist, debugging syntax errors such as missing a semicolon or using = instead of == just causes frustration.

Thus, the proposed high school curriculum continues to introduce students to the most important concepts from computer science while avoiding technical issues that will be best covered when students have encountered advanced algorithms and memory management concepts from the typical undergraduate curriculum. This way, students who may not pursue computer science past high school will leave with useful skills that they can apply to future jobs or higher education.

Alignment with existing criteria:
At this point of the students' computer science education there is no need to worry too much about aligning the CS curriculum with other subject areas. By this time students will be adequately prepared to tackle CS concepts in the same way that they tackle Calculus concepts. High school calculus doesn't try to align itself with geography, and if we are to make CS into a core subject, then it also should be stand-alone by this point. In addition, students have had considerable experience with programming and algorithms at this point.

9th grade: Introduction to Java—the students will cover topics in Java that are similar to what they had learned in Python in middle school. To motivate the change in languages, additional libraries could be introduced, such as the Java Swing library for creating user interfaces.

10th grade: The main focus will be on object-oriented design. Students will learn to create their own classes and set up relationships between them. Students then will apply object-oriented techniques to creating interactive simulations and a game.

11th grade: The suggested curriculum thus far constitutes sufficient and indeed rigorous preparation for the AP Exams in Computer Science (A or AB). These courses will also have to be adjusted accordingly to match the level of advancement of the students. AP Computer Science will have to change from being an introduction and exploration of data types and simple algorithms. We suggest that algorithms, threading, synchronization, and some GUI programming be the main centers of attention for the new AP class. This will be necessary because students will have already been introduced to the existing AP curriculum, and moreover, in two separate languages.

12th grade: Senior Project/Advanced Topics in Computer Science—This is a very open-ended culmination of the curriculum for students intending to pursue careers or higher education in computer science. The 12th grade class could focus on any one or several of the following topics:

  • Advanced Java/Python topics, including networking and user interface creation
  • C/C++, including pointer manipulation and memory management
  • LISP/Scheme, possibly as they relate to artificial intelligence or theoretical computer science
  • Relational Algebra and SQL for making high-traffic websites or sites that store large amounts of data
  • Advanced HTML, JavaScript, AJAX, and web design
  • Game design and graphics
  • Numerical computing and simulation

Early Acquisition of Computer Science · ©2008 Justin Solomon and Peter Rusev