University of Virginia, Department of Computer Science
CS200: Computer Science, Spring 2004

Registration Survey Summary Responses

There are 30 students in the course.

Your Names:

Alex, Ben, Bill, Chelsea, Cris, Dan, Darryl, Debora, Erika, Erin, Evong, Haben, Henry, Jon, Kate, Kristina, Lauren (x2), Leah, Lincoln, Marija, Meeky, Nicole, Preston, Raquel, Redcliff, Seth, Steven (x2), Susan, TJ

5. Majors

Art, Biology, Biomedical Engineering, Business, Cognitive Science (10), Computer Science (6), Economics, Electrical Engineering (4), English. Maybe History, Media Studies, possible CLAS CS program (see, Psychology (2.5), Systems Engineering (3), Undecided (4)
6. Year
First: 5
Second: 9
Third: 15
Fourth: 4
Community Scholar: 1
7. How did you find out about this class?
Recommendation from a friend who took this course or CS201J: 12
Found in COD: 7 Recommendation from a faculty member: 6 — Jim Cohoon (2), David Evans, Worthy Martin, Jane Prey, Dean
Advising recommendation: 3 — CLAS Open House, Cognitive Science, Systems
From CS201J: 4
Cognitive Science email: 1
8. Why are you taking this class? 9. Have you ever written a computer program?
No: 10
Yes: 23
10. What programming languages have you used and how much? 11. Who is your intellectual hero and why?
Family Scientists, Inventors, Explorers Teachers Others None
Those of you who are still looking for an intellectual hero will encounter some candidates (not all good ones) in this class including: Euclid, Ada, Grace Hopper, David Letterman, John Backus, Thomas Watson, Filus Bonacci, John Lennon, Paul McCartney, Guy Steele, Gerry Sussman, John McCarthy, Alonzo Church; Tony Hoare; Neil DeGrasse Tyson, Thomas Jefferson, Tommy Flowers; Alan Kay, Kristen Nygaard, Ole-Johan Dahl, Steve Jobs; Aristotle, Netwon, Whitehead, Russell, Epimenides, Gödel; Alan Turing; Von Neumann; Heisenberg; Barbara Liskov; Homer, Marco Polo, Claude Chappe, Edelcrantz, Kleinrock, J.C. R. Licklider, Bob Taylor, Vannevar Bush, Tim Berners-Lee and Leonard Adelman.

If I have to pick just one, it would be Richard Feynman. Feynman was best known as a physicist, but he was also an accomplished computer scientist, musician, adventurer and a tremendous teacher. Feynman actually taught a course quite similar to this one in the early 80s --- his son, Carl, was a student at MIT and took the intro CS course from Gerry Sussman (based on the notes that turned into the textbook we use in this class). Then, Prof. Sussman went visited CalTech and Feynman and Sussman co-taught a CS course based on those notes.

I encourage everyone to read, "Surely You're Joking, Mr. Feynman!": Adventures of a Curious Character and What Do You Care What Other People Think?: Further Adventures of a Curious Character. After this course is over, you may also want to read Feynman Lectures on Computation.

Anything else you think I should know about you?
(Selected comments)
Anything you want to know about me or the course?
What will I need to do to be successful in your class?
In the two previous years I have taught this course, I believe all of the students who stayed with the course were successful, both in terms of learning and understanding important and interesting things, and in more superficial terms (no regular student has received lower than a B in this course, although of course, there is no guarantee that this will be true this year).

To be successful, you need to:

  • Keep up with the course — its very hard to catch up if you fall behind. Each assignment builds on the previous one, and if you don't do one of the assignments, it will be hard to catch up on the next one.
  • Be willing to try to figure something out even if it seems overwhelming at first. Be persistent enough to keep trying even if things don't make sense right away.
  • Be willing to ask for help (of me, the assistant coaches, and your fellow classmates)
Is it ok if we still don't have the books? They're not in the bookstore yet!
You definitely need to read SICP before doing PS1. But, the full text is available on the web at at I hope everyone will be able to find GEB soon, but don't worry if you aren't able to get it until the second week.
Are you sure I'll do ok in this class without the experience?
Yes, this course is designed to be accessible to students with no previous experience. In past years, the best students in the class often had no previous experience beforehand. (There are, of course, other reasons someone might not do "ok" in this class, but lack of experience is not one of them.)
how available will you be if we need to come to you with any problems?
As much as possible. My office hours are Wednesdays after class and Thursdays 4-5pm, and I am available other times by arrangement. As you know, professors have lots of other responsibilities in addition to teaching classes, so I can't promise to always be available on short notice. I can promise, though, that if you email me to arrange a meeting, I will be able to do this within a reasonable time. I don't generally mind if students come by my office at times other than my office hours, but I might not always have time to meet with you unless you arrange it before.
Will you really give someone an A even if they didn't get the corresponding test scores?
Yes, I assign final grades based on all information I have. If you have done other things in the course that convince me you deserve an A, then you will get an A even if your scores alone would not merit one. The assignments and exams are intended to teach you to think like a computer scientist by the end of the course, and if I am convinced that you can, then you will receive an A whatever the average of your scores may be. (On the other hand, if all of your scores are bad, it will be difficult for you to convince me you actually learned what you should have.)
How will computer science evolve in the future? Will computers be able to think like people? How do you feel about this?
Computing technology will continue to make rapid progress, and I expect Moore's law to continue to hold for at least another decade. Progress in computer science is slower, and I think it will take some major breakthroughs before the big questions are answered, but I do expect them to be answered in my lifetime.

I don't think computers will ever think exactly like people, but computers will have computational capacity comparable to the human brain by around 2015-2025. Computers already can do many things that people used to think required "intelligence" much better than people, and can do as well as nearly all humans on many tasks that are considered highly creative (e.g., playing chess, composing music). But, computers are a long way off from being able to perform many "simple" tasks as well as a baby (e.g., face recognition, language learning).

I think it would be a shame if computers become so good at the things we believe make us uniquely human as to make human involvement in those things necessary only for nostalgic purposes.

What are your personal interests and why are you teaching this course?
When I was a first year undergraduate, I took 6.001 from Gerry Sussman, which is what the SICP book is based on. That course inspired me to want to be a computer scientist. Since coming to UVa, I've believe the most important thing I can do is make most students learn some real computer science. You can read more details about my motivations in my fellowship proposal (which I wrote to get to start this class two years ago):
Why did you decide to offer this course, and what is your background?
See about for the first question. For the second, I grew up in the northern suburbs of Detroit, Michigan, and went to MIT for college. I did my undergraduate degree in Computer Science, and stayed at MIT to finish a Masters and PhD. I joined UVa in Fall 1999. See my home page for more.
What projects are you working on or have you worked on?
My main research interests are security and programming languages. The main projects I am currently doing are:
  • Programming the Swarm — how can we program collections of dumb, unreliable components to perform in a coherent and useful way
  • Security in Physical Networks — designing cryptosystems for networks that are deployed in a physical environment
  • Hybrid Analysis — what can we learn about programs by combining results from static (analyzing the code) and dynamic (analyzing an execution of the program) analyses.
The major past projects I have done include Splint (a tool for finding security vulnerabilities and programming mistakes in software) and Naccio (a system for defining and enforcing safety policies on untrusted program executions).
What kind of program languages we will be learning
We will use Scheme for problem sets 1-6. For problem set 7 and 8, we will use some other languages (most likely PHP, SQL and HTML). By the end of this course, you should feel confident that you understand enough about how languages work, that you can learn whatever language you need on your own.
Not really... maybe you could tell me, though, what class I could take in the future if I also wanted to learn some more programming, with C++, Java, or whatever.
CS201 would be the most natural class to take after CS200 (unless you've already taken CS201). At the end of the class, I can give you better ideas what courses would make sense for you depending on what parts of this course you are most interested in.
Using these Materials