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:
- History of the language and its developers
- Main features / philosophy. This could take the form of an "elevator pitch" for the language
- Usage details
- Specific linguistic aspects of interest, with sample code
- Contrasts and comparisons with other languages
- References to resources and further information
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
- programs.zip containing all the program files you have written, together with any support files or directory structures needed for compilation (if necessary)
- poster.pdf containing your informational poster
- readme.txt containing your journal and self-reflection on this assignment. Since this is a more involved project than the weekly homeworks, your reflection should also go into more depth.