The culmination to your CS106B journey will be the personal project. In place of the usual problem-solving exam that traditionally serves as the end-of-quarter assessment, the personal project allows you to demonstrate achievement of the course learning goals in a manner that is tailored to your particular interests and needs.
For the personal project, you will choose a concept from the CS106B curriculum, pose a problem on that topic, implement its solution, write a short report about the problem, and present and teach your problem in a one-on-one meeting with your section leader.
Your effort to thoughtfully prepare the materials to teach the concept to another student will both solidify your understanding and demonstrate your mastery. We hope this opportunity will be a satisfying capstone to your course experience and a great way to show off the skills you have worked so hard to build this quarter!
What is the personal project?
You'll start by choosing a CS106B topic concept that you want to explore further. Review the course schedule to see have much ground we've covered: ADTs, recursion, fractals, backtracking, Big O, classes, memory/pointers, sorting, heaps, linked lists, trees, hashing, and more. Any topic from the core curriculum is fair game. A good choice would be a concept that you found challenging and you would benefit from a chance to review and strengthen your understanding. Alternatively, it could be a content area you feel you have built solid mastery, but are eager to go deeper. We also hope you'll choose a topic that is particularly intriguing or relevant to you personally.
Having chosen your topic, you are to design a problem that could be used to teach or assess that concept. The primary intent for the problem is to serve as an illuminating example for your chosen concept. You are also encouraged to be creative and bring in your own interests to frame the problem in a way you find engaging. The scope and size should be on par to those problems used as lecture examples, section problems, or exam questions (in particular, problems should not strive to be on the same level of complexity as what you usually implement on assignments!).
After deciding on your problem, you will implement a solution of your own. Along the way, you will flex your testing skills to write test cases that confirm your solution is fully correct. Then, you will explore other correct ways to solve the problem and come up with a second, alternative solution. As you do so, you will think about and address the following questions:
- What tradeoffs do you see in terms of style and performance?
- What factors would you take into consideration when choosing between these alternative approaches when determining an "optimal" solution to the problem?
- What are the likely misconceptions that might come up when teaching this topic?
- What test cases would be helpful to detect common oversights?
- What are the key learning goals being taught or assessed by the problem?
Once you have completed your exploration, prepare a writeup that includes the problem description, solution code, and your analysis. The final step is for you to present your problem to your section leader in a one-on-one mock teaching session.
Use of resources
You are welcome to review any and all of the CS106B materials as you get started. We have tons of lecture examples, section problems, diagnostic samples, and textbook exercises that can provide inspiration. Once settled on the concept area that you plan to focus on, take your topic and make it personal! You will create your own problem, develop your own code, and prepare your own report. What you submit must be authored by you and you alone, or you and your partner. That is, you are not allowed to take a problem statement and/or code written by another person and include it as part of your project.
In creating your problem, you are free to use any of the C++ standard and Stanford libraries. If appropriate for your problem, you may apply your own restrictions on solutions such as limiting use of libraries, setting a required runtime, and so on.
The personal project is to be completed over three weeks. Here is a suggested timeline (please remember that programming assignments 6 and 7 will be due over the coming weeks as well, so make sure to plan your time wisely!):
First week (May 14-May 21)
- Choose your concept area
- Sketch your problem and draft a solution
- Chat with an SL, Chris, or Chase during LaIR or OH to get feedback on your idea and confirm it is appropriately scoped
Second week (May 22-30)
- Implement solution and write test cases
- Analyze/reflect on problem and solutions
- Complete writeup
- Submit to Paperless.
- The files that you should submit are a PDF document of your writeup and a zip of your Qt project folder with working solution code. Unlike previous assignments, you must submit the entire project folder, not just the individual files you wrote code in!
- Project writeup due Monday, May 31 at 11:59 pm Pacific
- This deadline is firm. There is no grace period. Please plan to submit what you have completed by the deadline.
Third week (May 31-June 4)
- Prepare for your presentation.
- Sign-up for a 30-minute slot with your SL
- Project presentations will take place from Wed June 2 through Fri June 4.
Guidelines for writeup
Below we enumerate the sections to include in the writeup. The document totals three to five single-spaced pages and should be submitted in the form of a PDF. You will additionally submit the problem solution code and tests in the form of a runnable Qt project.
I) Problem description (approx. 1 page)
Imagine this problem will be used as a lecture example, section problem, or exam question. How would you frame the problem when introducing it to students? Give a description of the problem (which can also include a short motivation). Provide diagrams, examples, or test cases as appropriate to ensure students understand the objective. This section should include any necessary support structures for student to complete the problem such as starter code, function prototypes, and type definitions.
II) Solutions and test cases (approx. 1-2 pages, plus runnable Qt project)
Your writeup should include working code for two distinct solutions to the problem. For each solution, analyze its Big-O, point out interesting ways in which this version differs from the other and discuss the tradeoffs in choosing among possible approaches. Describe the strategy you used for testing the code and summarize your test cases. Along with the writeup, you will also submit a zip of a runnable Qt project containing the solution code and full test suite. We strongly recommend using our sample project template to get started coding up your solutions and test cases!
III) Problem motivation (approx. 0.5-1 page)
Provide the conceptual motivation for the problem (why a teacher might use it) and your personal motivation (why you chose to focus on it). For the conceptual motivation, explain why working through the problem will strengthen the student's understanding of the concept and how it targets an appropriate level of challenge. For the personal motivation, discuss how this problem demonstrates the skills you've gained this quarter and why you were particularly interested in the topic.
IV) Concept mastery, common misconceptions (approx. 0.5-1 page)
Identify the course learning goals assessed by this problem and what proficiencies a student would need to successfully answer it. What difficulties came up for you as you were designing the problem? What parts do you expect to be challenging for students? What common misconceptions or bugs might pop up in student solutions? If you would like to include code snippets here to demonstrate bugs, you may do so, but it is not required.
Here is an sample writeup to use as an example.
Guidelines for presentation
Ever wondered what it is like to be a section leader? Here is your chance! The final step of the personal project is for you to present your problem in a mock teaching session.
You will sign up for a 30-minute slot with your section leader. Prepare a presentation of length 15-20 minutes, leaving 10-15 minutes for Q&A. During the presentation portion, you will talk through the problem and its solution as if teaching the problem in lecture or leading an exam review session.
During your presentation, you should address the following questions (or be prepared to answer them from your SL):
- Why did you decide to focus on this problem?
- In what setting would this problem appear (lecture, section, exam) and how does the problem assess students’ understanding of the concepts?
- What’s challenging about this problem, especially as it relates to the concepts it’s assessing?
- What common misconceptions might students have when attempting to solve your problem?
- What would happen if certain modifications were made to the solutions to your problem?
- How does this problem demonstrate your growth in the course and achievement of the course learning goals?
- What did you learn from working on this problem?
We've put together some tips and advice to help you prepare for your project presentation. The best resource to check out is this sample project presentation recording which was put together by one of our awesome section leaders. This recording should give you a sense of what the project presentation should look like – hopefully you're not too surprised to see that it should look pretty much like what you would expect out of a typical CS106B section! In addition to watching the recording, we encourage you to consider the following tips when preparing:
- Your presentation should supplement rather than duplicate your write-up. Don't just read directly from your write-up - instead, aim to teach the problem to your SL!
- We encourage the use of slides, the Zoom whiteboard feature, or other markup software because they are great tools to structure your presentation. (You can read more about the Zoom whiteboard here)
- Imagine that you are teaching in a section environment (relaxed, but on-topic). Your presentation should be accessible to a CS106B student who is familiar with the course concepts but unfamiliar with your specific problem.
Project checklist and rubric
We will apply the rubric below to evaluate submissions. Bucket scores of 0, ✓-, ✓, or ✓+ are used. The ✓ bucket corresponds to a solid effort that meets expectations, the ✓+ for work that is above and beyond, and ✓- for work that is lacking and does not meet expectations. We will primarily be scoring these buckets based off your written report submission, with a proportionally smaller weight given to contents covered in the presentation. You should think of the presentation as an opportunity to clarify and improve on any gaps in your project report based on your interactive session with your SL!
We have also included a document version of the rubric for those students for whom this format is easier to parse.