CS 202 Honors Fall 2012 : Programming Project

Project : Due Thursday in Class 12/13

Computer Science is about creating. In computer science, you have opportunities to solve problems no one else has solved before; you can design applications no one has thought of before; you have the power to develop games no one else has played before. In computer science, you have opportunities to read, analyze, think, reflect, and write, but, in the end, it is mostly about what you can create.

This ability to create new things through programming is what many people find most exciting about computer science. Through the project in this course, we hope that you will experience some of this excitement. The project will be somewhat open-ended and allow you to show some creativity and original thought. We hope you use this project to create something you find interesting and are motivated to do.

The final project may be done either by yourself or with one other student enrolled in CS 202.

You are expected to devote much more time to the final project than to one of the weekly homeworks.

Programming Environments

For your final project, you should investigate a programming environment different than Scratch. The most appropriate environment for your project will depend upon what you want to do and what you are most comfortable with. You may choose any of the four programming environments in the list below; they are all very suitable for a final project and all have very interesting possibilities. If a different language interests you, please talk with the instructor to see if it is appropriate. Be warned that you will need to spend some time exploring the different programming environments and learning how to use them on your own.

  • BYOB (Build-Your-Own-Blocks) or Snap. BYOB is an offshoot of Scratch from UC Berkeley. BYOB is basically a superset of Scratch that lets you define your own blocks (similar to defining your own functions in Python), have lists of lists (or multi-dimensional lists), and use recursion.

    Using BYOB will be straight-forward given that you already know how to use Scratch. You'll need to install BYOB from here. Documentation for how to use BYOB is here. If you choose BYOB for your programming environment, you must use some of the functionality that is in BYOB that is not in Scratch (and describe this functionality in your Design Documentation).

  • Scratch Mesh. Scratch Mesh lets you create distributed Scratch projects without having to learn many new instructions in Scratch. With Scratch Mesh, Scratch projects runnning on different computers interact with one another. For example, when the Scratch program running on one machine broadcasts a message, the Scratch programs on other machines can receive that message! The Scratch programs can also access one another's variables (using the Sensor blocks). Good projects with Scratch Mesh include multi-player games (trivia or action) and chat services.

    You can enable Mesh functionality in the Scratch distribution you already have by following some very weird steps described here.

  • Mindstorms. You are welcome to use the Mindstorm software and robots that Guest Lecturer Allie Terrel showed us earlier in the semester. You will need to contact her if you are interested in acquiring the software or the robots.

    Reasonable projects to implement include: color guessing games (e.g., the robot picks a secret color and the human tries to guess it by inserting different colored balls under the color sensor), behavioral scenarios (e.g., the robot acts out a different series of actions depending on some input it receives, such as detecting a wall or a wave), or playing tic-tac-toe (e.g., use different sensors as input and the screen on the robot to display the game board). You may also reconfigure the robot if you would like (e.g., move the touch sensors to build a robot that shoots those colored balls whenever it detects movement.)

    Recommended documentation for programming include Robot Square, Lego Engineering, and Mindstorms Simulator. Allie can also be available for answering basic questions.

  • Python. If you liked programming in Python, you are welcome to continue using it for your final project. To go further with Python than we have in Homeworks 8 and 9, you will likely want to finish the Think Python tutorial. Neat Python projects could leverage existing Python libraries that contain extra functionality. For example, this library is designed to help you interact with a graph of friendship connections on Facebook.

Sources of Inspiration

