You will complete a 10-12 page research paper on a programming language topic of interest to you that is not covered in detail in this course. You will need to decide on a topic in consultation with the professor.
Please upload a copy (preferably PDF) of your paper, as well as bringing in a hardcopy. Also please bring in your previous draft with my comments if possible.
One type of topic is a programming language comparison paper. A paper of this form first discusses a semantic feature or control construct conceptually, then looks at how two or more different programming languages address that feature or concept. This is particularly interesting when the approaches taken by the languages differ in significant ways. For this kind of paper you need to find a construct that is semantically different for different languages, not just one that has slightly different syntax. For example, comparing the word that different languages use for a counting loop (e.g., FOR in Ada, DO in FORTRAN) will not make for an interesting paper.
Many programming languages have had long lives and have evolved significantly over time. This whole area could be explored in several ways. You could look at how one particular language has evolved over time. A study of this sort could look at how an older language, say FORTRAN, has adapted to changes in expectations about programming languages. Alternately, a study of this sort could look at how a few languages have adapted to a particular change in expectations. For example, you could look at how languages have evolved to be compatible with the World Wide Web or you could look at how languages have been extended to support mobile applictions.
One interesting topic area that students have been exploring in recent years is looking at how languages have been adapted/extended for particular problem domains. For example, languages for doing bioinformatics research or languages for writing computer games or languages for teaching introductory computer science or languages for building embedded systems (e.g., network controllers). Be clear that with these topics the focus needs to be on programming language issues. You probably want to look at 2 or 3 languages that are used in these areas, talk about how they have been adapted or extended to support the areas (but be careful to focus on general, portable, non-vendor-specific extensions) and why particular languages are the primary languages for particular kinds of problems.
Another general topic area is to take a modern programming language concept (e.g., exception handling, modules, threads, abstract data types) and examine either how different languages choose to use the concept or how languages use of the concept has evolved over time.
We will discuss the idea of programming language paradigms throughout this class. A paradigm is an approach to the whole idea of programming. Another paper topic area is to choose a paradigm and examine it in detail, both describing what distinguishes the chosen paradigm from others and looking at languages that embody various aspects of the paradigm. Example paradigms include object-oriented programming, functional programming, logical programming, event-based programming, and concurrent programming. The last two paradigms mentioned are particularly interesting, because we do not look at them in any detail in this class. Note that, for all practical purposes, no actual programming language embodies one and only one paradigm. Since we go into the object-oriented paradigm in quite a bit of detail in class, just describing the object-oriented paradigm is not an acceptable paper topic. It is also not acceptable to just write a paper about concurrent programming.
Other paper topic areas are possible. Talk to me about what you are interested in doing and we can probably work out something.
You will want to begin your research early; many sources are available online or in the library, but many of you will want to use MOBIUS, and this can take a few weeks. You can find lots of useful references in the ACM Digital Library. Truman's library pays big bucks to ACM to give us full access to all of these papers, so you should definitely take advantage of this. Sometimes figuring out what to search for can be tricky, so please ask for help.
The subparts and due dates associated with this assignment are as follows.
You should incorporate information from at least three references (other than the textbook). It is acceptable to use online references, but, if you do, you should cite your source just like with any other reference. Please consider the reliability of your online source and only use online sources when you are confident of their competence to address the relevant issues. In general Wikipedia is a great place to get ideas about a topic, but not an acceptable source for a college level paper. You should dig deeper. See the class web page for a link to a page describing various strategies for citing online sources. If you have any questions about this, ask me. Be careful to use your sources as a reference, but to write your paper in your own words.
You should write this paper for an audience of informed computer scientists who are unfamiliar with the particular topic you are presenting, but are familiar with programming. You may assume some familiarity with prominent programming languages, to allow you to make comparisons or place your topic in context. You are expected to follow the conventions of academic prose.
I strongly encourage you to take advantage of the Writing Center for help in writing and editing your paper. This is especially true for students whose first paper had significant grammatical or structural problems. Call them at x4484 or stop in to sign up for an appointment with a Writing Center consultant. Plan to do this at least 3 or 4 days before your paper is due.