Exam Logistics


The first CS103 midterm exam will be held on Tuesday, April 30th from 7:00PM – 10:00PM in Bishop Auditorium.

Topic Coverage

The topic coverage for the exam is the material from Lectures 00 – 05 (set theory up through the end of our discussion of first-order logic) and the material from PS1 – PS2. Notice that you are responsible both for the material from lectures and from the problem sets, so you should be prepared to answer questions about topics that came up purely on the problem sets. Topics from later in the course (functions, set theory proofs, graphs, etc.) will not be tested. Coding questions are fair game for the exam; it’s assumed that you’ve worked through the programming exercises and are familiar with the syntax from those problems. You should expect the exam to be around four questions long, with a mix of formal proofs, practice with first-order logic and set theory, and short answer questions.

Exam Format

The exam is a traditional pencil-and-paper exam and will not involve or require computers. It will be three hours long. It's closed-book, closed-computer, and limited-note. You can bring a single, double-sided, 8.5” × 11” sheet of notes with you when you take the exam. We've seen all sorts of notes sheets in the past. Some students choose to write down important terms and definitions that they think they might forget. Others include sample proofs from their problem sets so that they can use them as a reference. We've even seen sheets of paper covered in inspirational messages. Do whatever works best for you – the whole point of the notes sheet is to be useful!

We calibrate exam questions and problem set questions very differently. The problem sets are built with the understanding that you have a full week to look over and think through the questions, that you can always ask for help from the TAs if you need it, and that you can look back over the material as necessary. Those problems are usually designed to hit at nuances of the material and to ensure that you have complete coverage of the core concepts. We also include some problems that exercise the material you've seen in entirely new ways. On the exam, however, the expectation is that you have to complete all of the problems in three hours, that you can't ask for help, and that you can't refer back to the course materials (except for what's in your brain and on your notes sheet).

Preparing for the Exam

There are a number of ways that you can prepare for this upcoming exam. Here is our recommendation of what you should do to get into the best shape that you can.

  1. Work through practice exams and extra practice problems. The practice exams are designed to give you an idea what the actual exam format and difficulty will be. The extra practice problems are to give you space to explore areas in further depth, as needed (for example if you identify an area of struggle when you take the practice exams).

  2. Review your feedback on the problem sets and make sure you understand it completely and unambiguously. The real learning in this class happens on the problem sets. That's where you practice writing proofs, learn how to engage with first-order logic, etc. Before going into this exam, you should make certain that you fully understand the feedback you received on the problem sets. If you made mistakes on some of the proofs, practice rewriting them while incorporating the TA feedback. It would be a shame if you made a mistake on the exam that you'd been told about on the problem sets. Also, be sure to read over the solution sets and make sure that you understand our solutions and why each question was asked – it’s important to make sure that you had the insights we wanted you to have and developed the skills we were pushing you to develop. If there are particular areas that you'd like more practice with, look over the extra practice problems and see if you can find some relevant problems. If you can't find any, just ask us – we can try to put some more problems together.

  3. Keep the TAs in the loop. As you're studying, please take the initiative to ask us questions when you have them. If you're not sure about why a certain proof works, or why a certain proof doesn't work, or why a certain concept works a certain way, etc., go on EdStem and ask us a question. If you worked through some practice problems, have the TAs review your answers and offer polite but honest feedback on how you did and what you need to work on. Remember that you can ask anonymously and/or privately if you'd like. You can also stop by office hours for in-person help!

Frequently Asked Questions

