Intro to Computer Science

Note: All links in the following paragraphs are completely optional reading and are included solely for the interest and amusement of the reader.

What Is Computer Science?

There isn't one right answer. Computer science means a lot of different things to a lot of different people. For some, it means building a web application that allows you to connect and keep up with your friends. For others, it means engineering self-driving cars. For yet others, it means lots and lots of math. And so on.

Generally speaking, computer science answers the following questions:

  1. What can we compute?
  2. How do we compute it?
  3. What can we do with that?

In this sense, computer science isn't about computers—that's closer to electrical engineering—and it isn't really a science—scientists discover, we invent.

Computer scientists are like engineers: we build cool stuff, and we solve problems.

Complexity and Abstraction

All interesting problems in computer science are inherently complex—as are their solutions.

Consider your web browser, the program you're using to view this page. Clearly, it solves an interesting problem. It's also highly complex: when you type in a URL, your browser has to determine which server to contact, ask that server to give it the webpage you're looking for, download the webpage, interpret the webpage, and display it on your screen. Each of these steps contains its own complex parts.

How does all of this fit together? In one word: abstraction! Abstraction allows us to treat a complicated process as a single unit, and to use that unit in an even more complex process.

We already use abstraction in our daily lives: To drive a car, we have to know how to steer and operate the pedals, but we don't have to know how the engine and drivechain work. To bake an apple pie, we need a recipe and an oven, but we need not grow our own apples or understand how they are grown. And to use the internet, we don't have to understand the protocols for requesting webpages—our browser abstracts that process away, so that anyone can browse the web quickly and easily.

In this course, we'll explore techniques for creating abstractions to solve problems.