Programming Exam Overview
The programming exam is an oral examination that is loosely modeled after a typical software engineering interview. The exam is designed to asses your ability to write code in a more realistic setting than a paper exam. You will be given 25 minutes to write a program in vscode based on a written description. Your grade is based almost exclusively1 on whether or not your code passes automated tests, which you will have access to and will be able to run as you write your code. I will pick one question at random from a list of questions for you to complete prior to your exam.
Scheduling
You must sign up for your 25-minute exam slot by booking through google calendar. If you have accommodations for extended time, ensure that you have sent me your LOA and book two meetings in a row through google calendar.
I recommend signing up ASAP to get your preferred time!
Book your exam here (Programming Exam #1 Attempt #2)
Exam 1: Java Basics
The first exam is intended to test your ability to write code in Java. You will be asked to answer a question that might involve loops, recursion, arrays, ArrayLists, HashMaps and/or custom classes. Think of a homework question that you may have been asked in CS145; this is the intended difficulty level of the questions.
Exam 2: Data Structures and Algorithms
The second exam is intended to test your ability to write code that implements or manipulates data structures. Questions might involve sorting, linked lists, stacks, queues, trees, heaps, binary search trees, or hash tables.
Grading
The initial exam will be graded as follows:
- If you pass all of the tests for your question, you’ll earn an A (95%)
- If you pass all of the tests for your question and complete an extension to your question (which you will not see before the exam), you’ll earn an A+ (100%)
For Exam #1, you will be offered a second attempt if you do not pass the tests on your first try. The second attempt will be graded as follows:
- If you pass all of the tests for your question, you’ll earn an A (95%)
- If you pass all of the tests for your question and complete an extension to your question (which you will not see before the exam), you’ll earn an A+ (100%)
- If you do not pass all of the tests for your question, partial credit will be awarded based on your performance using the following criteria:
- Syntax: you should demonstrate understanding of Java syntax, and show how you approach compiler errors as they appear. Do not be afraid to look at the slides as a syntax reference!
- Algorithmic Approach: you should take an approach that can correctly solve the problem for any possible input. Describing your approach verbally, even if your code is not entirely working, will allow me to see where you are going with it.
- Completeness: you should aim for a solution that is as complete as possible. A solution that requires the addition of one additional boolean expression in a conditional is superior to a solution that requires the addition of five lines of code. This is closely linked to your algorithmic approach.
- Debugging: you should use your ability to run your code during the exam to your advantage. If you are not passing the test cases, can you figure out why? Can you write some of your own tests or add some print statements to figure out what causes a runtime error? Most programs that you write will not work the first time, so debugging is an extremely important skill and one that you can best demonstrate during the programming exam.
- Throughout, I would encourage you to verbally walk through your approach and to test your code in a PSVM if you are running into test failures.
- Overall, partial credit will not exceed a B (85%), and that grade will be reserved for situations in which you are is extremely close to passing and run out of time. Essentially, you would have to have a single error and have verbalized how you would fix it, but not been able to actually do so yet to earn a B.
You will not get the same problem or the problem that you previously vetoed for your second attempt.
Preparation
This exam should be something that you feel extremely well-prepared for. Questions, partial starter code, and tests will be shared publicly prior to the exam (solutions and complete starter code are not shared).2 You are encouraged to complete all of the questions to study for the exam - think of these as extra practice problems! You will likely get a better sense of your preparation if you complete the problems in exam-like conditions (e.g., no generative AI, no collaboration), but ultimately, you can and should use any resources that you think are useful in the studying stage. I am happy to discuss problems with you during office hours, but will push you in the right direction rather than providing solutions!
Question Veto
For each of the programming exams (at least 24 hours before the your attempt), you may fill out the google form linked below to veto a question from the list. If there is a question that you simply can’t figure out while you’re studying, I recommend using this option! I’ll randomly choose among the other questions for your exam.
During the Exam
External Resources
During the programming exam, you will have access only to a standard vscode editor without copilot enabled. I will also make slides from class available to reference for syntax. No other external resources are allowed, including internet searches, generative AI, or your own notes.
Hints
I will happily provide clarifications on questions during the exam, but I will not provide guidance on how to write your code or where to look in slides to find useful syntax. Plan accordingly!
Footnotes
I reserve the right to assign a failing grade if a student uses excessive special-casing to overfit to the test cases. I also reserve the right to assign a failing grade if you do not use the required method (e.g., the question asks for a recursive implementation and you write a loop). I will warn you if I think either of these things are happening during the exam. I am happy to review a solution prior to the exam if you have questions about this.↩︎
Starter code is sometimes not provided in full because it may contain code that would trivialize other assignments↩︎