Course Links

Resources

External

Many more programming languages have been designed than we have time to study in this course. Many are variations on a theme, and can be classified into broad categories based on their primary characteristics. Nevertheless each one offers something slightly different from the others.

The goal of this assignment is to give you an opportunity to explore a language on your own, while thinking about how it fits into the overall landscape of programming languages that we have studied in this course.

Objectives

Exploration is the first part of the assignment. You will explore your chosen language using a combination of resources available to you, including online documentation, tutorials, discussion boards, and books where available. You may share resources at this stage with others in the class working on the same language, but the goal is to see how much you can teach yourself without necessarily relying on others.

Grasping the details of a new language is difficult to do without a concrete application that makes it real. As the second part of your assignment you will develop one or more programs in the chosen language. The program should be developed by you from your own concept; reproducing someone else's example from a tutorial will not suffice. (On the other hand, translating an existing program from some other language into your target language could form the basis of a satisfactory project.)

The third part of this assignment is to share the fruits of what you have learned with the rest of class. For this piece you will create an informational poster giving an overview and description of your language designed for your peers. The poster should place the language in context, explaining why it was developed and where it is used. It will describe the key features that make the language the same or different from others we have studied. Teams will present their posters during the last week of classes.

Parts one and three of this assignment are collaborative work with the entire group that is working on your language. Part two is individual work to be completed alone, although as always you may still consult with your peers about concepts and resources.

Exploring the Language

You should spend the first week or two of this project conducting independent exploration of the target language. If you have never taught yourself a language before, this may be a new experience, but it is extremely valuable and empowering to realize that it is possible. I will be offering consulting support during class and office hours. As issues and questions arise, I will be available to help you resolve them.

During this phase of the project, you should keep a journal of your progress. Record significant milestones, stumbling points, and reflections as you go. You will share this with me as part of the readme.txt file to be turned in with the rest of the work.

Programming

In exploring your language, you should feel free to experiment with programs that test out aspects of what you are learning. Begin with a simple program (e.g., Hello World) so that you can test the infrastructure for compiling and running programs. Once that is achieved, you can experiment with different control structures (conditionals, loops, etc.) in short test programs.

As a culmination of the project, you should choose one more significant project to implement in your chosen language. Something similar in complexity to the one-time pad cipher program would make a suitable choice. However, the exact specification is left flexible to allow for variation in what the language supports and your own comfort level. Grading of this component will be subjective, based on both the ambition of the program that you attempt and your success in achieving it. It is most important to write a complete program that compiles and runs; a simpler but finished program is preferable to a more complex program that doesn't work. When in doubt about the scope of your proposed project, please consult with the professor.

You should continue to journal your experience with program development for the readme.txt.

Poster

The poster should be designed as a educational tool for your classmates and for other students who are just beginning their study of programming languages. Although we will not physically produce the posters due to the current online educational model, you should design them as though they will be printed. You can do this using presentation software such as Microsoft Powerpoint or Google Slides. Size the poster at 24 by 36 inches.

Items you should consider including in the poster:

Try to make your poster both engaging and educational. Include graphics/diagrams/visuals in addition to pure text.

Wrapping Up

The journal of your exploration and development efforts will make up the bulk of your readme.txt file. Before turning in the project, you should augment that with an overview of all the files you are submitting. Think of this as a guide for me, describing what I should look at as I assess your work. Finally, you should write a reflection on your overall experience with the assignment. What part was the most fun? What have you learned? What (if anything) do you wish had gone differently?

To Submit