We want to be transparent about our grading philosophy for exams and our exam policies. Here's a quick rundown of some of the frequently asked questions about CS103 exams.

  • Can I cite results from lecture or the problem sets? Yes, absolutely! You are more than welcome to cite results from lecture, the course notes, the course website, the readings, or the problem sets and state them without proof. Don't copy the proofs onto the exam – that takes up TA grading time (and eats up precious real estate on your notes sheet!) and doesn’t accomplish much. If you do use a result from elsewhere in the course, please mention where the result you are citing can be found. We're happy to let you use results we've covered as a starting point, as long as we know what result you're referring to. For example, you could write something like “as we saw in class, since $m$ and $n$ are odd, $m+n$ is even.”

  • Do you give partial credit? We do award partial credit on the exams for answers that are on the right track but contain errors. Because you're allowed to bring a note sheet with you to the exam, we generally do not award partial credit for answers that just consist of a lot of definitions of terms mentioned in the question. The best way to earn partial credit on the problem is to make a good effort to solve it, and to do so in a way that shows you understand the underlying methodology we’ve been teaching. For proofs in particular, clearly articulate your start and end points and write an answer that follows the proofwriting checklist.

  • Can I write more than one answer to a problem? No, please do not do this. If you put down multiple answers to a question, we will grade whichever answer gives you the fewest number of points. This policy is in place to prevent “shotgunning” down multiple answers with the hope that one of them will work.

  • Do you grade for proof style? Yes. We’ll be grading your written answers the same way we grade problem set answers. Given the time constraints, we do understand that what you're writing is essentially a first draft. However, at a minimum, make sure that your proofs follow the guidance from the Proofwriting Checklist handouts: write in complete sentences, scope and introduce variables properly, avoid mathematical shorthand, make specific claims about specific variables, etc.

Advice from Generations Past

Many years back, we sent out an email to the Fall 2014 CS103 students list and asked them to offer advice about approaching the exams. We specifically asked them these four questions:

  1. What do you usually do to prepare for a theory midterm?
  2. What do you do right when you first start a theory exam?
  3. What do you do when you get stuck on a question on a theory exam?
  4. Anything else you want to share?

We were amazed by how many responses we got within 24 hours of sending out the email and how generous your great predecessors were. This handout consists of actual advice from former CS103 students who, not that long ago, were in exactly the same position you're in now. Thanks to the entire Fall 2014 CS103 class for this advice!

What do you usually do to prepare for a theory midterm?

  • Doing practice questions is key - that's when you really learn whether you can apply your knowledge. Keith is a pretty amazing resource in providing questions and support use it.

  • Review past problems…Turns out reading them wasn't enough! You have to go and see if you can write the solutions from your knowledge and logical reasoning.

  • Practice, practice, practice! It may seem useless to do practice problems because CS 103 problems often feel like they are based on luck or whether you happen to understand the problem. But when you do these problems over and over again, you will develop the general intuition needed to solve problems you haven't seen before.

  • For a theory midterm, I'd recommend reviewing all psets especially if you have worked on them with a team and didn't focus on certain problems as much as others. It's important to have a handle on the questions that appear in the problem sets since you might use one of the things your proved in a pset on a midterm!

  • The extra practice problems are a really good indication of what the actual exam will be like. Taking them in a simulated exam setting was helpful. Also going through the problem sets and making sure I actually knew how to do everything, esp. problems that my partner took the lead on. go over the solution sets!!!! and the tricks involved for each of them. and make sure you understand the phrasing and nuances of the problem.

  • I review both the lecture slides and my notes, focusing primarily on the concepts I least understand. I then complete as many practice midterms and problems as I possibly can. I think the key to preparing for a theory midterm is studying gradually, in chunks. Jamming everything on the night before the test is sure to turn into a disaster!

What do you do right when you first start a theory exam?

  • Take a breath! You can do this! Take a moment to look through the test. Then turn back to the first problem and take the time you need to think.

  • Look through all of the questions first, and do them in order from easiest to hardest. You want to maximize the number of points you get, so it sucks to have minimal time to finish a problem that you could have for sure gotten full points for if you had done it earlier.

  • Take a deep breath, scan over all problems and then get started.

  • Read the questions and for each one brain-vomit all the associated definitions and approaches that seem related.

  • Look through the problems, start generating insights.

  • In approaching a theory exam, I read through all the problems first, especially for ones that ask you to prove things, and then start working through the syntax problems (propositional logic) while I think about proofs in the back of my mind. By the time I get to the proofs, I feel more ready to tackle them and usually have something to get started on.

  • Read all the questions. Start thinking about the ones you find more challenging while you do the ones you're more comfortable with.

  • Stay calm. Start at the beginning, have scratch paper to scribble on, then start writing as soon as you think you have a pretty good idea of what your answer will be. Don't start writing a proof without a sense of where it will end, but on the other hand, don't wait until you have the entire thing ironed out in your head before you start writing. You'll figure out some of the details as you go. And if you have to cross some stuff out, that's fine.

  • Read all of the questions and write down your initial thoughts about how you would write/ approach the proof. These don't have to be long or well thought out - I usually spend only 5-7 minutes on this.

  • I read all of the questions and start with the easiest one, to give myself some confidence. I usually work on the harder questions last, making sure that at least I'll have received points for the questions I knew how to solve.

  • I typically create a list of all things (formulas, certain theorems, strategies) that I need to memorize for an exam. Then, up until 5 minutes before the exam, I read it over and over again. Then when I get the exam, I write down all the formulas, etc. at the top so I don't forget. Then, I look over all the problems once, to get a sense of the hardest problems. I then go through again, and jot down notes for the strategies. I start with the easiest questions that seem the most formulaic, while thinking about strategies for harder problems in the back of my mind.

  • I get the first question right: my SUNetID. But seriously, you're not getting a zero if you show up to the test and can write down something - and something is infinitely (ha!) better than zero.

