This is the archived website of SI 413 from the Fall 2013 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 - with exactly one exception - 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:
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.
There are 23 programming languages available for project topics, organized into 7 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.
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.
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.
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.
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.
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.
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.
Here are some useful resources for any of your languages. You still need to reference these if you use them!