Course Web Site:   https://www.cs.kzoo.edu/cs320/


Course Overview:

The learning objectives for this course are for you to:

  • Be able to identify the key, distinctive characteristics of the three major programming paradigms.
  • Understand multiple approaches to a variety of language constructs, such as parameter passing, loops vs. recursion, and inheritance mechanisms.
  • Write a program in a functional language (Haskell) utilizing features that are distinctive to that paradigm.
  • Be familiar with some of the history and wealth of variety of programming languages from the late 1950's to the present.
  • Explore one language in greater depth, comparing it to a language you were already familiar with, to Haskell, and to other langages introduced by classmates through student presentations.

We will accomplish these goals by studying general programming language concepts and paradigms, and by looking at numerous examples to see the historical progression of language design. Since most K students are familiar with imperative and object-oriented programming, we will pay particular attention to functional languages. You will write programs in both Scheme and Haskell, and we will use Haskell to explore the semantics of both functional and imperative languages.

This course will be run as a seminar course, which means that everyone will be actively involved in both teaching and learning from each other. You will:

  • Read about language constructs in the textbook and other sources.
  • Write programs in Scheme and Haskell.
  • Research a historical or current language and provide an introductory presentation to your classmates.
  • Write weekly reflective journal entries describing your progress, culminating in a final overview.

General Outline:

Week 1: Introduction: motivation for studying programming languages, history of programming languages, introduction to the major paradigms
Weeks 2 - 3: Concepts underlying Functional Languages, with particular emphasis on Scheme and Haskell
Weeks 3 - 4: Syntax and Semantics
Weeks 5 - 6: Concepts underlying Imperative Languages
Weeks 7 - 8: Data Abstraction and Object-Orientation
Week 8: Exception Handling
Weeks 9 - 10: Declarative Languages, especially Prolog

Resources:

Textbooks and Other Readings

  • Sebesta, R. Concepts of Programming Languages, Eleventh Ed.. Addison-Wesley, 2015.
  • Lipovaca, M. Learn You a Haskell for Great Good! http://learnyouahaskell.com
  • Selected readings from: Understanding the Digital World by Brian W. Kernigan, 2nd Edition (2021).
  • Selected readings from: Tucker, A. and Noonan, R. Programming Languages: Principles and Paradigms. McGraw-Hill, 2002.
  • Books and articles from the ACM Learning Platform and other online sources

You can find other references in the class bibliography.

Compilers & Interpreters:

  • Free and/or open-source compilers, interpreters, and development environments exist for many languages. For this class, all students will need to be able to write and execute programs in Scheme and Haskell. In addition, you may wish to write a small program in other language(s) to supplement presentations given in class.
  • I recommend using replit.com or Jupyter to write your Scheme and Haskell programs.

Attendance and Participation:

This class will be conducted as a seminar, so your participation is crucial to everyone's learning and weighs heavily in your grade. Active participation in this class means coming to class on time, coming prepared by having read and watched assigned readings and videos, working with your classmates, listening to others, contributing ideas of your own, and asking questions as they come up.

If you are ill or pose a health risk to other people, you should wear a mask or not come to class. You should keep up as well as your condition will allow by watching class videos, working on assignments, and communicating with your instructor and/or TAs in the Collaboration Center through Teams.

To create an inclusive and supportive learning environment in which everyone can participate fully, we will follow these Community Guidelines adapted from the Center for Research on Learning and Teaching (CRLT) at the University of Michigan.

Assignments:

Assignments, class notes, and other material will be made available on the Detailed Schedule page of the course web site (www.cs.kzoo.edu/cs320/). You are responsible for checking this resource frequently.

Reading and video assignments will be assigned for each class. You are expected to come to class having completed the assignments and prepared to discuss the ideas from them.

Reflective journal entries: Throughout the quarter you will maintain a Reflective Journal for this course. In each weekly entry you will reflect on what you learned from the readings and classmates' presentations, address how the week's topics are addressed by Java or Python, the language you are preparing to present on (or have already presented on), and the language(s) presented that week. There will also be one or more general questions I will pose for you to address in your journal entry each week. In the final reflection, you will reflect on the quarter as a whole.

Presentation: Each of you will be expected to work with a partner to prepare a "presentation" on a historical or current language other than Java or Haskell. This might take the form of an in-class presentation, a video presentation, an annotated bibliography for a set of recommended readings along with a summary, or some other form to be negotiated with me. These presentations will be distributed throughout the quarter.

Programming projects: Several programming projects will be assigned throughout the quarter. These will involve programming using languages and paradigms that may be unfamiliar to you. As a result it is important that you begin work on the projects as soon as they are assigned. Assignments should always be turned in on time unless you clear it with me in advance. Your programs should conform to the spirit of the CS Program Style Guide and Documentation Standards although, since you will be writing in a functional language, the details and examples of those documents will not apply. Being careful about structure and documentation is an important step towards writing high-quality programs. You may work on the programming projects individually or in pairs.  As always, you should document who worked on the program, from whom you received assistance, and anyone with whom you had helpful conversations about the project. You will turn in your programs electronically and may also be asked to demo them for the instructor.

Reflective journal entries will be due at midnight each Sunday. Other due dates will be made clear on the Detailed Schedule.

Late policy: Assignments that are turned in late will receive at most partial credit unless you clear it with me in advance.

Grades:

Final grades will be based on:
Attendance, Preparedness, and Participation 5%
Reflective Journal Entries 45%
Programming Projects30%
Presentation 20%

Collaboration:

This course operates in accordance with the principles of the Kalamazoo College Honor System: responsibility for personal behavior, independent thought, respect for others, and environmental responsibility. In particular, academic integrity is a fundamental principle of scholarship. Representing someone else's work as your own, in any form, constitutes academic dishonesty. Unauthorized collaboration and receiving help from others outside the bounds permitted by the instructor are also violations of the College honor code. You are responsible for working within the permitted bounds, and acknowledging any help from others or contributions from other sources.

    Reflective Journal Entries should be your own.

    Presentations may be done individually or with a partner.

    Programming Projects: The "first introduction" programming assignments for Scheme, Haskell, and Prolog should be done individually; the Jay Interpreter project may be done individually or with a partner. When working in a pair, you should indicate all authors in the program documentation and turn in only one copy of the program for the team (not one for each team member).

    Whether working individually or in a team, you may discuss assignments and programming projects with classmates and give and receive help. You may not, however, digitally share code or code fragments, unless you are working as a team on a project where teamwork has been explicitly allowed. You may also, of course, receive help from your instructor and from CS teaching assistants in the Collaboration Center.

    You should document authorship, group-work, and "outside" help (from the TAs, your instructor, or other groups within the class) in the comments at the top of your program using the following clauses:
            Authors(s):
            Working with or alongside lab group members:
            With Assistance From: 

Penalties for a first violation of the Honor Code in this course may include receiving no credit for an assignment, a lowered course grade, or failure of the course. Depending on the severity of the incident, a report may be sent to the Dean of Students, which may result in additional consequences, including suspension or expulsion from the College. Any subsequent violation will result in the immediate failure of the course.