Basics | Goals and Outcomes | Requirements | Evaluation | Policies

Syllabus

Basics

Course

Instructor

Course Resources

  • the course web page: https://www.cs.uni.edu/~wallingf/teaching/cs3540/
  • the programming environment: Dr. Racket
    Dr. Racket is an editor and compiler created specifically for Racket programming. You may also install it on your own laptop or desktop computer. It is also available on computers in the CS computing labs: CEEE 016A and CEEE 010, as well as on the laptops in the cart in CEEE 115.
  • the course mailing list: cs-3540-01-spring@uni.edu
    I will use the mailing list to announce items of interest and answer questions. You may also send ideas and questions for the group to see. Note that to send messages to the course mailing list, you must send from the mailing address from which you are subscribed. By default, that is your uni.edu e-mail address. If you'd like to be subscribed from some other address, you may do so yourself, or let me know.

Course Readings

  • There is no required text to purchase. All readings will be available free online and assigned with each session.
  • The Racket Guide
    Racket's documentation is outstanding. The Racket Guide gives a broad and deep introduction to the language, aimed at people who already know another programming language. Occasionally, the guide introduces a feature sooner than we do in class, but overall it is a useful introduction to the language, its basic features, and its advanced features. We won't use many of the advanced features, because we have only fifteen weeks and learning Racket isn't the only goal of the course.

Course Goals and Outcomes

Goals

The study of programming languages and paradigms is fundamental to the discipline of computer science. As a computer scientist, regardless of your specialty, you should have a deep understanding of the principles of programming languages. They govern the design and use of every language that you will use. They affect the design of the applications you encounter. They even affect the architecture of the machines on which we run our programs. If you understand these design principles, then you will find it easier to be become an effective user of any language, to adapt to new paradigms as they evolve, and to design and implement new languages when necessary. You may be surprised to learn just how often you find yourself implementing small languages as a part of your applications.

This course aims to help you develop a deep, hands-on understanding of the essentials of programming languages. It does so by confronting you with the most fundamental idea in computer programming:

The interpreter for any computer language is just another program.

We will first lay the foundation for the analytic study of programming languages and then use those ideas to develop a sequence of increasingly detailed interpreters for a simple language.

In order to use this approach for the course, it is helpful that you learn a programming language that makes it relatively easy to build language interpreters. We will learn Racket, a programming language that allows us to easily treat programs as data and vice versa. One of the extra benefits of learning Racket is that you will learn to program in a functional style, which will expand your programming repertoire. It will be the third "paradigm" in which you can program, in addition to procedural (Python, C) and object-oriented (Java, Python). Functional programming differs from the other two styles in ery important way: in functional programming, we compute only for values, rather than for side effects.

Note that this course is not about any particular programming language, nor even about a smorgasbord of different languages. We will not study the syntax of new programming languages so that you can use them to write programs. Instead, we will seek develop the knowledge and skills necessary for you to be able to study other languages on your own. The course does introduce you to Racket, a small and malleable programming language, as a tool for expressing the features of languages and writing language interpreters. It will be the microscope we use to study the broader principles of programming languages and paradigms.

Learning Outcomes

By the end of the semester, you should be able to:

  1. read and write programs in a functional style
  2. implement recursive programs over inductively-defined data types, in particular language grammars
  3. describe why and how to implement a language feature as a syntactic or data abstraction of a set of core features
  4. read and write interpreters for small programming languages

Course Requirements

Class sessions

Our class meetings will consist of a mixture of lecture, discussion, and in-class exercises. Much of our lecture and discussion material will go beyond what you read in our textbooks, so attendance is essential. I expect you to read assigned topics prior to the class session and to participate actively in class.

Homework assignments

Over the course of the term, you will complete ten to twelve homework assignments. These assignments will involve applying techniques learned in class and doing small experiments with programs that are provided to you. Some assignments will involve writing and some will consist of paper exercises, but most will involve programming.

Quizzes

During the term, you will complete three to four quizzes, one for each unit of the course. I call these quizzes because they last only thirty to forty minutes. The date of each quiz is tentatively set on the course home page. Ordinarily, I will announce any change to the schedule at least one week in advance.

Final exam

Finally, you will take a comprehensive exam at the end of the course. This may not be as imposing as it sounds, because you will be using the skills you learn throughout the semester.

Course Evaluation

You will earn your grade based on your performance on homework assignments, quizzes, and the final examination. I assign final grades using the following distribution:

Item Number Weight
Homework 10-12 25%
Quizzes 3-4 45%
Final exam 1 30%

Grades will be assigned using an absolute scale:

This means that there is no curve. There are a couple of exceptions to this distribution:

Course Policies

General Policies

Participation in the Course.   I try to accommodate student needs whenever possible, but I can only do so if I know about them. If you ever need to make alternate arrangements for a class session, a quiz, or an assignment, please contact me, in advance, if at all possible. The safest way to make such arrangements is by notifying me via e-mail or phone of your circumstances and how you can be reached.

Walk-In Office Hours.   My regularly-scheduled office hours are times when I am committed to provide assistance to you. No matter how busy I may appear when you arrive, the office hours are for you. You are encouraged to make use of that time. am also available by appointment at other times if you cannot make an office hour.

Laptops in Class.   I encourage students to bring laptops to class and to use them as we write code and learn new ideas in the course. In class, you should use a laptop almost exclusively for work related to the current session. Most importantly, your use of a laptop must never distract another student. This applies to all classroom technology, including cell phones.

Assignments.   All assignments are due by their assigned date and time. In order to receive partial credit, always submit your best effort at that time. I do not accept late work for grading without making a special arrangement in advance.

Collaboration.   I encourage you to work together on homework assignments, as a way to help you understand the problems better and to encounter different points of view. You must acknowledge any collaboration explicitly in the work you submit. However, any work you submit must be your own. Discuss ideas, but write your own answers, including all code. Undocumented or unacceptable collaboration is considered a violation of academic integrity.

Required Syllabus Statements.   UNI has a number of university-level policies common to the syllabi of all course. This course will adhere to all of these policies.

Academic Integrity

Standard of Ethical Behavior

UNI has an established policy of academic integrity. Plagiarism and other forms of academic dishonesty will not be tolerated in this course. See the Student Academic Ethics Policy in the UNI catalog for details on the university's policy.

Use of Tools to Generate Code

This is a course for learning programming language principles and learning how to write functional programs and language interpreters. It is not a course for learning how to use programs that generate code. Therefore, you may not use any tools, AI or otherwise, to create code that you submit for this course.

If you submit code that I think was generated by a tool, I will arrange to meet with you within a week to discuss your submission. If you cannot explain your code or use its technique to solve a different problem of my choosing, or if you do not meet with me within a week, the assignment will receive a grade of 0.

Use of Copilot, ChatGPT, and Other AI Tools

While you may not used tools like Copilot and ChatGPT to generate code for you, you may use them to enhance your learning. Examples of such usage include:

  • prompting the tool to generate additional examples of an idea, to help you consolidate your understanding
  • prompting the tool to generate additional exercises on a topic, to give you more practice working with it

If you use these tools in this way, I encourage you to share with me your prompts, or the exercises and your attempts to solve them. This will help me help you to validate the quality of the responses.

Do not assume that the responses generated by these tool are aligned with the goals or content of the course. The tools may generate code using techniques that are not covered in class, which can create confusion for you. They can also produce code that is too complex for the course, or code that does not meet the specification. (Most assignments specify the techniques you may or may not use for the assignment, and these rules are part of the grading criteria for the assignment). Seek verification from me to ensure you are on the right track.