DEPARTMENT OF COMPUTER SCIENCE
|CPSC 427a: Object-Oriented Programming||Handout #8|
|Professor M. J. Fischer||November 10, 2010|
Term Project Assignment
|Thursday, November 18||One-page project proposal due.|
|Friday, December 10|
(last day of Reading Period)
|Project and report due.
This deadline can be extended only by a Temporary Incomplete authorized by the student’s residential college dean.
The purpose of the project is to give you a chance to explore in some depth a topic that is related to the subject matter of this course. The project consists of two parts, an activity and a report.
All materials should be submitted online using the submit script. A PDF of your one-page project proposal should be submitted as assignment number “5-proposal”. A PDF of your completed project report, code written, and any supporting materials such as experimental data collected should be submitted as assignment number “6-project”.
Almost anything related to the course material is acceptable as a project topic. Because this is a course on object-oriented programming the main criterion for appropriateness is work that relates to the design and implementation of object-oriented programs. Some examples of appropriate topics are to explore design patterns in greater depth, compare object-oriented design with other popular software design methodologies, or explore large C++ class libraries such as STL, Boost, or gtkmm. Performance studies might also make good projects, e.g., measure the time and space overhead when using polymorphic classes (with virtual functions), or compare the performance of STL containers and strings with the less general C-style arrays and strings.
Application development projects are also acceptable, where the project is to specify, design, implement, and document a C++ program to solve a particular task such as playing a simple game, maintaining a CD-sharing library, or handling play lists in a music player. A word of warning here: Time is short, so the chosen project must be quite limited in scope. People generally vastly underestimate the amount of time (and code) required to solve a problem. A small project that is carefully done and documented is much better than an overly-ambitious one that is half-finished. Anyone proposing a development project should structure the proposal into a sequence of steps, where the first step provides just a skeleton of the eventual goal, and successive steps along the way add features a few at a time. That way, when time runs out you can wrap up the portion completed and have something to show for your efforts.
Much more important than the choice of topic is what you are able to do with your topic. I want to see an original well-written report that explains, integrates, and contrasts material from various sources, not one that simply condenses or paraphrases. If reporting on a development project, then the report should describe the program itself, its strengths and limitations, and how the design methodology learned in this course was used in creating and debugging the code. My goals for the project are that you should learn something new, your paper should teach me something new, and you should write a substantial amount of high-quality C++ code involving several classes.
Past experience has shown that many Yale students do not know how to write an essay or scholarly paper. I can’t really tell you how to write a paper in this brief handout, but the section title is intended to remind you that a project report is an essay of sorts, and the things you have learned in other courses about logical organization, writing style, use of proper grammar and spelling, and proper methods of citing other people’s work all apply here.
Like an essay, the project report should have some ideas of your own to report. It should reach some conclusion, and it should give logical arguments and relevant data to support that conclusion. What I do not want in a paper is a simple paraphrasing of somebody else’s work. Quoting other people’s work as a way to make a point is perfectly acceptable, if properly attributed; simply copying their work, attributed or not, is not acceptable. I want to read about your ideas, your code, and your conclusions, not somebody else’s. But of course you will rely on other people’s work to support your arguments.
Your paper should follow accepted guidelines for scholarly work in computer science. The paper should begin with title, author, date, and abstract. Every page must be numbered. The body of the paper should be divided into logical sections appropriate to the structure of the material. Each section should have a numbered section heading. Numbered and unnumbered subheadings should be used where appropriate. Figures and tables should have captions and should be referenced by number. Related work should be cited in the text, and full reference information should appear at the end in a bibliography. Any material copied verbatim should be enclosed in quotation marks as well as being properly cited. The bibliography should contain full citation information, including author, title, year, and publication data. If the publication is a conference proceedings, then the proceedings title, editor, organization or publisher, etc. should be included. If it’s a book, then the publisher should be included. If it’s a web page, then the URL and sponsoring organization should be mentioned.
Most research papers in computer science are prepared using the LATEX typesetting system. (That is also the system that I use for preparing class handouts!) Because this is a computer science course, and because it is educational for you to learn to use the tools of the field, I am requesting that you to prepare your paper using LATEX and that you prepare your references using the companion tool, BibTEX. Exceptions require my prior approval.
Compared to papers produced on a typical word processor, the results from LATEX are much more professional looking. LATEX automatically numbers pages and sections, automatically produces a table of contents and list of figures (if desired) and generates page headers and cross-references. BibTEX takes information that you put into a bibliographic database and formats it according to commonly-accepted styles. You don’t have to remember whether the article title or journal title should be italicized, or where commas and periods are needed—it does all that for you. But the big win comes when typesetting equations and other mathematical notation. LATEX produces professional-quality typeset equations and formulas rather painlessly. Attempting to do the same in a word processor is clumsy at best, and the results are generally disappointing.
It does take some effort to learn how to use LATEX effectively. I would suggest looking at one of the two tutorials [Gre00, OPHS08] that are accessible via the “Online Documentation” section of the course web page. For the advanced LATEX user, I recommend [Lam94, GMS94]. There is also a wealth of information on the CTAN archives, available on the web at http://www.tug.org.
The finished report should be submitted in the form of a PDF file. LATEX() users can produce a PDF file directly by using the pdflatex command. Users of other word processors can create PDF by “printing” the file to the PDF device.
Start now! Locate your resources. Many but not all papers are available on the web. Non-electronic library materials can sometimes be hard to get and may need to be obtained on interlibrary loan (which can take weeks). Make sure your project is doable in the amount of time available. Your proposal should identify the resources necessary to carry out your project.
The Yale library subscribes to many on-line publications and makes them available to the Yale community without charge. However, they must be accessed from a Yale computer and sometimes through the library web site. The particular access method varies from journal to journal. Help is available from
Engineering & Applied Science Librarian
15 Prospect St./P.O. Box 208284
New Haven, CT 06520-8284
If you are not on campus, you can still access Yale Library materials by using a VPN or proxy server and your Yale NetID to connect to the Yale network. See http://library.yale.edu/about/offcampus.html for further information. Linux (and perhaps other system) users can have Cisco AnyConnect automatically installed by visiting web site http://access.yale.edu.
If you’re doing a development project, you might find that you need software resources that are not currently installed on the Zoo. If so, please let me know immediately what you need. In most cases, it will be possible to get it installed quickly.
[Gre00] Harvey J. Greenberg. A simplified introduction to LATEX. Available for download from http://www.ctan.org/tex-archive/info/simplified-latex/, April 2000.
[OPHS08] Tobias Oetiker, Hubert Partl, Irene Hyna, and Elisabeth Schlegl. The not so short introduction to LATEX2e. Available for download from http://tobi.oetiker.ch/lshort/lshort-letter.pdf, September 2008. Version 4.26.