Lab Report Format

Lab reports are intended to read like a paper. Make them structured in prose, not in a question-and-answer kind of format. Think of this as more of a presentation than filling out a form. Your lab report must include the following:

Grading Rubric

Below is the rubric we use for grading the lab reports:

Total: 40 points

Common feedback

Here's a listing of various general comments we've made to lab reports in the past.

Clarity is king. The single most important goal in technical writing is to be clear. Your writing means nothing if it's not understood, and technical writing often is conveying complex nuance. Don't think about being formal, think about being systematic and clear.

Use Active Voice. Despite what you may have learned in high school, most readers of academic research expect active voice. Actually, in most all technical writing, active voice is preferred. Passive voice often lends itself to ambiguity because it lacks who is doing what (e.g. "The code was implemented" vs. "I implemented the code"). Instead, you can use "I" or "We".

Magic numbers. Like in code, arbitrary numbers stick out like a sore thumb. Any time you write a hard number, make sure the reason for its existence is clearly defined. ("Why did you run your experiment 27 times and not 28?").

Limitations are not a retrospective. A limitation in research is a factor that can influence your results. This can the result of all kinds of choices you made, from the validity of your measurements, the realism of your data sets, to the implementation choices you made. In the scientific community, it is understood that all studies have limitations - and lacking limitations is more of a sign of laziness on your part than it is of the quality of your work. Here are some example ARE limitations:

The following things are NOT valid limitations: The best way to state a limitation is to connect how one factor influences your results, and then discuss why this may or may not have happened. NOTE: the limitations section is actually probably the toughest part to write for most SE majors taking this course.

Be reproducible!. Are your decisions documented enough that someone could reproduce your work with most of the same parameters along the way?

If you don't believe your choices, who will?. Stand by your work! Describe what doesn't work, but make your work as believable as possible. All science has limitations, but if you are open about those limits then someone else may see your evidence and accept it even if you don't because they are more objective than you are about your own work.

Representative over Random. Random is not always the best type of input! The world is not as random as we think it is. Focus on experimenting on a realistic scenario to test instead of just randomizing all your inputs.

Write like someone needs your results. Always think about how someone could use your study. Will they use it in a meta-study? Will you use it in a meeting of software engineers? This should mean that your decisions that seemed obvious to you might still need to be documented so that your study could compare to other studies.

Figures & Tables should convey a message quickly. Don't make your reader do numerical comparisons in their head across your table. Draw reader's eye to the message of your chart quickly. Graphs are useful for getting a quick gestalt of how variables behave, but also make sure they are clear in their axes and legends.

Averages are sensitive to outliers. Any time you are reporting averages, know that computers are quirky and sometimes have one experimental run that can skew your results. Always report standard deviation along with averages at the very least. Report medians too. Graphs also help convey outliers as well.

Submitting Labs

Labs are due on the day of your Lab Meeting (usually Mondays, but check the schedule for exact days). You will need to have your lab report done by the lab meeting and be ready for feedback. Your team will discuss your work and provide GoogleDoc feedback. Everyone will be graded on the quality of feedback they provide to others (see below).

Providing Feedback on Labs

You will need to provide feedback to your labmates each week. If you are in the meeting, make sure you ask questions and help them make their report better. For grading purposes, we consider your presence in the lab meeting enough. If you miss the lab meeting, we will be looking for comments on your labmates' GoogleDoc that night so they can improve their report.

A high-quality comment is insightful, actionable, and constructive. We do not place a number on how many comments you are to give - only on how helpful and insightful they are. Your comments should fall into the following categories:

Lab Topics

Lab #1 Sorting Algorithms on Arrays

Lab #2 Recursion

Lab #3: Native library bindings

Interpreted languages today are quite a marvel. They allow programmers to prototype their code rapidly, write very readable code, and perform complex operations with concise syntax. But, one of their (oft-touted) disadvantages is an inherent performance degradation that comes with on-the-fly parsing and interpretation. In most modern production-quality interpreted programming languages, such as Python, Ruby, and Javascript, most of the performance-demanding work is actually done in C extensions. (This is pretty humorous when you think about it - given how much programmers love to have endless debates about these languages today and yet most of the time everyone is just binding to the exact same C libraries under the hood).

In this lab, you will be testing out the performance benefits and drawbacks of binding to a native language. This involves some C programming and some interpreted language programming.

Lab #4: Multiprocessing

For 40+ years, Moore's Law was a phenomenon. But today, the era of Moore's Law has largely ended, which has brought in the advent of multiprocessing and multi-core processing. In this lab, you'll be exploring the benefits and drawbacks of parallelization.

Lab #5: Multithreading

Multithreading is a much more lightweight approach to parallelization when compared to multiprocessing.

Meta Study #1

Science only advances when we can aggregate individual studies into systematic knowledge. Let's attempt to systematize the knowledge that we gained through our labs.

To do this, we need everyone to do the following ASAP. The sooner you do this, the easier time your teammates will have studying your work.

Next, we need a group to deliver a meta-study for each of the labs we've had. Everybody has been assigned a Meta Study Team, which should NOT have any members of your existing lab group. You can find the assignment on myCourses under Groups

Lab #6: Relational Databases

Databases are extremely powerful systems with lots of options and features. Every design decision in a database ends up with various trade-offs. I n this study we will be examining some basic choices you can make in a relational database system.

Lab #7: Compiler Optimizations

Compilers can do a lot for us. But how realistic are these optimization situations?

Lab #8: Revisit