Solution: Grades 9 to 12
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
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
Alignment with existing
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 Javathe 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 ScienceThis
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
- Relational Algebra and
SQL for making high-traffic websites or sites that store large amounts
AJAX, and web design
- Game design and graphics
- Numerical computing and