Computer programming is foundational to the study of computer science, and it overlaps quite a bit with many areas of mathematics. However, this material has rich applications to nearly all of courses you are taking at Southwestern, as well as to your extracurricular activities. This is especially true as time marches forward; our ability to collect not only more data, but more different types of data, makes computer science significantly more relevant and useful to a wider and wider variety of fields. For this project, you are going to explore some of these connections. Your task is to create a practice problem for me to assign to future CS 1 students. Your problem needs to have a connection or application to something
other than math or computer science. The problem could be connected to one of your non-Math/CS classes at Southwestern, one of your extra-curricular activities, one of your hobbies, or really just anything that you are passionate about that isn't explicitly math or computer science.
Your submission should be written in the style of either a Stepik problem or an Exam problem. It should contain all of the following components:
-
You should give a short introduction to the non-math/CS topic that your problem is connected to. Explain why you felt motivated to choose this particular area to design a coding practice problem. Give any background information that the average programmer may not be familiar with but would need to know to complete the problem.
-
Describe the task for the programmer to complete. If you are writing a Stepik problem, explain what kind of input the code should take, and explain analysis the program is supposed to complete and what kind of output will be expected. If it is an exam problem, give a clear description of what problem the test-taker needs to solve. If it is a "write code to do X" problem, then you should follow similar guidelines as for the Stepik problems. But it could also be different type of exam question that you think would have been tough but fair (I am always open to new ways to assess student learning outcomes).
-
If you are writing a Stepik problem, give ten different test cases that should be part of the problem. Try to include tricky edge cases! Explain why you chose the test cases that you did, and how these tests work together to ensure that the code is truly correct.
-
If you are writing an exam problem, give a rubric for how you think it should be graded. Obviously you should state how many points each part of the question is worth, but within each part you should state how that part should be graded, i.e. what must they do to get X number of points, how many points should be taken off for making Y mistake, etc. Your rubric should add up to either 10 or 15 points (and this should be an accurate reflection of how much work the problem requires).
-
Write a solution to the problem. Your solution will be graded on correctness in the final submission. Take advantage of the first draft to get feedback on your solution! If you are writing a Stepik problem, you should also state what code should be included behind the scenes (and hidden from the students completing the problem).
-
Your problem must be "sufficiently challenging"". The level of difficulty must be comparable to the problems you have seen on exams and/or some of the harder Stepik problems. Challenging doesn't necessarily mean that the solution requires many lines of code. It could be a problem that requires a very clever use of one of the techniques that we learned about. It could be a problem that should, on paper, be easy to solve, but it isn't because of some tricky aspect of java programming that might trip up a lot of students. I am especially curious to hear about what kind of problems you think would have helped you do better in the class if they had been assigned to you early in the semester. This criteria is somewhat subjective - which is why you should take advantage of the first draft to get feedback on whether your problem is challenging enough already, or if it needs to be beefed up to obtain full credit.
To help you avoid procrastination, I am requiring you to turn in a first draft during week 11. I will give you feedback on whether your connection to a non-math/CS topic is valid, whether your problem description needs more information, whether your test cases are useful, and/or whether your problem requires a sufficiently complex solution. I will also give you feedback on whether your solution code is correct or not. It's ok if you go in a completely different solution for your final submission, but you need to demonstrate that you've started thinking about the direction of your project. The first draft will give you a chance to get feedback that will help you produce the most polished final proposal possible. The more work you put into your first draft, the less work you will need to do to create your final submission. The first draft will be worth 10 points, based on demonstrating that you have made a meaningful attempt to get the problem formulation started.
The final submission will be graded according to the following rubric:
-
Clear explanation of connection outside math/CS: 10 points
-
Clear explanation of the problem/task: 10 points
-
Correct and sufficiently challenging solution: 20 points
-
Test cases or rubric: 10 points