# Language Explore Project¶

In the Language Explore Project, you will research a programming language of your own choice, learn the language and write a few programs in it, and write a report highlighting and evaluating the languages features.

The criterions for the language you may choose are:

1. You cannot already have in-depth familiarity with the language. The purpose of this project is to learn a new programming language, and I don’t want you to explore a language you use frequently. It’s fine if you have basic familiarity (maybe read a bit of code, or written a function or two), but if you’ve written more than 100 lines of code in the language, you probably have in-depth familiarity and cannot explore that language.
2. The language cannot be esoteric. I want you to be able to evaluate (non-trivially) the features of the language using the evaluation criteria presented in the course, and esoteric languages are usually hard to apply to these criteria.
3. The language cannot be Haskell or Python. These are the languages we are exploring in the course, and hence you cannot overlap the exploration with your own personal exploration.

In addition, this project is parter optional, but working with a partner is highly recommended. I will allow teams of three as well, but discourage forming a team of three as I will have significantly increased expectations from teams of three (whereas partner/solo have the same expectations).

Slip days can be used on both the intermediate deliverables and the final deliverable. If you have a partner (or a team of three), slip days are pulled from everyone in your team. For example, if a deliverable is submitted a day late, one slip day will be pulled from each person.

## Deliverable 1: Find a Language, Find a Partner¶

Due Date: Wednesday, Feb 21st, at 11:59 PM. Email Jack (jrosenth@mines.edu)

First, find a programming language you would like to explore. A good place to start might be a list of programming languages by category. Read up on the language, does it intrigue you enough to write a few programs in it? Write a report on it? Could you evaluate it using the criteria we talked about in class?

Next, you may optionally find a partner who wants to work with you. If you don’t know anyone you might want to work with, send an Email to the mailing list with a few languages you’d be interested to be working with, and chances are someone will respond to you.

Finally, Email me your language selection and partner selection (if applicable).

## Deliverable 2: Draft of Example Programs¶

Due Date: Sunday, March 4th, at 11:59 PM Submit a .tar.{gz,bz2,xz} or .zip archive to Gradescope

Write a few example programs in your language. Your example programs should provide a demonstration of the languages features, or potentially something it’s pretty good for. For example, if you were exploring a Lisp-like language, you may want to write a program for symbolic manipulation, as Lisp is particularly good for this. As another example, if your language is really good at concurrency, you’ll definitely want to write an example which makes good use of concurrency.

For partner and solo teams, I expect two to three programs of reasonable size. I’m not looking for small code snippets, but decently sized programs; think approximately the complexity of a CSCI-261 or CSCI-262 homework project. For teams of three, I expect four or five programs of reasonable size.

Finally, for partners or teams of three, make sure to include in a comment at the top of each program with who wrote the program. If you pair programmed it together, make a note of that. It’s OK if programs are completed individually, I just expect that everyone will have written at least one program in total.

Include a plain text README file in your submission containing instructions on how to compile and run each program on a standard Linux machine. If you know how to write a Makefile, I would much appreciate if you could include one as well as it will make my grading easier [1] (Makefile is optional, but highly recommended).

Note

Even though I’m only asking for a draft, I still expect your programs to compile and run. The reason I consider it a “draft” is since I will allow you to change them slightly between the draft and the final submission.

Warning

Programs should be of your own work. Copying & pasting an 8-queens example from your language’s Wikipedia page will be considered plagarism. (An 8-queens program of your own work typically makes a good example program though).

 [1] Pun intended

## Deliverable 3: Draft of Report¶

Due Date: Sunday, March 11th, at 11:59 PM Submit a .pdf file to Gradescope

Write a report that:

1. Introduces the programming language, its goals, and its history
2. Classifies the language, and provides an overview of the language’s features
3. Evaluates the language using the criteria presented in class (is it more writable than readable? Etcetera etcetera etcetera.)
5. Describes syntactic details that may make the language more expressive, but avoid describing lots of syntactic details (find a select few details that are important to the language)
6. Describes your example code, why you wrote it, what it shows, what it does, what problems you encountered, etc.

Make sure to follow the formatting and style requirements outlined below.

For this intermediate deliverable, I expect your report be mostly complete, that is, missing at most a section or some minor details.

For solo/partners, your report should probably be 3 to 5 pages in length (text length, don’t count space taken up by figures, code, and tables). For groups of three, your report should probably be 5 to 8 pages in length. Writing quality and conciseness is more important than volume, so a 3 page report that conveys its point very concisely will receive a better grade than a 5 page report that uses lots of fluff.

Report Formatting Requirements

• LaTeX highly recommended, but not a requirement. If you would like a LaTeX template (optional), you can download one here.
• Sized for letter paper
• 20 mm margins
• Single spaced
• No indentation for new paragraphs
• 4pt to 6pt skip between paragraphs
• 11pt or 12pt size, professional-looking serif font (do not use a sans-serif font)
• Section headings and the report title can be sans-serif if you would like
• Use a justified right margin if your typesetting software has good algorithms for breaking lines, use ragged-right otherwise
• Use section headings as appropriate, keep space used by section headings minimal (LaTeX users: try out \usepackage[compact,bf,small]{titlesec})
• Figures larger than one-third of a page should be placed in an appendix attached to the back
• Attach your large code examples to the very back of the report
• Cite your sources as appropriate, use IEEE-style citations
• All citations should be referred to in the text at least once
• Captions for figures should be placed below the graphic, and captions for tables should be placed above the table
• All tables and figures should be referred to in the text at least once by their figure or table number
• Sections of source code should be typeset in a fixed-width font, unless it is not the style of your language to do so (for example, block-based educational programming languages)
• Syntax highlighting is much appreciated, but not a requirement
• Mathematics should be professionally typeset using software like LaTeX, or using the Equation Editor in Microsoft

Writing Style Guidelines

• Write as concisely as possible, do not add any extra “fluff”
• Break your writing into well-organized paragraphs
• Use correct spelling, punctuation, and grammar
• Use a formal writing style (no “I”, “you”, “it”, etc.)
• When quoting or using parentheses, the punctuation is placed on the outside if you are ending the sentence, the inside if the inside content ends a sentence, or both if necessary. Same applies to commas. For example, if you are quoting I like turtles. at the end of a sentence, you would write “I like turtles.”. (that is, with two periods).
• Use abbreviations correctly. i.e. does not mean “in example”, and a comma always follows e.g..
• Your report must have a descriptive title; something more than just the name of the language you are exploring

## Final Deliverable¶

Due Date: Friday, March 23rd, at 11:59 PM Put your report PDF in the same archive as your code and submit on Gradescope.

For the final deliverable, finalize your report and code, and submit to Gradescope. Give yourself a pat on the back and go eat some froyo.