CSE 341 -- Programming Languages

Spring 1999

Department of Computer Science and Engineering, University of Washington

Steve Tanimoto (instructor) and Jeremy Baer (teaching assistant).

Projects

Version 1.03 of June 4. 
Note the updates regarding the demos.
Subject to change.

Experimental Programming Systems 

Due dates: Presentations will be on Wednesday, June 2, and Friday, June 4, at 12:30 in class.
Writeups are due Monday, June 7, at 1:30. Turn in hardcopy at 313 Sieg Hall.  Final demonstrations will be held during our scheduled final examination time on Thursday, June 10 (from 8:30-10:30 AM in Sieg 232).

 

Title: Experimental Programming Systems.

Purposes:  (1) To exercise one or more of the languages covered in the course.  (2) To create a small system that accepts user inputs as programs or actions in some kind of language and which analyzes and executes these programs or responds to the actions.

Instructions:

Form your team by Monday, May 17.
Choose a topic and submit it on a topic proposal form by Wednesday, May 19.
File a brief progress report by Monday, May 24.

Topics:
  A. a visual language that permits the user to specify computations within some nontrivial set of possible computations.
The language can have a fairly small set of primitive operations (5 to 10), but the number of possible programs that could be written in it should be fairly large or better-yet,  essentially infinite.  You might consider adopting one of the standard VL paradigms such as executable flow charts, data-flow diagrams, arrays of agents, set of visual rules, or programming by demonstration (direct manipulation of data objects by the user).

  B. a server-based web service that accepts programs from the user and which analyzes and executes them in some interesting way.  For example, a program animation service allows the user to enter a small program into an HTML form and then submit it.  The system then analyzes or interprets the program and displays some kind of animation of the program.  For example if the program manipulates an array, then the elements of the array may appear on the web page and change colors or values to show what's going on in the program.  Another example might be one that accepts Lisp S-expressions and then displays them as linked data structures on the screen and finally shows how they are transformed by the operation specified by the user.

  C. an animation language.  Make up a simple language that an animator can use to create animations that run on a web page (e.g., an applet).  Consider using Lisp or Perl to translate the user's requirements or program into a sequence of animation commands for your applet.

  D. other topics.  Other topics are possible, but keep in mind the requirement that the project explore some new idea related to programming systems -- a new language or a new way of analyzing or interpreting programs.  Making your project web-based in some way and utilizing graphics are both encouraged.  Projects that involve implementing separate cooperating components in different languages, such as Lisp + Perl,  Java + Lisp, etc. are encouraged, too.

Teamwork:  Work in teams of two to three people on this assignment.  Each person needs to be part of a team.

Presentations:  Each team will make a brief presentation.  There are 8 presentations scheduled for Wednesday, June 2, and 10 presentations on Friday.  Each team on Wednesday should plan a 5 minute presentation.  Each team on Friday should plan a 4 minute presentation.  Give a role to each team member.  Please prepare one or two transparencies per team member unless you need one more to illustrate something.  Things you should present include:  (1) what the system does or is intended to do, ideally with either a real or a made-up example, (2) what software components are in your system, and how they communicate. (3) any particularly interesting functions or code items in your project.  During your presentation, try to answer the question of how your system provides some kind of language or programming facility for its users.

Writeups:  Each team will prepare a hardcopy report that covers the following aspects of your project.
1. Cover page including (a) title, (b) names of team members and (c) a short description (50-150 words)
2. Diagram showing main components of the software (1 page)
3. Technical description, with a section for each major component (2 to 5 pages)
4. Description of a sample session or example program in your system, with 2-4 screen shots (2 to 5 pages)
5. A set of code excerpts showing a few highlights of your source code-- up to one page per team member.
    Comment each excerpt with a description of what it does or is a part of, and who the author is.
6. A "retrospective" that covers (a) how the work was divided among the team members, (b) the top 2 or 3 challenges you faced, and (c) the top 2 or 3 lessons or skills you learned. (1 to 2 pages)
7. A list of any references, software packages, or other resources that you used (1 page).

Demonstrations:  On Thursday, June 10 from 8:30-10:30, we will be doing demonstrations.  Arrive on time!  Attendance will be taken at the beginning!  Then we'll do the formal course evaluations mandated by the administration.  After that, the demos will begin. In addition to demonstrations for the instructors, you'll be doing peer evaluations as in some of the assignments we've done in the past.  When you come for your demos, bring the following:

1. a sharpened number 2 pencil.
2. (optional) an "update" sheet for your writeup.  The update must be no longer than 2 pages long, and it can be used to describe any changes you made to your project between the time you wrote the wrteup and the time of the demonstration.
3. a source-code listing for your project, not to exceed 12 sheets of paper per team member.