What do you do when you get stuck on a question on a theory exam?

  • Don't panic! Usually you don't see the way to prove something at first glance. Quickly go through the tools you have under your belt and consider if any of them apply. If you're in the middle of the problem and get stuck, likely you started off the wrong fit–try again! It's normal to through several paths before you find one that reaches the destination.

  • Everyone has the experience where they think that they will never get out of a brain freeze on an exam. Take a breath and please don't panic. Take a moment to go back to the original question and think through your strategy again. If you are still having a hard time move on to the next problem and come back later!

  • Write all of your thoughts out. It's impossible to evaluate several different steps for a proof in your head, and by writing out your ideas, you might actually SEE something you didn't before. Start from basic definitions. You're not going to be expected to come up with earth-shattering proofs during the exam period, so any mental jumps you'll have to make won't be gigantic. By starting with basic definitions and slowly reasoning your way through a proof, you'll find there aren't really as many possible paths to the correct answer as you might have assumed.

  • Give it time. This is a very long exam. Work through stuff you have a handle on and then start throwing things at the tough ones. Try a bunch of proof sketches, draw pictures, parse everything into definitions to see what raw materials you're working with. Have faith that it is only a matter of time and conceptual iteration before you have it.

  • If you've been stuck on a question for a while, save it for the end. Get through the problems that you can solve relatively quickly and then come back to it. When you do come back to the question, allow yourself some quiet time to think about it. It's easy to spend the entire time frantically trying every solution until something works—and this is a valid strategy to try at some point during the problem—but it's equally important to give your brain some space to think about the question on its own terms.

  • Write down the facts, write down possible properties of the problem. Usually the hard question is decomposes to finding a simple property you can exploit!

  • I try to cycle through different example problems seen in lecture and in homework, and try to recall similar examples that could be helpful. Write down all of the definitions that you might need. You can get a lot of information just by manipulating what the definitions give you.

  • Don't be afraid of completely abandoning your solution if its getting hard to work with. In my experience, CS 103 questions had really elegant, “pretty” solutions. Nothing messy. Also, re-read the problem and keep a list of “facts”. Then, go through each fact and determine its implications. Also, when proving a theorem, come up with several examples and work through them. The strategy of solving specific examples can help you determine the overall strategy for the proof.

  • Read the question, write down some ideas, then skip it if you're stuck. Your subconscious mind can work wonders while you're working on other parts of the exam.

  • I sit back in my chair, put my pencil down, read the question a few times, and just think. It's really easy to get worked up and start doing a million things, but you have to just take a breather and give yourself time to think.

  • If you're having problems understanding new terminology in the question, write it down in your own words on a scrap piece of paper. Sometimes (stuff) you've never heard of before shows up and freaks you the (heck) out, but if you break it down it's not actually conceptually difficult. You have the toolkit to prove it - you just have to comprehend the new stuff to be able to use it.

Anything else you want to share?

  • This class is challenging! It's okay if you get stuck from time to time. That just means there's more to learn.

  • Get enough sleep! Theory is really hard if you pulled an all-nighter studying.

  • When you're “done,” read everything fresh, start to finish, with a very critical eye before you hand it over. You're ready to get the (heck) out of there but it's always worth it. Don't waste all of that work on one forgotten stroke of the pen.

  • I would advise against comparing yourself with other students! Learning is a journey with yourself, not a competition against other people. Also, think about yourself from several weeks ago: he/she would have probably seen the exam you're taking now and thought it was written in another language! By the time you're taking midterms, you've usually learned so much already. That is awesome!

  • Have fun!

Good luck on the exam!