Whether you're going into academics, big business, non-profit organizations, self-employment, church volunteer work, or straight to welfare, writing is important. Proposals, business plans, letters, reports, patent disclosures, articles, minutes... if you write better, you're going to DO better.
Your class projects represent a lot of work on your part. Your report should do your hard work credit and thus make sure you get credit for the hard work. The assignments are usually open-ended, in the sense of inviting or requiring a choice of things to accomplish and style of accomplishing them. They usually have scope for experiment, compare-and-contrast studies, and often allow repetitive, organized experimental exploration of hypotheses. The results of these experiments are largely what you are reporting. Check out Scientific American sometime. In those articles, you can just read the figures and the captions and that's all you need to know. Graphics are king. Now in our classes we wouldn't go that far but remember that graphics can be centrally important in getting across your point, and lack of them can cause your point not to get made.
Your class projects are actually technical reports, of the sort that we publish here in the CS Department to document our work. There is a roomful of them on different subjects, and you're invited to check out /u/ftp/pub/papers for a list of them and for several down-loadable ones.
In our assignments, your documented code and README should be submitted separately and not mixed up with the project report.
The Technical Report (TR) is a common written form through which computer scientist communicate their findings. Each TR should have a focused topic that is developed logically along some clearly identified perspective. The major components of a TR are title, author information, date, keywords, informative abstract, body, acknowledgments, references, and appendices. Typically, the body is organized into four sections: motivation, methods, results, and discussion. This document offers advice and specifications for writing TRs.
A TR should explain what you did, why you did it, what you discovered, and what is significant of your findings. The report should identify clearly what is novel about your work, and how it relates to prior knowledge. There should be a focused topic, and an attitude about this topic. The topic should be developed according to the attitude in a thorough, logical, and orderly fashion. Throughout, the author should be helpful to the reader.
The report should include the following components: descriptive title, author name and affiliation, date, informative abstract, list of keywords, body, acknowledgments, and list of references. Additional separate appendices, where appropriate, may also be included. The standard four-part outline for the body of a technical report is motivation, methods, results, and discussion.
For multi-author class projects, (not usually for multi-author TRs or scientific papers) it is important to identify who did what and it's best if each team member writes up his own work. Then the whole thing should be edited for smoothness and consistency (of notation, nomenclature, and style) by the lead author. So there should be a section or paragraph explaining what each team member did.
Also on multi-author projects, it is of course nice if the editor has compatible information to weave together into the final report. I have had terrible luck trying to use other people's WORD documents: LaTeX is much more transparent to incorporate into larger docs. In any event, the editor should make sure he can actually and easily manipulate the chunks his co-authors give him.
There is no minimum or maximum length requirement--the length should be appropriate for what you have to say. Many TRs are about 10--20 pages long, but it is not uncommon for TRs to be significantly longer. Regardless of length, it is usually an effective strategy to explain in successive ``layers.'' For example, lengthy TRs often begin with a relatively short overview section for readers who wish an executive summary. Quality and conciseness, not quantity, will be rewarded. For CS class project reports, 10 pages is certainly not excessive. In fact, spending two weeks to build a program and then not getting 10 pages worth of juice out of it represents an inefficient use of resources on your part.
This document aims to help students learn the basics of computer science technical reports. Although my advice is highly subjective, I hope the reader will benefit from issues raised, even if she disagrees with my particular point of view. [I left this gratuitious political statement in just to keep you awake and to show you that even people who write about how to write still do egregiously annoying things -- CB]. Sorry, I should have said "despite disagreement with my particular POV." Although technical writing is a crucial part of writing TRs, this document is not a tutorial in effective technical writing. Several sources of information about technical writing are listed in the references. The rest of this document describes the following important aspects of TRs: thesis, components, organization, delivery formats, special advice for experimental projects, common mistakes to avoid, additional advice, and other important communication forms.
Many researchers find it useful to think in terms of questions and answers. I recommend that you carry out and communicate your research by raising and answering focused questions. For example, you might ask ``What are the performance limits of decision trees?" or ``What does the theory of one-way algorithms have to do with actual cryptographic practice?"
Titles should be as short as possible, while still satisfying the foregoing criteria. Avoid cute titles that violate these criteria. I often like two-part titles because they provide short and long forms (e.g. ``Statistical Techniques for Cryptanalysis: An Experimental Study using Real and Simulated English''). I try to avoid titles that exceed 17 words. [CB wonders: what happened to him when he was 17?]. Also CB notes that lots of people HATE the two part colonized title, so feel free not to use it or to swing either way depending on local politics.
Many journals use three levels of keywords: general terms (e.g. cryptology), subject descriptors (e.g. differential cryptanalysis) recognizable to most researchers, and implicit terms--specific words or phrases that act as proper names (e.g. RSA Cryptosystem) which might not be recognizable to all readers.
Focus on the scientific content of the project--your questions and answers. Identify and explain interesting and important phenomena. Emphasize what is new about your project. In addition, briefly comment on the engineering aspects of your work: what problems did you face, what decisions did you make, and what are the consequences of these decisions? Although it is crucial to explain your experimental procedures, be concise and do not bore your reader with lengthy descriptions of routine implementation concerns.
Pay attention to important transitional sentences, especially the first and last sentences of the report. There are three standard ways to begin the introduction: startling statement, dramatic incident, and quotation. I like to end each report with a powerful sentence that concisely summarizes the significance of the entire project.
I like to list and number references by alphabetical order of author name. When citing references in the body of the report, always explain why the reference is being cited. For example, do not cite previous work without critically explaining how it relates to your work. I like to mention the author name in the textual citation, followed by the corresponding reference number (e.g. ``In 1976, Diffie and Helman  proposed the concept of public-key cryptography.'').
In thinking about organization, I find it helpful to separate logical organization from explicit numbered sectioning. For logical organization, I think in terms of hierarchies. Part of the organizational task is to embed the logical organization into numbered sections. For example, the logical introduction might include one or more numbered sections, depending on what needs to be said. A short report might begin with one section: 1. Introduction. A longer report might begin with a more elaborate logical introduction consisting of four numbered sections: 1. Introduction 2. Overview 3. Background 4. Previous work. As the report evolves you may wish to modify the organization.
CB: Personally I don't like "Introduction" as a title since it's too boring and predictable and general. I like "Background and Motivation".
In describing the purpose of your project, restrict yourself to scientific and engineering reasons; do not discuss reasons that are related only to school. Do not repeat sentences from the abstract verbatim.
In the conclusion, you should explain what it all means to you. If you discuss philosophy, do so in the discussion section. Remember that the abstract and conclusion are often all that gets read in a paper so make sure the whole story, with points you want to make, is here.
If you are experimentally measuring the running time of a computer program, test your program on many randomly chosen inputs of a variety of sizes, including large inputs. Since the behavior of your program might vary significantly among inputs of the same size, for each input size, try several inputs of that size and report the sample mean and standard deviation for that size; do not simply try one input per size. CB: simple, obvious, important.
Be sure to explain your procedures in sufficient detail so that other researchers can verify and replicate your findings.
We evaluate source code on the basis of its correctness, completeness, design, modularity, documentation, coding, user interface, and testing.
We recommend the Latex system because it and its relative TEX produce high-quality results for mathematical typesetting, and Latex provides high-level document support (e.g. reference and citation management, indexing and cross referencing). Better yet, it's much easier for an editor to modify a paper or edit together several papers in LaTeX. I've found Word absolutely horrible for changing other's docs or incorporating them into a unified larger text. As for text editors, I recommend Gnu Emacs because it is powerful, extensible, customizable, and self-documenting.
For drawing graphs and doing statistical analysis of your data. There are many packages, including Matlab, Excel, and gnuplot.
Whenever working on a large project, you should save your notes and preliminary drafts. Many people find this material useful, and it will be helpful to you if you are ever challenged to show that the work is your own. In addition, you should keep a copy of the final report in case the original is lost. CB: Never give a prof an original!