Programming Languages:  Language-Learning Project
Spring 2007

One of my goals in Programming Languages is that, by the end of the semester, every student in the class should be able to learn a new programming language by himself/herself, using only a textbook, a computer, and a compiler.

To practice this skill, the class will be divided into groups of 2-3 students. Each group will become the class's expert on one language. The group will study that language throughout the semester, learning the history, data types, control constructs, and other interesting features of that language. At the end of the semester, each group will report to the class on their language.

During this project, you will be teaching yourself a new language. I will be available to help you if you can't figure something out, but the project will mostly involve independent reading and research by the group members. Rowan has textbooks and reference manuals on most of these languages in its library, so you'll want to visit the library early in the semester. Most of the languages also have good reference material available on the Web. Additionally, most of these languages (Eiffel, Fortran, Haskell, Smalltalk, Perl, Python, and Ruby) have a compiler or interpreter installed on elvis, so that you can write and test programs. The remaining languages all have free compilers or interpreters available for download; you may install them yourselves on your home computers, or you may ask me to have Rowan's systems staff install them on elvis.

You may select any of the following languages to study:

You may sign up for any language you wish from this list, but selection is first-come-first-served, and a group should have no more than 3 members. The deadline for signing up for a language group is February 7.

You will present your findings to the class at the end of the semester in two forms: a written report and an oral presentation.

The written report should answer the following questions:

  1. History:

    1. Who originally developed this language? (If it was a large team of people, name one or two leaders of the group, or the university or corporation they worked for.)

    2. Why was the language developed? What kinds of applications did the designers have in mind, or what big ideas were the designers trying to embody in the language?

    3. Today, your language is most often used for what kinds of applications?

  2. Programming paradigms:

    1. Is your language primarily a functional language, an imperative language, or a logic-programming language?

    2. Is your language purely object-oriented, not object-oriented, or a hybrid (i.e., you can do either object-oriented or non-object-oriented programming in this language)?

  3. Object-oriented features:

    1. Encapsulation: Does your language have a way of associating a method (procedure or function) with a class so that only objects of that class can call that method? (E.g., could you define a stack class and a push method so that only stack objects can call push?)

    2. Inheritance:

      1. Does your language support inheritance? That is, can you define a class, and then derive a second class from the first, so that the derived class shares some of the properties and methods of the original class?

      2. Does your language support multiple inheritance? That is, can a derived class be defined so that it inherits properties and methods from two or more base classes?

  4. Binding of data types: Are data types bound to variables and parameters at compile-time? run-time? a combination?

  5. Control Constructs:

    1. Name one decision construct in the language, and give a brief code segment (about 5-10 lines) that illustrates it. (Decision constructs are often given names like if, case, or switch.)

    2. Name one repetition construct in the language, and give a brief code segment (about 5-10 lines) that illustrates it. (One common way to achieve repetition is with loops; looping constructs are often given names like while or repeat. Some languages do not have loops, but rely instead on recursion.)

  6. Subroutines:

    1. Does your language support some kind of subroutines?

    2. Can subroutines have local variables?

    3. Can subroutines have parameters? If so, how are parameters passed? (Pass by value? Pass by reference? Pass by value-result? etc.) Is there some symbol or keyword in the program that specifies how a particular parameter will be passed?

    4. Can a subroutine return a value? Must a subroutine always return a value?

Your report should include a book, journal, or web reference for each of the answers you give. If the reference is a book or journal paper, include the page number on which you found the reference.

Your written report is due April 4. I will distribute copies of your written report to the class when the oral presentations are given.

A draft of your written report is due March 7. By this point, you should have written the answers to questions 1 (history), 2 (paradigms), 3 (object-oriented features), and 4 (binding of data types).

Your oral presentation should be 15-20 minutes in length. It should include a sample program in the chosen language, describing line-by-line how the program works. (If you wish, the sample program may be taken from a book or the Web, as long as you fully understand how the program works and give credit to the source of the program.) You should also summarize your written report for the class. Feel free to include any additional features of the language that you discovered in your reading and found interesting.

The language-learning project components will be weighted as follows:

Draft of written report: 10%
Final written report: 60%
Oral presentation: 20%
Explanation of sample program: 10%

Extra credit: For extra credit, your group may solve the semester's homework programming problem in the language your group has chosen. If you choose to do the extra credit, you should turn in your program at the same time as your language paper.


Nancy Tinkham
Computer Science Department, Rowan University

Valid HTML 4.0!