Reflections on Computer Science

We at U Prep are partway through the redesign of the school’s computer science program, to reimagine it as the study of foundational principles of computational thinking, accessible to all students regardless of prior background, and inclusive of highly engaging specialities such as robotics and website development.

The full plan includes three computer science elective classes, the integration of computer science activities into required middle school classes, and advising student clubs in robotics and other technical pursuits. This way, we will give all students the opportunity to do computer science and also provide those interested in further study an array of engaging opportunities at more and less technical levels.

While we put the full plan into place, we decided to offer a computer science course to students this year, even though our new model was not yet fully developed. Student interest was very high, and teaching a class would give us first-hand experience with developing curricula around these new principles. We staffed the course by hiring a subject-matter expert to partner with me as the experienced teacher. At the same time, we began the search for a full-time computer science teacher for next year.

We designed the course to teach fundamental concepts in algorithmic processing and data structure design through programming activities, so that students would receive explicit instruction in foundational principles of computer science while also learning programming skills. Programming was the most common learning activity, and key concepts included use of functions to repeatedly perform tasks, thinking logically and sequentially, breaking a problem into smaller parts, and figuring out how to organize real world data into structured elements. We made explicit links between the problems students were solving and the underlying concepts and thinking skills that are used throughout computer science.

We wanted students to learn to program in an environment that they would be able to use subsequently in future courses and their personal pursuits, to mirror how computing is now used in all fields of study and professions. We chose JavaScript as the development language for several reasons. The web-based applications that students commonly use (e.g., Facebook, Google Drive), are written in JavaScript. Study of JavaScript helped demystify software development, as students recognized the input elements and output formats that they created. While not an entirely strict language, JavaScript has consistent enough structure and data typing that we could teach these principles perfectly well. The development environment (Komodo) is free and multi-platform, ensuring that students could develop using their own computers and continue to use what they learned after the course was complete. The output environment (Chrome web browser) is familiar, yet students gained a new level of understanding of web page structure and performance as they created website software and debugged it using Chrome’s developer tools.

Most class time was spent writing code to solve specific problems, small ones at first and larger ones later. Students analyzed grade level enrollments, Sounders FC player salaries, and animated bouncing balls and streaming bubbles. Each activity built up students’ understanding of programming constructs, input and output, functions, parameters, and return values, conditionals and loops, arrays and objects, speed and memory usage, and more.

Students completed both a substantial individual project and a self-designed group project. In each, we explored how to analyze a real-world problem and design a solution, how to create, test, and refine software, and how to bring a project to completion. The group project introduced new dynamics: how to share, divide, and reconcile project design and development tasks among team members, and how to use an online, collaborative development environment to work on a project within a team.

Students also completed an individual research activity, in which they found and interview a computer science professional and made a short presentation to their classmates. This helped broaden students’ concept of what it means to do computer science work. Not all interview subjects were software developers, and a number applied computer science to other fields. Students learned that computer science is useful in all pursuits.

Bubbles activity
Practice with arrays, objects, Canvas, loops, and functions


  1. Page says:

    Hi Richard –
    Thanks for your post. We seem to be about 1 year behind you in our development of a CS curriculum. Do you have any links to your class, course description, syllabus, or anything to share. I am working on drawing up a description for a course that we will offer next year and I’m collecting examples. Your description fits in very well with what I have come up with so far. I can’t wait to read more about your adventure.

  2. Richard says:


    Thank you for your comment. Currently the curriculum is in GitHub, so let me ask our second semester teacher whether he’s ready to have others view it. We have not documented the curriculum in any single document at this point in time.