Jump to: Components, Languages, Phase 1, Phase 3, Poster


Course projects will involve learning about a single programming language. These languages were chosen because of their significant historical, theoretical, or practical impact, and because most students were previously unfamiliar with them.

Some students will work individually, and some will work in pairs. Students working in pairs will be given more or more challenging tasks, as indicated below. All individuals or groups within a single lab section will be assigned different languages. For this reason, collaboration with anyone in your lab section is permitted, although all work must be your own. However, collaboration with students in different sections working on the same language is stricly forbidden.

Project Components

Course projects will be completed in three phases:

  1. Gain a basic familiarity with the chosen language by making some minor modifications to an existing program in your language. Details are given below.
    Due date: Friday, September 30 at 0800.
  2. Develop a deeper understanding of the chosen language by writing a complete program in the language. The task for each language is choosen to be idiomatic and well-suited for that language. Details are given on the language's page, linked below.
    Due dates: Friday, November 4 (5% bonus), Monday, November 14, at 0800. (See announcement here for details.)
  3. Share what you have learned by preparing a 10-minute presentation on your language. Students working in pairs will also have to hand in a written brief. Specific requirements are given below.
    Due date: Week of December 4, during your lab.

Programming Languages

The list of programming languages from which project topics will be chosen is as follows:

Phase 1: Program Modification

The first part of the project will start with the "99 bottles of beer" program for your language. The overall page is here, and links to each language's page are on the respective language pages, linked above.

Your task is to modify the existing program in the following ways:

  1. Write "XX lines of text on the screen." instead of the usual phrase. No special final stanza is required. So after this modification, your program will print
      99 lines of text on the screen.
      98 lines of text on the screen.
      1 line of text on the screen.
  2. Count up from 1 instead of down from 99.
  3. Read an integer from standard in and count up to that value instead of 99.
  4. Only print lines corresponding to odd numbers.
  5. Only print lines corresponding to Fibonacci numbers. The integer input will give the number of Fibonacci numbers (and lines) you should compute (and print). So you will have
      1 line of text on the screen.
      1 line of text on the screen.
      2 lines of text on the screen.
      3 lines of text on the screen.
      5 lines of text on the screen.
  6. Print the number on each line fully factored into prime factors. For instance, 1 will print as () - an empty pair of parentheses, 2 will print as (2), and 24 as (2*2*2*3).
  7. Open a file called "out.txt" and print equivalent output to the screen and to that file. The lines in the file should be of the form "XX lines of text in the file."
  8. Write to the screen and to out.txt concurrently, in separate processes or threads.

Which modifications you must implement depends on the language chosen and whether you are working in a pair. You must implement the modifications according to the following table:

Language Individual Pair
Ocaml1,2,3,5,7 1,2,3,5,6,7

Phase 3: Presentation and Paper

Newer addition: Presentations will be judged according to the standard departmental rubric. The schedule of presentations has been posted here.

New addition: Poster submissions (see below) may take the place of the written paper for students working in pairs.

Each individual or group will give a 10-minute presentation in lab during the last week. Due to time constraints, the 10 minute limit will be strictly enforced. Students are encouraged to plan for a slightly shorter presentation, possibly allowing a few minutes for questions.

Students working in pairs must also submit a two- to four-page paper on their language. (Normal margins, normal font, 12-point, single spaced. The emphasis is definitely on quality over quantity.)

The presentation and (where applicable) paper must relate to the topics listed below, as they relate to your chosen language. Not every topic needs to be covered for every language. Students should draw from a variety of sources, especially including their own experiences working on this project. Actual code examples are encouraged. The target audience is an SI 413 graduate (i.e., a classmate), not the instructor. The presentation/paper must convey significantly more information than could be gleaned from a single source such as Wikipedia.



New: Vote for the winning poster!

Every student or group is encouraged to submit a poster corresponding to their project. For students working in pairs, the poster submission may take the place of the written paper submission. (No one will be excused from the presentation requirement!)

The best poster (as judged by the instructor and a student poll) will be displayed for generations to come, and its author(s) will receive a 15% bonus on their entire project grade (all parts).

The ultimate purpose of the poster will be to advertise for the course and give a little taste of some of the things in it. As such, although the focus will still be on your specific programming language in the categories above, you should just concentrate on a few especially exciting or interesting aspects of the language. Actual code examples will be very good, along with some nice visual examples showing what the language has been used for or could be used for. Be creative!

Because the poster will be used to advertise for the course, the title should be "SI 413: Programming Languages and Implementation", and the following text should also appear somewhere:

This course examines basic concepts underlying the design of modern programming languages: types, control structures, abstraction mechanisms, inheritance, and constructs for programming. This course will include programming assignments in several languages.

Dr. Needham has some links about making posters at USNA avaiable here. All posters should be submitted electronically; only the winning poster will be printed.