The open-ended nature of this project can be intimidating. You can implement any project that you find inspiring and that is also sufficiently challenging. For example, you could implement a favorite game, whether that game is an on-line video game or a traditional board game, card game, or strategy game (e.g., Mastermind). You could implement evil hangman... Or, you could implement something that will be useful in your major field of study: for example, processing data (e.g., think about the data sets available back in Homework 5 or simulating some basic phenomena.

In past semesters of CS 202, students in a non-Honors version of the course created final projects exclusively in Scratch and with more requirements than you are being given. To see some more concrete suggestions, you may want to look at those previous project specifications: Game of Chance, Trivia Games and Card Games. These might help you calibrate the amount of work you are expected to put into your project.

Grading your Code

It is expected that each student will put in roughly the same amount of work, though the types of contributions may be very different. Part of the challenge of this project is figuring out how to work productively with another individual. Collaborating is a skill that requires effort! When you turn in your code, you will also need to turn in a short document describing the role of each student.

You may ask other students in the class questions, but you may not share code with anyone outside of your group of two. You may not use existing code that you find elsewhere, such as the Scratch website or other places on-line. You may look at the behavior of existing projects for inspiration, but you should develop all of your code as a completely new project and not modify, re-mix, or build from any one else's code.

Your joint project grade will be based on the following components:

  • Documentation (10 points) You should write up a short document describing the functionality of your project. What does your code do? Do you have sample input/output to show how your code behaves? How did you divide the work between the individuals on your programming team?
  • Scratch Comparison (10 points) How would your project implementation have been different if you had used Scratch instead of your chosen environment? What would have been easier and harder in Scratch? Be as specific as you can. Include this discussion in your documentation.
  • Functionality (25 points) Does your project do the tasks outlined in your documentation? Do you implement all the features?
  • Effort, Creativity, and Difficulty (20 points) In the opinion of the graders, does it look like you put effort into the project? Is your project interesting in some way? In the opinion of the graders, is this a challenging project to implement?
  • Code Style (15 points) Do you have good, descriptive names in your code? Do you use the correct programming structures? Do you use control structures, variables, and lists where appropriate? Do you avoid duplicating nearly-identical code throughout your scripts?
  • Demo (20 points) Were you able to explain how your code works to the TA in your demo (sign-ups available later)? Did you show your project to the class on the last day?
The Instructor and TAs are very happy to give you suggestions on how to implement your ideas. We won't necessarily give the answer, but we will try to guide you to a reasonable implementation. If you have bugs in your code (i.e., it isn't behaving like you expect), we are happy to take a look and see if we can see the problem. But, again, don't wait until the last minute to do your project if you are hoping for any advice!

We recommend writing small amounts of code and immediately testing that code to see that it works correctly before writing more code. Get each step working correctly before you move on to the next step! And, always SAVE working versions of your project before adding significantly new functionality!

Turning in your Project Code

There will be a few intermediate deadlines for this project. These intermediate deadlines will be used for your Homework 10 grade. If you wait until the last week to begin working on this project, you are not going to implement anything very intersting. We strongly recommend starting this project relatively early and getting feedback from the instructor and TAs as you go.

The deadlines are meant to motivate you; what you actually submit is very flexible. Here are the deadlines we've identified; completing tasks faster than these deadlines is encouraged!

  • Tue (11/27) 5pm: Find a project partner. Use this web form to notify us of the two students in your project group. If you are working alone, let us know this as well. If you are looking for a partner, see the list of names in the Google Document sent over email (I don't want to post that link here).
  • Tue (12/4) 5pm: Programming Environment. Submit evidence that you've selected a programming environment (i.e., BYOB, Mesh, Mindstorms, or Python) and have learned how to use that environment. By now, you should have your chosen programming environment installed and working; you should have worked through some exercises in an on-line tutorial or other documentation. You must either stop by lab/office hours to show the instructor/TA that you can implement something very basic in that evnrionment or submit some files to your Dropbox in Learn@UW.
  • Thu (12/6) 5pm: Project Proposal. Submit a description of your planned project. What do you plan on implementing? Why did you choose this? (It is okay if your final project changes after this proposal, we just want you to have a plan!)
  • Thu (12/13) 9:30: Project Due and Demo. During lecture time, you will show everyone what you have accomplished!

Menu

Fall 2012
Time: TuTh 9:30-10:45
Room: 1325 CS
Lab: 1370 CS (1st floor)


Instructor:
Prof Andrea Arpaci-Dusseau

Office Hours
TuTh 10:45-12:00
Office:
7375 Computer Sciences
Email: dusseau "at" cs.wisc.edu


Teaching Assistant:
Benjamin Bramble
Lab Hours (CS 1370)
Wed 2:00-4:00


Teaching Assistant:
Sharad Punuganti
Lab Hours (CS 1370)
Thu 1:30-3:30

  • CS202 Home
  • TAs and Lab Hours
  • Lecture Schedule w/ Slides
  • Grading
  • Homeworks
  • Projects
  • Exams
  • Scratch Examples
  • Readings
  • Computing Resources
  • Outreach Opportunity
  • Interesting Links
  • Scratch
  • UW Computer Sciences Dept