Midterm Quick Info
Exam Goes Out | Â | Friday, February 4th at 10:30AM Pacific |
Exam Comes Due | Â | Sunday, February 6th at 10:30AM Pacific |
Topic Coverage | Â | Cumulative; focused on Lectures 00 - 10 and Assignments 0 - 3. Topics purely in section handouts or the textbook won't be tested. |
Exam Format | Â | 48-hour take-home exam, written to take three hours, structured similarly to a standard programming assignment |
How It's Graded | Â | Similar to programming assignments: functionality score is based on correctness; style score is based on coding style. |
Honor Code Policies | Â | See below for full details. Open-book, open-note, open-Internet. You are not allowed to communicate with other humans about the exam. |
How to Prepare | Â | Get coding practice, review past IG feedback, and keep the SLs in the loop while you're studying. |
Exam Timing and Format
The CS106B midterm exam is coming up soon. It’s a take-home coding exam. The exam will go out on Friday, February 4th at 10:30AM, and it will come due on Sunday, February 6th at 10:30AM (Pacific time). We’ve designed it to take three hours, though you’ll have 48 hours to complete it. The exam focus is
- Lecture 00 – Lecture 10 (through but not including big-O notation), and
- Assignment 0 – Assignment 3.
The topics from after this point (Lectures 11 – 13 and Assignment 4) are also fair game for the exam, though they will not be as emphasized. In particular, we’ll assume that you’ll have worked through Assignment 4 and that you’re up-to-speed with the lectures on big-O notation. You are responsible for the material from lectures and from the assignments, so you should be prepared to answer questions about topics that came up purely on the coding assignments (say, using the debugger, memoization, structs, etc.). We will not test you on anything that appears purely in the section handouts or purely in the textbook, though those are excellent resources when studying.
The exam format is very similar to that of the assignments. We’ll release a set of starter files for Qt Creator and expect you’ll be doing your coding there. We’ll provide the problem descriptions themselves through the CS106B website, the same way we’ve handled normal assignment handouts. And you’ll submit everything through Paperless, just as usual. (We do not have the same 24-hour grace period for late submissions; please leave adequate buffer time to submit!)
Our Exam Philosophy
We want you to do well on this exam. To be very explicit about our exam philosophy:
- We're not trying to weed out weak students.
- We're not trying to enforce a curve where there isn't one.
- We’re not trying to measure “coding potential” or “innate programming ability.”
Rather, we want you to show what you've learned up to this point so that you get a sense for where you stand and where you can improve. The exam format is basically the same as the coding assignments, with the exception that you’ll be doing everything individually and without help from the course staff or other students.
Honor Code Policies
You are required to abide by the Honor Code policies outlined in our Honor Code Policies. We’d like to call particular attention to the following rules.
This midterm exam must be completed individually. It is a violation of the Stanford Honor Code to communicate with any other humans about the exam, to solicit solutions to this exam, or to share your solutions with others . This exam is open-book, so you are free to make use of all course materials on the course website and in the textbook. You are also permitted to search online for conceptual information (for example, by visiting Wikipedia). However, you are not permitted to communicate with other humans about the exam or to solicit help from others. For example, you must not** communicate with other students in the course about the exam, and you **must not* ask questions on sites like Chegg or Stack Overflow. (You may ask questions to the course staff on Ed; if you do, you must post your questions privately. See below for details.)
All work done with the assistance of any material in any way (other than provided CS106B course materials) must include a detailed citation (e.g., “I visited the Wikipedia page for X on Problem 1 and made use of insights A, B, and C”). Copying solutions is never acceptable, even with a citation, and is always a violation of the Honor Code. If by chance you encounter solutions to a problem, navigate away from that page before you feel tempted to copy.
If you become aware of any Honor Code violations by any student in the class, your commitments under the Stanford Honor Code obligate you to inform course staff.
Getting Help
Because this is an exam, we will not be able to help out with coding or debugging questions the way that we normally do on the assignments. For example, we will not be able to help interpret compiler error messages, assist with C++ syntax, investigate crashes in your code, assist with debugging, etc. After all, part of the purpose of the exam is for you to demonstrate your ability to work through coding problems independently.
We can, however, answer a small set of questions about the exam problems, mostly clarifying questions about what the instructions mean or help getting the project files set up on your machine. To ask these sorts of questions, make a private post on EdStem. All questions about the exam must be posted privately, and you must not post any code on EdStem.
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.
-
Redo the assignments. When you’re first working on the assignments, you’re simultaneously trying to figure out what the assignment is asking you to do, solidifying your understanding of the content from lecture, tinkering around to see what happens, and figuring out the necessary problem-solving techniques. That’s fine, and that’s normal. What matters, though, is that, in that process, you internalized the appropriate techniques and developed your coding and problem-solving skills.
If you have the time to do so, pick one or two of the most challenging programming questions we asked you to solve, download a fresh copy of the starter files, and solve the same problem again without referencing your overall solution. If you’re able to do so with a little trial and error, great! It means that you’ve gotten out of that assignment what we expected you to get out of that assignment. On the other hand, if you’re struggling on the assignment a second time, there’s a good chance that some key skill or technique hasn’t yet clicked for you, and it’s worth talking to your SL or stopping by the LaIR to talk through the ideas.
If you worked with a partner, it’s doubly valuable to attempt the problems a second time on your own, just to make sure that you personally are comfortable taking on the questions and that you weren’t leaning too much on your partner for insights.
-
Work through practice problems. We’ve posted a collection of practice problems on the course website. It’s a compilation of old exam problems, which might give you a better sense of what sorts of questions we might ask.
When you’re working through those problems, don’t just hand-write things and call it a day. Make sure that you actually got things working. So download a blank set of starter files from the course website, type up your solution, and try running it on some sample test cases. If things work, great! If not, try debugging your code and see if you can fix it. If you’re still stuck, no worries! That’s a great indicator that you should ping your SL or drop by the LaIR to get some help.
-
Work through the section problems. The problems we give out in the section handouts each week are a great way to practice specific skills. Want to sharpen your recursion skills? Look at Section Handout 3 or Section Handout 4. Want to shore up your C++ fundamentals? Look at Section Handout 1 and Section Handout 2.
-
Review IG feedback and make sure you understand it completely and unambiguously. We hold interactive grading sessions on the assignments for a good reason – it’s a chance for someone with more coding experience than you (your section leader) to offer their advice and insights about how you can do a better job in the future. If you haven’t yet done so, take some time to review the feedback you received. If there are suggestions of the form “try doing it this way next time,” take a few minutes and actually go do it the other way. If there are stylistic points that they’ve pointed out to you, great! Go patch up your code to meet those style guidelines.
And hey, what should you do if you find something that you don’t understand? Ping your SL and ask for clarification!
-
Keep the SLs 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 how or why a certain piece of code works, or why a certain piece of code doesn't work, or why a certain concept works a certain way, etc., go on EdStem or stop by the LaIR and ask us a question. If you worked through any practice problems (section handouts or practice exams), ask your section leader to review your answers and offer polite but honest feedback on how you did and what you need to work on. You can also visit office hours if you’d like!
How We Grade
We’ll be grading the exam similarly to how we grade programming assignments. We’ll run your code on a variety of test cases (many of which we’ll have shared with you in the starter files) to determine what aspects of the code are working properly and which aspects need work, and we’ll review how you’ve structured your code to assign a style grade.
We do not assign points by counting how many tests you pass. Instead, we review your code, identify what works and what doesn’t, and assign a score based on your overall correctness and strategy. This means that if your code is mostly on the wrong track but coincidentally happens to pass most of the tests, we may assign a lower score than if your code is basically correct but has a tiny error that causes it to fail most of the tests. In other words, it’s always best to try to get the code working according to the best of your ability, rather than submitting something that you know is mostly incorrect but happens to pass a lot of the tests.
We will be grading for style along the lines of what we do on the assignments. After all, we hope that you’re internalizing our style recommendations and starting to write well-commented, clearly-decomposed code the first time around. In particular:
-
Use descriptive variable and function names. Single-letter variable names (or worse, single-letter function names) make it significantly harder to understand your code.
-
Properly indent your code. Remember that Qt Creator can auto-indent your code for you; highlight the code to indent and press Command+I or Ctrl+I (depending on your OS).
-
Comment difficult parts of your code. This isn’t required, but if you have anything you think is really gnarly, it never hurts to add a comment explaining what you are doing!
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 CS106B exams.
-
Do you give partial credit? Yes, absolutely! Because the exam is open-resource, we generally do not award partial credit for answers that just consist of a lot of code copied from lecture, section handouts, etc. 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.
-
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.
-
Is pseudocode okay? We generally discourage people from writing pseudocode on an exam. It is better to just write real C++ code, or to at least outline in C++ what you would be doing. You should not expect to receive much, if any, partial credit for writing pseudocode.
You can do this. Best of luck on the exam!