Computer science is all about problem solving; writing code is a lot like working out a puzzle. It’s a discipline that changes the way you think. It can turn everything you do into a step-by-step challenge. For instance, if you get up late in the morning, you probably ask yourself (even if you’re too sleepy to be aware of the steps): “How can I prioritize my time most efficiently? What is the most important thing I have to do? What will take longest? What can I eliminate to save time?” You’ll find that learning the syntax of a new computer language is not all that different from learning new vocabulary as you study another spoken language.
Not only is computer science fun and intellectually stimulating, it is also the fastest-growing occupation out there. Skilled young programmers are in high demand and will be for the foreseeable future. The tech giants are constantly searching for new talent. The work of computer science is woven into pretty much every field in the “real world” today—medicine, finance, education, art making, public relations, museum work, business, architecture—the list goes on and on.
In Boston we are extremely lucky to live in one of the great technology hubs of the nation. If you’re an enthusiastic computer science student, you’ll have matchless opportunities to land projects with innovative companies. Often these can turn into well-paying summer jobs or can evolve into long-lasting internships.
- Computer Science 1: The Design of Computer Programs
- Computer Science 2: AP Computer Science Principles
- Computer Science 3: Data Structures and Algorithms
- Computer Science 4: Advanced Topics in Computer Science
If you like problem-solving and making things, this hands-on introduction to the major ideas behind the design of computer programs might be for you. Using the powerful programming language Racket, students will explore concepts like data structures, abstraction, and recursion as they create dozens of interactive programs, including video games, text editors, digital art programs (musical and visual), artificial intelligences, image filters (a la Instagram), website generators, and more. No prior experience necessary.
Students say...“After a semester of learning python, my classmate and I decided to learn java as an independent project. Our project week was not only a good self-learning experience, but it also helped me see the differences and similarities between python and java. After my week’s work, i see programming as a whole in a completely different way.”
AP Now that you know the fundamentals of program design, you are ready to explore a broader array of technical concepts: the encryption of documents, the analysis of “big data," the structure of the Internet, and so much more! In Computer Science 2, you will continue to expand your repertoire of coding techniques, as you begin to write more powerful and sophisticated programs (in fact, you will learn entirely new programming languages, like Go, SQL, and Elm). But you will learn those techniques in order to explore the exciting and important ideas (both technical and social) at the heart of computer science—not just for their own sake.
You might write a program to analyze the tweets of politicians, and learn about the concept of an "application programming interface.” Or perhaps you'll code a web app that lets you send encrypted messages to your friends, learning along the way all the technical details behind public debates about privacy and surveillance. With the skills you’ll develop, the sky is the limit!
This course also prepares students for the new AP Computer Science Principles exam in May.
Students say...“I decided to do a computer-programming project, and quickly realized that the most exciting option was to learn a new language, immersing myself in a totally fresh way of thinking. Internet research indicated that I’d enjoy a language called Haskell. I much preferred this learn-as-much-as-possible-about-something-new project to, say, a project that stayed within familiar paradigms. I find the approaches and habits that go with the constraints of different languages to be a fascinating part of the thought behind programming. Haskell is certainly an excellent language for someone who wants an immersion in functional thinking, and I think it’s beautiful to people who get along well with the mathematical and the logical.”
In CS 3, we take a deep dive into the computer, learning what actually happens under the hood when you use the functionality that’s built in to languages like Go and Racket. You’ve heard of a computer’s “memory”—but what is it, really? And how exactly is it used by the programs you write? Can we use that knowledge to make programs run more efficiently? It turns out these are pretty deep questions, and to answer them, we’ll take a two-pronged approach.
First, we’ll learn C, a low-level programming language with a lot of power, but none of the bells and whistles that other languages provide. Using C, we’ll implement a lot of those bells and whistles ourselves (like versions of Racket’s all-powerful lists, or Java’s ArrayList, HashSet, HashMap, LinkedList, and so on). Second, we’ll learn the mathematical tools that will enable us to analyze and prove things about the code we’ve written, and answer questions about how to make it faster. Apart from being fascinating in its own right, this is the theoretical material every software engineer needs to know, and is the equivalent of a second-year course in a typical university computer science program.
Students say...“I have now implemented most major data structures. I know exactly how they work. The computers 3 class is literally just students working together to write data structures. It's the definition of engagement and co-operation."
After three years of study, students are ready to move on to more advanced material. Each spring, the coming year’s CS 4 class chooses a topic or series of topics that piques their interest, and starting the next fall, we work through a custom curriculum designed to provide an in-depth look at that field (or those fields). Past topics include mobile app development (for iOS and Android), compiler implementation, artificial intelligence, type-directed functional programming, computational complexity theory, computer architecture, and programming language semantics.