Final Assignment

The final assignment requires you to:

  1. Select any program you've ever written which is at least 100 lines long. You must be able to send its source code to me. You may select a prior assignment in this course.
  2. Write an equivalent program in a language of your choosing which we did not cover in class (e.g., no JavaScript, Swift, Prolog, or Rust). EDIT: Java, C, and C++ are also not permitted, given that many people already know one of these. Rust is now permitted, since we did not have a chance to cover it. If you already started your project and you chose Java/C/C++, it's ok; just don't start a new project with this.

The intention with this assignment is to gain experience with a completely new language. Languages come and go rapidly, and so being able to similarly pick up new languages on the fly is a great skill to have. By reimplementing something you've already worked with, this shows you (presumably) understand the problem to solve, keeping most of the difficulty in the use of the new language itself. Additionally, you may find that the language forces you to think in a different way than you did before; for example, assignments 1 and 2 both implement immutable lists, but they have significantly different implementations in JavaScript and Swift.

You may work in groups of up to three students. For each person in the group, the minimum code size for the original program increases by 100 lines, so a group of three would need a 300 line program minimum.

Different individuals/groups may choose the same language.

Final Presentation

For the final presentation, you will be given four minutes max to talk about the language you chose for the final assignment. Your talk must cover the following:

Code snippets should be included as part of this presentation, to give a sense of the syntax of the language.

Any slides must be sent to me by 8 AM of the day of your talk. Due to the short duration, we will not have time for people to switch laptops, so I'll have all slides ready to go on my laptop. Additionally, I will have to cut you off at the 4 minute mark. You should prep your talk to be absolutely sure it fits within 4 minutes.

These are effectively lightning talks. The short timeframe forces the presentation to contain only the absolute essentials. You likely won't be able to cover every pro/con of the language, or discuss background necessary to understand it. However, this should be enough time to convey why someone would care about the language, and to get people interested in it. The intention with this is to give you experience pitching a potential language/tool/technique to use for a project, perhaps to management or other team members. On a similar note, your talk does not have to put the language in a positive light, and may be highly critical of the language; you may very well be trying to convince a team not to use a particular tool.

For groups, it's not required for each student to speak. Every student in the group will receive the same presentation score.