CSCI 101: Survey of Computer Science (with robots)

General Information / Readings

Professor: Simon D. Levy
Lecture: MWF 9:05 - 10:00 Reid 111
Lab: Thurs 1:25 - 4:30 Parmly 405
Office: Parmly 407B
Office Phone: 458-8419
  Office Hours: Daily 11:15-12:10 and by appointment

Textbook: Deepak Kumar, Learning Computing with Robots. Available free online, and as an ebook or paperback from and the campus bookstore.

We will also read and discuss How robots think: an introduction.

A third reading will be a short book that you choose from list, or a similar book that interests you and that I agree to.

Course Overview / Philosophy

In the past we have taught this course as a survey of the field of computer science, with topics ranging from computer architecture through the technology behind the internet. Because of the recent explosion in availabity of inexpensive, powerful, programmable robots, and because my own work has moved in this direction, we thought it would be fun to try out a curriculum based on robotics, which has proven popular at other universities.

Our Scribbler S2 robots can be programmed in a number of ways, including a simple Graphical User Interface and the BASIC programming language taught as a first language to generations of nerds like myself. We however will program our robots in Python -- not only the language of choice for introductory computer science courses worldwide, but also a technology used in cloud storage, animation, drug discovery, and a host of other industry and research settings. Even if you never take another computer science course, knowing a little Python will make you both a better analytical thinker and a more more marketable candidate for a job or grad-school program.

More important to me, though, is our University's mission to provide a liberal arts education that develops students' capacity to think freely, critically, and humanely. So I will also ask you to read a book that looks at science and technology in a critical or novel way, and to write a short paper (eight to ten pages) about the book and what you think of it. I hope you will come to see the modern division between the the sciences (“I don't understand poetry”) and the rest of the liberal arts (“I hate math”) as artificial and deeply misguided, and to appreciate the spirit that animates both.

How is this course different from Computer Science 102 / 111 / 121 ?

The Computer Science Department offers four courses that satisfy the Foundational Math / Computer Science (FM) distributional requirement for a W&L undergraduate degree, and have no prerequisites or assumed background knowledge: CSCI 101 (this course), CSCI 102, CSCI 111, and CSCI 121. In CSCI 102, the focus is entirely on computational modeling, as is used in biology, medicine, ecology, weather forecasting, economics, and many other fields. CSCI 111 is a required, general introduction to programming for Computer Science and Math majors and anyone interested in gaining general programming skills. If you are a science major (e.g. Biology, Geology, Neuroscience) and need to learn to program right away for your research, CSCI 121 would be of more immediate use to you.


Knowledge, like many other artifacts, tends to be stronger when it's built at a slow and steady pace. So instead of having a big midterm and final, this course will feature a weekly quiz, based on the reading and class discussion. Along with the weekly lab exercises, these quizzes will constitute most of your grade. Because everyone has an occasional bad day, and absences are sometimes unavoidable, I will drop your lowest quiz or lab grade. But otherwise I expect you to attend every class and lab session: with the exception of unavoidable absences (job interview, family/medical emergency/varisty sports meet), there will be no make-up quizzes or lab sessions . Because we have more students than robots, you may end up working on the programming component of the labs with a teammate or two – which is actually a better way to code than working by yourself. But the written part of the lab should be yours alone.

The grading scale will be 93-100 A; 90-92 A-; 87-89 B+; 83-86 B; 80-82 B-; 77-79 C+; 73-76 C; 70-72 C-; 67-69 D+; 63-66 D; 60-62 D-; below 60 F.


Because labs count for 40% of your grade, it's obviously important to show up for every lab and do the work. Working with robots is fun and challenging, so I'm hoping that you'll look forward to lab rather than seeing it as a chore. Most of the lab work will be done during the three-hour lab period, followed by an hour or so on your own doing the (very minimal) write-up.

Because students always come up with such great ideas for robot projects, I want you to spend two full lab periods (Thursday 21, 28 March) working with your teammates on a project of your own designing. During the final lab session (Thursday 04 April) you will present your project to the class (friends and family are welcome too!) Since the final project will take three of the 12 lab sessions, it will count for 1/4 of 40%, i.e., 10%, of your overall grade. To encourage excellence, we will hold a contest where your peers will judge your project. I will rank the outcomes, which will count for 3% of your overall grade. I will need a short proposal (a paragaph or so) on your final project by Friday 04 March.

Submitting Work

Everything you submit in this class will be either a Python program (.py extension) or a writeup in Portable Document Format (.pdf extension). As a general rule, you should never send anyone a document in Microsoft Word format (.doc extension), unless you plan to edit the document and send it back (and even in that case, there are better ways of collaborating.) You should also be sure to name every document in a way that identifies what it is and who wrote it; for example, for the Python program I wrote with my labmate and lab1_levy.pdf for my writeup.. To encourage this kind of professionalism, I will immediately take 25% off any submission that is in the wrong format or lacks identification in its name, whether or not you re-submit it. Programs and writeups from the labs will be due by midnight the day (Friday) after the lab. You will get zero credit for late work.

Another aspect of this course that may be new to you is the “ no credit for trying ” principle of computer programs: if I try to run your Python program and it crashes immediately, you will get no credit for it, no matter how hard you worked on it.

Suggested readings for short paper

Tentative Schedule of Lectures, Assignments, and Quizzes




Thursday Lab


07 Jan
Week 1
Course Intro Read: How Robots Think

Group exercise

Lecture: Bayesian Reasoning
Lab #1 Quiz #1
14 Jan
Week 2

Lab #1 Follow-up: Unix

Lab #1 Follow-up: Unix
Lab #2 Founders' Day Schedule: Class meets 8:55 - 9:40
Quiz #2
21 Jan
Week 3

Lab #1 Follow-up:
Binary / Hexadecimal

Lab #1 Follow-up:
Python Intro
Lab #3 Quiz #3
28 Jan
Week 4
Lab #4 Quiz #4
04 Feb
Week 5
Lab #2-4 Follow-up:
Further into Python:
Lab #2-4 Follow-up:
Further into Python:
Lab #5 Quiz #5

11 Feb
Week 6
Further into Python:
Random Numbers
Further into Python:
Random Numbers
Lab #6 Quiz #6
25 Feb
Week 7
Lab #5-6 follow-up:
Python conditionals,
return values, and lists
Python conditionals,
return values, and lists
Lab #7 Quiz #7
04 Mar
Week 8
Lab #5-6 follow-up:
Images Lab #8 Society Society and the Arts Conference: No class

Project & paper propsals due
11 Mar
Week 9
Images Lab #6-7 follow-up:
Lab starts 2:05
Lab #9
Quiz #8
18 Mar
Week 10
Lab #8 follow-up:
Sounds & Signals
Independent project Quiz #9
25 Mar
Week 11
Tree Search Independent project Quiz #10
01 Apr
Week 12
Genetic Algorithms Project presentations Quiz #11

Book paper due