teaching machines

CS 1: Lecture 1 – Introduction

September 6, 2017 by . Filed under cs1, cs145, cs148, fall 2017, lectures.

Dear students,

Welcome to CS 145: Programming for New Programmers or CS 148: Programming for Experienced Programmers!

It’s important to me that we have a comfortable working relationship. We are, after all, on the same team. You wanted to prepare yourself for a bright future, and so you asked me to give you some homework and exams to help you learn. Thank you for this opportunity! Because we’re on the same team, please call me Chris.

So that we can treat each other like humans, let’s get to know each other a bit. We’ll start with me. Here are some things about me:

  1. I am twice your median age.
  2. My wife and I have four children. I like you, but I love them and will not sacrifice them to you.
  3. I fell in love with the computer as a tool for making while trying to write a book in 5th grade.

What about you? I know a little about you already just by you being in these courses. These are the first courses in the computer science major, but lots of other folks take them too. Check out the distribution of majors:

But I’d like to know a little bit more about you. Please answer the following questions on a quarter sheet of paper:

  1. What’s your name?
  2. Where are you from?
  3. What’s the last book you read that wasn’t assigned?
  4. What’s something about you that isn’t visible?

Now let’s transition into discussing the content of these courses.

What prompted you to take this class? Very few high schools teach such a course. Maybe you heard that computer scientists get paid well. Maybe your parents put you up to it. Maybe you saw that Googlers get free oil changes and haircuts. Maybe you are a gamer, and this class is your vehicle to that dream job of working at a stress-filled and divorce-provoking business that is the games industry. It’s quite likely that many of you have no idea what we will do in this class. And that’s okay.

Let’s hear how some folks have described the activities of computer science and specifically this class.

In 1961, a computer scientist named Alan Perlis presented this analogy:

calculus : rates :: computer science : process

In this class, we will program a process that turns the user’s input into the desired output. In a sense, we will become authors of information cookbooks. Our code will be like a recipe, describing to the computer how to combine and manipulate the ingredients that are our data.

Sometimes people don’t know whether to computer science fits better as an engineering discipline or as a science. Software engineer and computer graphics researcher Fred Brooks has this to say about the matter:

The scientist builds in order to study; the engineer studies in order to build.

In this class we will study and build. You can be either an engineer or a scientist; I don’t care.

Seymour Papert, an inventor of the Logo programming language, says this:

Way back in the mid-eighties a first grader gave me a nugget of language that helps. The Gardner Academy (an elementary school in an under-privileged neighborhood of San Jose, California) was one of the first schools to own enough computers for students to spend significant time with them every day. Their introduction, for all grades, was learning to program, in the computer language Logo, at an appropriate level. A teacher heard one child using these words to describe the computer work: “It’s fun. It’s hard. It’s Logo.” I have no doubt that this kid called the work fun because it was hard rather than in spite of being hard.

This class is about hard fun. You will make the computer do things. It will obey your every command. You will discover that you the gap between you and the machine is wide. You will make a lot of mistakes. Thankfully, mistakes are free. The computer doesn’t mind trying again.

I personally summarize this class with one sentence: we will teach machines.

For the rest of our time today, we will introduce ourselves to programming by using Madeup, a Logo-like language for building 3D models. In your first lab, I will ask you to compose a model. We will make a few shapes: a polygon, a spiral, and a heart.

Often when we meet for lecture, I will ask you to do some reading or activities and jot down some observations or reactions on a quarter sheet of paper to be turned in at the beginning of the next class. Since I have a large pile of these to read and sort through, I ask that you form this quarter sheet by dividing a piece of paper in half exactly twice, once vertically and once horizontally.

Consider these quarter sheets as personal and relevant notes to me. Without them, I can only guess what’s going on inside your head.

I will have a box in front of the room for you to turn these quarter sheets in. That box will be whisked away soon after class starts. To receive participation credit, you must have your sheet in the box before it disappears. Don’t worry too much if you miss some. There will be occasional extra credit opportunities to regain participation points.

Here’s your TODO list of things to complete before next class:

See you next class!


P.S. It’s time for a haiku!

Read enough to know
That of all we teach machines
The first thing’s to stop


When we write code together in class, I will share it here. I recommend that you leave your laptops home. I think you’ll get more out of lecture by participating than trying to clone our work up front.