This is the archived website of SI 413 from the Fall 2012 semester. Feel free to browse around; you may also find more recent offerings at my teaching page.


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. Projects will consist of three phases: two programming parts, and a presentation.

All students will work in pairs. Both partners in a pair must be in the same lab section. Project topics are organized into 6 groups of 3 languages each, as shown below. The choice of all projects and groups will be organized by the section leaders, subject to the following restrictions:

Citations and honor rules

One of the main purposes of this project is to learn a programming language on your own. Therefore any and all use of outside resources on the languages is encouraged, as long as they are all documented specifically and clearly. Don't just say "Wikipedia", tell me which Wikipedia page(s) you found something useful on. (It would probably be helpful to keep track of these citations in a text file as you go.)

Because you all have different topics, collaboration between any students is permitted (and encouraged), provided that you document it. The only exception is that no collaboration between students in different groups working on the same language is permitted.


Course projects will be completed in three phases. Details will be posted well in advance of the deadlines.

  1. Gain a basic familiarity with the chosen language by making some minor modifications to an existing program in your language.
    Due date: Friday, September 12 at 0900.
    Full details are here.
  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.
    Due date: Friday, November 16 at 0900
    Full details are here.
  3. Share what you have learned by preparing a 15-minute presentation on your language.
    Due date: In class and during lab, Week of December 2.
    Full details are here.

The Languages (Topics)

There are 18 programming languages available for project topics, organized into 6 groups below. When choosing your topic, I recommend choosing something which is actually interesting to you. Efforts will be made to make the difficulty of the project independent of the topic choice.

Esoteric Languages

These languages were created not to solve any particular programming problem, but for their own sake. Their goal is to expand our thinking in what a programming language is and can be.

Object-Oriented Languages with GUIs

The history of object-oriented programming is closely associated with the history of windowed user interfaces. Projects in these languages must embrace the OO paradigm and will involve creating graphical user interfaces with included windowing toolkits.

Concurrent Programming Languages

While their features vary, each of these languages was designed and built with parallel processing (concurrent programming) in mind. Projects will make use of this style of programming.

Declarative Languages

These programming languages were designed to make programming simpler and more concise. While they follow different paradigms, they are all declarative, meaning they describe what is to be computed without necessarily spelling out precisely how it should happen.

Functional Front-Ends

These are all functional programming languages that sit on top of different systems. Their main purpose is to make the use of that underlying thing easier.


Scripting languages have the goal of making certain computational or processing tasks easy to program. They are interpreted and do not have efficiency as a primary concern.

Old School

Know your roots! These older programming languages were highly influential on the most popular modern languages, and on the history of computer science in general. They were so popular in fact that they are still used today, in certain industries, by enthusiasts, and to maintain legacy code.

Useful Links

Here are some useful resources for any of your languages. You still need to reference these if you use them!