SI 413 Fall 2023

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


1 Overview

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.

Students will work individually or (mostly) in pairs. Both partners in any pair must be in the same lab section. Project topics are organized into 7 categories of 2-4 languages each, as shown below. The choice of all projects and groups will be organized by the section leaders, subject to the following restrictions:

  • No two groups in the same section may choose the same language.
  • No more than two groups in the same lab section may work on languages in the same category below.
  • At least six of the seven categories of languages below must be covered in each section.

2 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.

3 Components

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

  1. Choose your partners and languages.
    Due date: Wednesday, August 23 at 2359.
  2. Gain a basic familiarity with the chosen language by making some minor modifications to an existing program in your language.
    Due date: Wednesday, September 20 at 2359.
    Full details are here.
  3. 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: Wednesday, November 1 at 2359.
    Full details are here.
  4. Share what you have learned by preparing a 10-minute presentation on your language.
    Due date: During lab time on Thursday, December 7.
    Full details are here.

4 The Languages (Topics)

There are 20 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.

Industry-backed Languages

These languages were mostly created out of a single company, although their use has now expanded considerably and there are free compilers or interpreters available. Projects in these languages must embrace the OO paradigm and will likely 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 virtual machines or other languages. Their main purpose is to get all the benefits of programming in a functional language, plus the benefits of being able to run code smoothly on any system.


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.

5 Useful Links

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

  • Wikipedia (of course!)
  • 99 Bottles of Beer - the famous song in every programming language.
  • Rosetta Code - many small program examples in every programming language.
  • Esolang - wiki for esoteric programming languages (only the first three).
  • ...? Suggest another source to Dr. Roche if you find it!