Skip to content

Syllabus

Course Description

Honors Computer Science Projects

This course is for students who would like to continue their study of computer science beyond AP Computer Science A, and to apply the skills they learned in that course. The class provides a workshop / lab environment for students to work independently on individual or group projects, to improve their coding skills, and to explore and tinker with new technologies. Students have freedom to pick their own projects, and are encouraged to try things they have never done before. They may choose any area of computer science, including but not limited to: computer graphics, video games, virtual reality, mini-computers / microcontrollers (e.g. Raspberry Pi, Arduino), physical / wearable computing, interactive art, simulation, data analysis, scientific applications, programming languages, web development, mobile development. Students may enroll in this class multiple times for credit.

Project Phases

Client consultation and project scoping

  1. Students identify the area where they want to work.
    Examples:

    • video projections / special effects in collaboration with the Performing Arts Department
    • data visualization in collaboration with the Journalism classes
    • web development in collaboration with the Social Justice program
  2. Students are matched with one or more clients / customers.
    Examples:

    • All School Dance Concert: clients are student dancers/choreographers
    • Journalism: clients are the school newspaper editors
    • Social Justice: the clients are representatives from local non-profit organizations
  3. Students have their first meetings with their clients where they agree on the scope of work and project timeline.

  4. Students start a Project Log that includes:

    • scope of work
    • timeline
      • research
      • design
      • proof of concept
      • v1.0 and iteration with feedback
      • final delivery
  5. Students continue to update their Project Logs each week, and they give status updates during Show & Tell in class.

Research and Implementation Plan

  1. Students research potential ways to design and implement their project. Students consider different options for:

    1. programming language(s)
    2. software libraries
    3. hardware requirements

    For example, for software projects involving video input, students might use Java, Javascript, or Python, depending on the specific application. For web development, students generally use Javascript, but also have the option to build static sites with Python.

  2. Students formalize their implementation plan as part of their Project Status document. The students meet with their clients to explain their plan (on a high level). Students present their plan in more detail in class to their classmates, to get feedback and ideas about implementation.

Implementation and Iteration

In this phase of the project, students actually write the code for the project.

  1. Students keep all project work in a GitHub repository.

  2. Students give regular updates on their project status in class.

  3. After creating a proof-of-concept, students start regular meetings with their client to show their progress and to incorporate client feedback.

Final Delivery

  1. The student delivers the final project to the client. For many projects, this involves a public performance (e.g. dance concerts, theater productions). For example, for collaborations with the Visual Arts department, this involves running their video projections at the All School Dance Concert or during theater productions. For Journalism collaborations, this involves ensuring that they meet all deadlines for the production of their issues. For Social Justice collaborations, this involves a final client meeting to deliver the website or data visualization.

  2. In all cases, students also present their final projects in 3 ways:

    • attendance at the Celebration of Innovation event at the end of the school year
    • project poster to showcase their work
    • video walkthrough of the project, where they give a demonstration of the project and also describe design and implementation details.

Learning Targets

Students are assessed on the following learning targets during their regularly scheduled code reviews (Show & Tell).

Discipline-Specific Conceptual Knowledge

Learning the principles of software design and complexity management. Learning how to debug, handle errors, and validate software through testing.

  • skills (depends on project)
    • language / target platform (e.g. Javascript for web pages, Processing for video games, Python for data analysis)
    • domain-specific techniques (e.g. 3D graphics effects, exploratory data analysis)
  • practice:
    • implementation of features on their project(s)
  • assessment:
    • regularly scheduled code reviews
    • final presentation / performance

Communication & Dissemination

Participating in code reviews, in which they present their projects to their classmates, communicate problems and solutions, and learn to give and incorporate feedback.

  • skills:
    • presenting technical knowledge in an understandable way
    • communicating the high-level design of a project
    • explaining problems and potential solutions
  • practice:
    • presenting project at code reviews
  • assessment:
    • regularly scheduled code reviews
    • final presentation / performance

Collaboration

Working on projects with classmates, and also collaborate with students in other fields (e.g. social sciences, community partnerships, performing and visual arts, scientific research)

  • skills:
    • collaborating with classmates on coding assignments or projects
    • communicating details about problems or errors
    • describing advantages or disadvantages of potential implementations
  • practice:
    • working together on coding assignments
    • group software projects
  • assessment:
    • regularly scheduled code reviews
    • final presentation / performance

Agency, Leadership & Professionalism

Managing projects by tracking progress on features and bugs, and prioritizing and scheduling coding tasks.

  • skills:
    • tracking and making regular progress on software projects
    • communicating progress and anticipating roadblocks
    • responding to feedback from clients or other collaborators
    • delivering software project on time
  • practice:
    • work on long-term software projects
  • assessment:
    • regularly scheduled code reviews
    • final presentation / performance

Design Process

Using design thinking to model and break down problems. Learning to create and implement useful abstractions, and prototype and evaluate solutions.

  • skills:
    • research and prototyping
    • controlling code complexity through the use of language features (e.g. functions and classes) and design patterns
    • evaluating potential implementations
  • practice:
    • long-term software projects
  • assessment:
    • regularly scheduled code reviews
    • final presentation / performance

Reference

(From the California Computer Science K-12 Standards)

The computer science core practices include:

  1. Fostering an Inclusive Computing Culture
  2. Collaborating Around Computing
  3. Recognizing and Defining Computational Problems
  4. Developing and Using Abstractions
  5. Creating Computational Artifacts
  6. Testing and Refining Computational Artifacts
  7. Communicating About Computing

Links: