Revision history
Due
Turn in
Rubrics
In this assignment, you will argue for the usefulness of a language, partly basing your case on numeric data. The project has three parts: Determining the conditions under which each of your chosen languages ranks first, drafting an argument based on the MAGIC criteria, refining your argument based on MAGIC, and finally writing your full analysis. This description only covers the first two steps.
The Computer language benchmarks game compares 33 languages across 19 benchmarks. Not every benchmark is implemented for every language. In fact, no language has every benchmark.
You can ask that languages be ranked on CPU time, memory use, or source code size. You can also specify a weighted average of these metrics. Having specified a metric, pressing the "Calculate" button will rank the languages in descending order of goodness by that metric:
Pick one of the languages on the list. It might be one you like, one you dislike, or one with an odd name. But you should be able to read a short program written in that language, because for the final draft you may wish to comment on the benchmarks written in that language.
Now play around with the weightings of the benchmarks and try to find a set that presents your chosen language in the best possible light. If it's slow in execution but terse to write, set how it ranks for code size. Conversely, if it's tedious to write but very fast to execute, look at the rankings based upon CPU time. If you still can't get it near the top rankings, try selecting benchmarks that show it in the best light. At this stage, you can be devious. For example, if C++ keeps you out of top place, set the weights to require one or both of the benchmarks missing for C++. Presto! C++ is banished from the rankings.
Every argument addresses an audience. For this assignment, invent your audience. Briefly describe the kind of programmers you are addressing and what problem your advice is meant to solve. For example, if you've found that Smalltalk is slower than its object-oriented cousin Java but has shorter programs, who might benefit from that information, and for what purpose? (Defining your audience isn't as unrealistic as it might sound. Researchers often produce results first, then decide which audience might benefit most from hearing about them)
Once you have your audience, go through your values and printouts and rankings, looking for the strongest case you can make. It doesn't have to be ironclad, or even positive. You might conclude that a given language is inappropriate for some application. (Of course, the negative argument is only interesting if your audience is already using that language or considering its use.)
Materials in hand, work up your first draft. This draft will focus on your argument using the numbers. Your final submission will integrate these quantitative, numeric arguments with deductive arguments (for example, "A defining characteristic of a scripting language is its lack of variable declarations") and qualitative arguments (for example, "Perl's strong pattern matching features make it a convenient language for text processing"). Those other arguments will be essential for providing a good context. For the draft, however, you will be working through only your numeric arguments.
Begin your draft with a brief description of your audience. Follow it with a framing sentence, stating your general conclusion. It should have a structure like, "[Language X] is an excellent choice for [audience, application, or both] because:". Then itemize your arguments for each of the five MAGIC criteria, showing how they support the conclusion. Finally, list any deductive or qualitative points that you might want to make as well.
For example:
This argument is addressed to the audience of real-time programmers, particularly those building telecommunications systems.
Based on the two interprocess communication benchmarks ("chameneos-redux" and "thread-ring"), Erlang is an excellent choice for real-time systems because:
Magnitude: Giving CPU, memory, and code size equal weight, Erlang is the second-ranked language, only 50% below the top-ranked language, Haskell, and 20% above the third-ranked language, Mozart.
Articulation: Erlang retains its high rankings when considering only CPU (2nd place) or only code size (tied with Haskell for first place). Erlang has two particularly limiting features. The first is its large memory use. When ranked on memory, Erlang drops to 8th place, requiring 3.0 times as much as top-ranked Pascal and 2.5 times as much as Haskell. Second, Erlang has a high startup cost (benchmark "startup"), taking 11.0 times as much CPU time to start up as the leader, Pascal, and 7.9 times as long as Haskell.
Generality: The comparison of Erlang and Haskell is based upon the two interprocess communication benchmarks. Those benchmarks test important features for real-time programming, but overall language performance matters as well. Measuring the default selection of 17 benchmarks by giving CPU, memory, and code size equal weight, Pascal is highest-ranked, Haskell is 10th with a score 1.6 times larger, and Erlang is 20th with a score 3.6 times higher.
Interestingness: These results will interest the communications community because they are actively considering Erlang, which was developed at a manufacturer of telecommunications switches, Ericsson, and has been used in several of their products.
Credibility: My arguments for this category would likely apply to the results for any language. So I won't provide a sample answer. As a guide for your own answer, consider the following questions:
Other points I might make:
The MAGIC criteria are just ways of assessing the strengths and weaknesses of a quantitative argument. You will need a different perspective for writing the final argument. For the final argument, you will integrate the quantitative performance results with the broader qualitative issues you listed at the end of your draft. To accomplish this integration, you will need to consider the audience and the context of your argument.
Begin this assignment by specifying your audience. Describe them in a paragraph. What are their concerns? What are their assumptions? Assume that you work for an organization, either for-profit, non-profit, or government. Your organization may have software as its fundamental product (either by selling the software or by selling a service through software, as in an e-commerce site), or it may use software to manage its operations (as, say ICBC sells insurance but uses large software systems to achieve its goals). You work for the software development team in that organization, and your audience is your coworkers in that group.
The audience you specify does not have to be the same as the one you specified for the draft.
Granted, you are unlikely to describe your audience in a normal document. They know who they are, and you may not want them to see how you characterize them in any case ("Overly worried about execution time costs of garbage collection...Paranoid fear of large commercial vendors..."). This is just a necessity of class exercises. Accepting that, just put the description of the audience at the start of your document, and set it slightly apart from the body of the document. Write it in italic style. For example:
Audience: This article describing the importance of C++ for dog training is written for owners of large dogs. These owners consider CPU speed the most valuable feature of a language, and aren't concerned about memory space (consider their choice of pets)....
C++ is the perfect language for owners of Saint Bernards, Great Danes, and other large breeds because...
Your goal for this argument is to inform. Assume that you want to inform your coworkers of what you've learned from benchmarking your language.
Set aside your draft. It's done its work by helping you work through your ideas. Let the structure of the material guide the structure of your argument, but bear in mind your secondary purpose of persuading the reader that this information is worth their time. To that end, let the audience and context influence how you arrange your points in sequence. What will best establish common ground with your audience? Do you want to start with their biggest concern and get it out of the way or build up to it after a series of small points? Consider the relative strengths of the points as well. Are your numbers unequivocal or might readers of equal technical skill and good will take different interpretations? Did you get a strong result by limiting the generality of your conclusions, say by only considering one or two benchmarks? Some of your points will inevitably be weaker. Where can you put them so that they do the least damage to your case?
Writing to inform gives you freedom to present all aspects of your results. If they are mixed, say so. You can be enthusiastic for your language without being partisan. Your numeric data may or may not be the centerpiece of your argument, but they should be present.