Exploring the limits of what computers can do

How to succeed in CS46

CS46 is different from most other computer science courses, in that the course focuses on abstract thinking about problems, and does not ask you to implement every solution in code. This course is much more about reasoning about which problems are solvable by computers, and less about actually solving every problem with a coded project. To succeed in this course, you should consistently do the following:

  • Attend class and lab sessions.
    The primary introduction to course material is through class instruction. Attending class is essential for understanding the subject. Lab sessions provide additional time to work on solutions. Lab attendance is mandatory.
  • Participate actively in the learning process.
    The best way to learn this material is through constant effort. This means trying to work out proofs yourself rather than simply reading through solutions. During class we will often derive solutions collaboratively. Labs provide additional time to experiment with solutions. There is a very strong correlation between students who ask questions (in class/lab/office hours/Piazza) and students who do well in this class.
  • Start the homework assignments early.
    CS46 is not a coding-heavy course; it is a course with an emphasis on rigorous thought and explanation. It is extremely difficult to bang out proofs and solutions at the last minute. I understand that it is not always possible to put serious time into an assignment early. However, even 30-60 minutes will be helpful, to ensure that you understand what the problems ask of you and you start thinking about how to solve them early.
  • Seek help early.
    It is essential in this class that you not fall behind. If you find yourself falling behind, or if you're having trouble grasping a concept, come to office hours. Ask (and answer!) questions on the course discussion forum. Set up an appointment to talk with me. Or just stop by my office when my door is open.