Overview:   Computing, Programming, and Computer Science
1 Thinking about Email
2 So What Will We Do in This Course?
2.1 Organizing Data
2.2 Programming
2.3 Testing
3 Goals
4 Logistics

Overview: Computing, Programming, and Computer Science

Copyright (c) 2017 Kathi Fisler

Computer science is a huge field, and each of you may have a difference sense of what it is and what you might expect to get out of this class. So let’s start there – what do you think of when someone says "computer science"? What do you think computer scientists do all day?

Now let’s look at a particular application that you all know—email—and talk about what goes into making that work. That will help us describe many aspects of computing and computer science, while also helping us frame what we’ll do in this class.

1 Thinking about Email

Consider gmail (the Brown system) or some other mail service you accesss through the web or your phone. What sorts of tasks went into either creating gmail or keeping it running?

  • Users have to be able to create accounts. Each account holds several kinds of information.

  • Accounts need passwords so that messages can be kept private.

  • Messages need to get delivered from one user’s computer to other.

  • Features like tagging email (or putting it in folders) and searching email had to be designed and provided to users.

  • Someone needs to keep the machines that process the mail running.

  • Data needs to be "backed-up" or stored multiple places so that if one central computer goes down, users can still get their mail.

  • Someone had to design the visual look of the system and make sure that users without technical expertise, or users with disabilities, or users from multiple countries (and so on) could use it.

  • Some tool needs to figure out which ads to display to you (that’s how they keep gmail "free" for users).

The list obviously goes on, but this gives you an initial sense of how many different kinds of tasks go into this: user-design, security, privacy, machine maintenance, accessibility, data management, ...

All of these tasks have an element of computer science. Many involve other fields of expertise as well. When people talk about computer science being "interdisciplinary", they are talking both about all of the tasks that go into making modern computing-based tools, and all of the domains in which software and applications are now in use (medical research, self-driving cars, media production, gaming, and so on).

2 So What Will We Do in This Course?

Obviously, we can’t cover all of these topics in 7 weeks (you barely hit all of these in a 4-year concentration). So our focus is going to be three essential topics that underlie many of the others:

  • Identifying and organizing the data for a given problem (data design)

  • Expressing computations over data (programming)

  • Checking whether computations are producing the right answers (testing)

These topics have a role in many areas beyond computer science: most of you will organize data for some project or work task, and thinking through how to make sure something "works" is valuable whether or not that something is a program. As for programming, it’s increasingly useful to be able to do a bit of it in different contexts. Also, learning to program teaches you a bit about how computing devices work under the hood.

Right now, this is all a bit abstract, so let’s use email again to give a slightly more concrete example.

2.1 Organizing Data

What kinds of information does an email system manage?

  • Each user’s email address

  • Each user’s real name

  • Each user’s password

  • The sender of each message

  • The recipients of each message

  • The contents of each message

  • Which recipients have already read each message

  • And so on

Not surprisingly, the email system tries to organize this information—to put related pieces of information together so that the data is easier to handle. What might we store together?

Information about a single message belongs together, such as:

  • The address of the sender

  • The addresses of the recipients

  • The contents, which may include attachments

Information about an individual user belongs together, such as:

  • Their email address

  • Their real name

  • Their password

What about the information about which recipients have read which messages. Does that go with the messages, or with the recipients? You could argue for either. Does it matter? It does, because some organizations make it harder or easier to do jobs quickly, or privately, or clearly, and so on.

Figuring out data organizations, and how they support the various tasks that people or organizations want to do, is one of the key activities of computer science.

2.2 Programming

Now you want to compute something over your organized data. For example, you want all the messages that refer to your friend Jumi. How does your email tool find all the messages about Jumi? Does it look in a folder labeled "Jumi"? Look in the recipients list? The contents? Does it just look for Jumi’s name in the contents, or also her email address?

Programming is the act of telling a computer how to perform an action, such as searching for a name entered into a search box. You have to give precise instructions such as "find Jumi’s email address, then look at every email message, check whether that address is one of the recipients, and if so, display that message on the screen". You have to write these instructions in a precise notation, but this is the gist of it.

2.3 Testing

But how do you know that your instructions are right? If there are several million email messages in your system, how do you gain confidence that your program got all of the ones about Jumi and didn’t pick up others? There are good habits for testing programs, and we’ll cover those as well.

3 Goals

By the end of the course, you should have learned how to:

You will NOT learn how to build mobile applications, design user interfaces, create interactive websites, or set up databases or networks. The skills taught in this class are relevant to doing these things, but we won’t cover all of the skills that you need for these activities. You will get to do projects and assignments that have the core pieces of mainstream applications—you’ll get to see a bit of how things work, but I wouldn’t plan to switch to your own email product at the end of the summer.

4 Logistics

Everything you need is on the course website. Post to the Piazza board (linked into the website) or send me email if you have any questions.