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, and more. While you'll need to choose from one of four main topics (listed in the project proposal guidelines) to focus on, you're welcome to include any topic from the core curriculum in your project. A good choice would be a concept that you found challenging and that you would benefit from a chance to review to strengthen your understanding. Alternatively, you can choose a content area in which you feel you have developed solid mastery, but are eager to go deeper into. We 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 a lecture example, a section problem, a single assignment component, or a diagnostic question (in particular, problems should not strive to be on the same level of complexity as an entire assignment!).
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. 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 ~4 weeks. Here is a suggested timeline (please remember that programming assignments 5, 6, and 7 will be due over the coming weeks as well, so make sure to plan your time wisely!):
Weeks 6 and 7 (July 27-August 8)
- Choose your concept area (see guidelines below for specific areas).
- Brainstorm project ideas that will help you improve in your post-diagnostic growth areas.
- Write your project proposal and submit by Wednesday, August 4 at 11:59pm PDT.
Week 8 (August 9-15)
- Review project proposal feedback and chat with course staff for any questions.
- Sketch your problem and draft a solution.
- Implement solution and write test cases.
- Start writing parts I (Problem description) and III (Problem motivation), and V (Ethics reflection) of the final write-up.
Week 9 (August 16-22)
- Implement additional solutions to your problem and analyze/reflect on them.
- Write parts II (Solutions and test cases) and IV (Concept mastery, common misconceptions).
- Complete your final writeup and 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 Sunday, August 22 at 11:59 pm PDT.
- This deadline is firm. There is no grace period. Please plan to submit what you have completed by the deadline.
Week 10 (August 23-27)
- Sign-up for a 30-minute slot with your SL.
- Prepare for your presentation.
- Project presentations will take place from Wednesday, August 25 through Friday, August 27 depending on your SL's availability.
Guidelines for project proposal
Your project proposal (100 words max) should be brief and have the following three parts:
What conceptual area(s) will your problem cover?
You must pick at least one of the following topics to focus on in your problem:
- Recursion (basic or backtracking)
- Dynamic Memory + Arrays
You are welcome to choose multiple topics and/or incorporate other topics we've learned about in the class that you'd like to strengthen your understanding of (e.g. C++ strings, pointers, etc.).
What is the general idea behind the problem you chose? (e.g. using ADTs to match users to national parks, implementing a recursive function to solve Boggle, etc.)
Note that you aren't tied to sticking with this problem topic if you change your mind later. However, we recommend you run any new ideas by course staff to make sure your problem is still within a reasonable project scope.
What would the function prototype look like that you're asking a student to implement?
This is just a draft! It's definitely fine to change return types/parameters later. We just want you to start thinking about how to concretize your problem through code.
Here is a PDF with sample project proposals based on diagnostic problems 3, 4, and 5.
Guidelines for final writeup
Below we enumerate the sections to include in the writeup. The document totals three to six 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.
V) Ethics reflection (approx. 0.5-0.75 page) There are two primary parts to the capstone ethics reflection for the class, where you can show off what you've learned about how ethics applies to technology and computer science. Depending on how relevant ethics is to the problem you've chosen, you may spend more time on the second part than the first.
- First, consider the following questions related to your project:
- What are one or two potential ethical issues related to your project?
- Who are might benefit from, be harmed by, or be left out of your project if it were used in real life?
- If you have identified potential harms, how might you act to minimize the harms?
If any of these questions apply to your project, answer them in a short paragraph. If they do not, state that your project does not raise any ethical issues, very briefly explain why, and answer the following question at greater length.
- Second, find (and link to) a news article from the last 10 years that discusses an algorithm or technological system that has had an impact on human lives and that relates to some of the topics we have discussed in CS106B, in any part of the curriculum
- How would you analyze this algorithm or technology in terms of its ethical benefits and concerns? Design a short-answer ethics question related to this topic, and provide a sample answer that reflects your perspective on the issue.
- Which part of the curriculum does your question connect to? This can be a specific assignment, a general topic area, an ethical question we've discussed in class, or something else.
- First, consider the following questions related to your project:
- References: In general, you should not be using any code or writeup details from external sources. However, if you researched background information for your project from outside sources, you should list them here.
- Appendix: If you choose to do a deeper dive into your problem or into ethics research, you can include those additional details and links to full code files here.
Here is an sample writeup to use as an example.
Some students really enjoy going deep into their final project topic and code, and that's great! We encourage you to spend as much time as you would like on the assessment; however, we also recommend first prioritizing the primary requirements and writeup before spending additional time on more complex coding components.
In particular, please make sure your primary project and writeup are scoped to an appropriate size for a section problem, diagnostic problem, or assignment component. Any additional work that you put into the project (e.g. functionality to make a full-fledged user-interface or extensions on the function you ask students to implement) can be discussed in an appendix at the end of your paper.
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 out of 20 points (4 points for each of the 5 categories that correspond to the sections in your writeup). A score of 3 in a category corresponds to a solid effort that meets expectations, and 4s will be reserved for work that goes above and beyond. Anything below a 3 is lacking and does not meet expectations.
Please note that these criteria will be scored primarily 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 by interacting directly with your SL!
We have also included a document version of the rubric for those students for whom this format is easier to parse.