CSSE 304 Syllabus and Policies

Rose-Hulman Institute of Technology
Department of Computer Science and Software Engineering
Winter, 2020-21 (a.k.a. 202120)

Please report (by email) anything that appears to be an error (including misspellings) or a broken link

 

Table of Contents

Instructor RHIT Catalog Course Description Prerequisites/Background
Required Texts Other Possible Resources Software
Grade Components and Attendance Policy Course Schedule Page Exams
Homework, programs, quizzes, etc. Policy on Late Work Suggestion Box
Academic Integrity Classroom Etiquette Email and Piazza
Other Sources of Help Fun Course materials online

Instructor: Claude Anderson (please call me Claude)

Claude's schedule (office hours, meetings, etc)     Usually 1:30-3:30 PM M-F, but varies from week to week.
Link for Claude's Zoom office hours: https://zoom.us/j/908690887
Email: anderson at rose-hulman.edu (please see my note below about including 304 in your email subject lines)

Better electronic contact info for this course
Better Email: csse304-staff@rose-hulman.edu (goes to me and all of the student assistants)
Better still for questions about assignments, Scheme, etc. CSSE 304 on Piazza (https://piazza.com/rose-hulman/winter2021/csse304)

Where to find Online Course Materials

At the top of the Moodle course page, there is a page that has links to the most important web pages for this course.

Day 1 of the Schedule Page also has many useful links.

Recommendation: go to the course Piazza page to "Edit Email Notifications" for this course and set your preferences for "real-time" and "automatically follow ..."

Back to Table of Contents

RHIT Catalog Course Description:

Syntax and semantics of programming languages.  Grammars, parsing, data types, control flow, parameter passing, run-time storage management, binding times, functional programming and procedural abstraction, syntactic extensions, continuations, language design and evaluation. Students will explore several language features by writing an interpreter that implements them.

Instructor commentary:
This course presents an implementation approach to the study of programming language concepts. Rather than looking at several programming language features "from the outside" — only a user's perspective — We will instead get an inside view by implementing many of the features ourselves, via a series of interpreters (the languages will mostly be subsets of Scheme). We will use the Scheme programming language to provide a laboratory environment in which to write the interpreters and to illustrate various programming paradigms and concepts.

In the first part of the course, you will become familiar with the laboratory equipment (the Scheme language and environment), while encountering some new concepts and programming paradigms. In the second part of the course you will encounter several more new concepts, along with their implementations.  In the final part of the course, you will (with a partner) write your own interpreters for some small programming languages (mostly subsets of Scheme). We will also examine continuations, syntactic extensions, dynamic binding, engines, and coroutines, plus various scope and parameter-passing rules.

My main goals for the course are to

Back to Table of Contents

Prerequisites/Background

Official prerequisites: CSSE 230, or permission of the instructor.

My actual initial expectations of you: I hope that each student coming into this course

Back to Table of Contents

Required Texts (all are online and free)

You should plan to do a significant amount of reading for this course, especially during the first two or three weeks.

Back to Table of Contents

Other Possible Resources

Back to Table of Contents

Software

SCHEME

We will use Chez Scheme, authored by R. Kent Dybvig.  Note that chez is a French word that rhymes with way.  I will be using version 9.5 in class, and you may want to do the same thing,  But you probably also want to install Petite Chez Scheme version 8.4 (32-bit non-threaded version), since that version comes with SWL, a primitive IDE that many students use for the first part of the course.

The Assignment 0 document has brief instructions for Scheme installation.

EDITORS

When using Chez Scheme on your laptop or another computer, you may use any text editor  to create your Scheme code. Examples:

Editor Comments
SWL This rudimentary IDE comes with Petite Chez Scheme version 8.5. It's an easy editor to learn to use, so I recommend that you use it for day 1 of the course. Then find a better editor as soon as you can; SWL is very limited.
Gnu Emacs This is my favorite editor for Scheme. It has keyboard shortcuts for many Scheme related operations (such as cutting and pasting the next Scheme expression), or transferring code from your editing window to a Scheme window.
Emacs has a fairly steep learning curve. If you'll invest a few hours in discovering and practicing approximately 30 keyboard shortcuts, it will be a great editor for you, especially if you like to avoid using the mouse or trackpad. (Curiosity: Have you ever noticed that in most movies people, especially the hacker types, who are using a computer only use the keyboard and not the mouse?)
Don't want to invest that time? Try one of the editors below.
Sublime Text with SublimeREPL I have seen several students using this, and they seem to like it.
Notepad++ My favorite general editor (I am using it to edit this document). It also does a decent job of highlighting and indenting Scheme code.
Visual Studio Code Growing in popularity at RHIT. Has at least one Scheme plugin. I have seen at least one 304 student use it for Scheme editing.
Notepad Don't go there. Just don't!

Back to Table of Contents

Grade Components and Attendance Policy

40% Homework, programs, quizzes, in-class exercises, interpreter project
60%Exams
  Exam1  15% (Monday, December 21, 6:30-9:00 PM) . 
  Exam2  20% (Tuesday, Feb 2, 6:30-9:00 PM) .
       The Environments and Closures part of this exam may happen earlier in the term during a regular class time.
  Final   25% (during exam week, time to be announced by the registrar). 
                      
Professor's judgment: Your numeric average is the starting point for your grade. For almost all students, it is also the ending point, but I reserve the right to use my judgment in cases where it is clearly appropriate to do so: adjustment for poor attendance, for excellent participation, or for other instructor knowledge of what the student can do.  Usually those adjustments are in the upward direction.  Here is an example where the adjustment may be downward: a student gets near-perfect scores on most homework assignments but bombs every exam.  Further investigation reveals that the student got homework answers from someone (or somewhere) else.
Attendance :

AN EXPERIMENT FOR THIS TERM: For the first part of the term (and probably beyond), I am trying a new policy. You will have a choice of attending the synchronous class meetings, or watching the video afterward. I will do my best to post each Zoom video before the end of the class meetings. If you come to the class meetings you will be able to interact with me and with other students, but the content will be there in the session videos (as long as there are no recording glitches. There may be some sessions that I designate as mandatory for all students. I will re-evaluate during the break and decide whether to continue this policy.

What the Rose-Hulman Rules and Proceduress manual says about grades that are B or higher:  "B" and "B+" indicate very good performance, definitely above a satisfactory level, but not as good in analytical thinking and originality as that required for the grade of "A." Thorough competence to do excellent work in the field is required for the grades of "B" and "B+" which will not be given for mere compliance with the minimum essential standards of the course.

Extra credit: Bounty for discovering new textbook errata or errors in course documents:
If you are the first to report an error or broken link, you will receive some bonus homework points. The number of points will be based on the importance and subtlety of the error. Even spelling errors will count for something.  If the error is substantial and likely to hinder other students' course progress until it is fixed, report it in the Piazza csse304 Bug Reports folder. If it is a minor error, send an email message to me with Subject line CSSE 304 bug report. 

This term I am creating a lot of new documents and significantly revising old ones, so you are likely to have many opportunities to report errors.

Extra credit points may also be given to students who frequently ask/answer questions on Piazza (but not if what you write is anonymous).

Back to Table of Contents

Exams

These will cover material from the lectures, readings, and homework. Exams will usually contain written questions on concepts and some pencil-and-paper (or word processor) code exercises, plus programming problems that you must implement on your computer and debug during the exam. Many exam questions will be intended to check your understanding and ability to apply concepts, rather than simple memorization.

Winter, 2020-21: I plan to use the Respondus Lockdown Browser and Monitor for the Moodle portions of the exams. You will need a webcam and microphone, connected to a Windows machine or a Mac. You should try the practice quiz very early in the course, in case there are problems that you need to resolve before the exam.

If varsity athletes or members of courses or RHIT music groups have practice or class on Tuesday evenings, you can make arrangements with me to begin the exam later than 6:30.

The first exam (Monday evening, Dec 21 6:30-9:00 PM) is primarily on the basics of Scheme, recursive programming, abstraction, and first-class procedures; it will include a few other concepts from class, such as functional programming and box-and-pointer diagrams.

The second exam (Tuesday evening, February 2 6:30-9:00 PM) will also involve a significant amount of programming, but it will focus more on concepts than the first exam does. Environments and closures will be one emphasis; that part may be tested during a class meeting that comes before the evening exam. You will probably be asked to add a small enhancement to your interpreter project.

The final exam (the registrar will schedule it sometime during exam week) will be comprehensive, but with a major emphasis on the later course concepts, especially continuations, call/cc, and the interpreter project.  All students must take the final exam at the scheduled time. 

If you have a conflict with one of the evening exam times, please let me know by the end of Day 2 of the course. Otherwise, you should keep these times free in your schedule. 
If you have an accommodation that entitles you to extra exam time, please let me know during the first two weeks of the course, so we can make arrangements.

The "written" parts of the exams will be closed book and notes. For the computer parts, you may use EoPL, EoPL-1, The Scheme Programming Language book, class examples, and any code that you have written, but no other internet resources other than the grading server.

Warnings: It is unusual for students who do poorly on an exam to do significantly better on later exams.  Why? The material is quite cumulative, and if you have not mastered the earlier material, it is hard to grasp the later material.  If you do poorly on exam 1 or 2, you need to significantly increase or refocus your effort in the course. But the best thing to do is to get off to a good start so this does not become an issue.
The material from the last three weeks of the course is considerably harder than the earlier course material, which results in several problems on the final exam being significantly harder than the previous exam problems.

Back to Table of Contents

Homework, in-class quizzes (not)

When I give a reading assignment, I seriously expect you to read it. Some in-class discussions will assume that you have done the reading and understood the "easy stuff" before class. You should ask about any details that you do not understand.

The textbooks, especially EoPL, contain many useful exercises. Some of them will be assigned to be turned in; it is a good idea for you to look at and give some thought to others. I sometimes use unassigned exercises from the textbooks as exam questions.

This course will not have regular in-class daily quizzes. The main purpose of such quizzes in lower-level courses is "glorified note-taking for credit". Many students find that these help them to pay attention in class, and to know what I consider most important from that day's class. But some students find that trying to keep up with the quiz is a distraction from being involved with what is happening next in the classroom. Some days I may instead provide notes pages that serve a similar purpose but will not be collected.  Use them if they help you. 

Unless I specify differently for a particular assignment, all assignments will be due online at 11:59 PM.

During the first 2.5 weeks or so (I call it Scheme-a-thon), a new assignment will be due almost every weekday (including some Wednesdays)  to encourage you to quickly learn the CSSE 304 lab environment (Scheme). After that there will typically be two programming assignments per week, the most common due dates will be Monday and Thursday.

Each of the early assignments (first half of the course) will require writing several short (and mostly independent) procedures; some later assignments will require writing complex programs that involve many interacting procedures. Some assignments may contain written problems in addition to the programming problems. In order to understand the course material, it is important that you do significant hands-on work with it. Don't let yourself get behind at the beginning of the course.  There will be about 24 assignments, totaling about 120-140 assigned procedures (some of which require helper procedures), the interpreter milestones, and a few written problems.

This term in our "partially flipped" environment, there will sometimes be in-class time to work on homework so that there is not so much to do outside of class

Most of the early homeworks will be individual assignments. You are of course allowed to talk to other people about the concepts and even the Scheme mechanisms needed for an assignment, but the code you turn in should be yours, done without copying other people's solutions (including solutions from previous terms or solutions posted on the internet). You should be prepared to explain your solutions to both individual and pair-programming problems if you are asked to do so.

You are, however, allowed to develop code together with an in-class group, and everyone in the group can use that code.

Every submitted file should begin with comments that include your name(s) and a description of the file's contents. Procedures for each problem should begin with a comment that includes the problem number. All procedures should have reasonable and consistent variable names, comments, style, and indentation. Your code should generally not contain lines that are more than 60 characters long (causing wraparound and general unreadability of the grading server's output).   You should follow these style guidelines:

Your solutions should be ordered by problem number.

Most programming assignments will be submitted using the PLC grading server, https://plc.csse.rose-hulman.edu/

The assignments are cumulative: Many of the assignments depend heavily on understanding the previous assignments; several assignments will involve various stages of writing an interpreter for a small programming language.

Grades for programming problems will be based primarily on correctness, but style and efficiency may also be considered for some assignments.

Get started early on the programming assignments! Some of the problems may need a day or two of "incubation time" between when you first start thinking about them and when the "lights come on" in your head. Even during Scheme-a-thon, you should try to get ahead by a day or so by the end of the first week.

If you are retaking the course, you may already have written solutions to some of the exercises. I recommend that you do not use those solutions but instead redo those problems, or at least make sure that you still understand them.

If you have a friend who took this course in the past, they may offer you homework solutions, or you may find solutions online.  Don't give in to that temptation.  It will not help your learning in the course.  And it may lead to an academic misconduct violation.

Back to Table of Contents

Policy on Late Work (programming assignments only)

All written problems must be turned in on time if you want credit for them. But ...

...we all have occasional days when we are extremely busy, or times when a program takes longer to debug than we expect it will. To account for this, each student has a “late day bank account” for programming assignments. Your account will start with four late days.

  1. Using (withdrawing) a late day allows you to turn in any programming assignment up to 24 hours after the time it is due.  There will be no credit deduction.
  2. You will earn (deposit) an additional late day if your last submission for an assignment happens at least 24 hours before it is due, provided that you earn at least 70% of the possible points for that assignment. There is no limit to the number of late days you can save up.
  3. Unless I specify otherwise for a particular assignment, at most one late day may be used or earned on any one programming assignment.
    After that one late day has passed, you may not submit that assignment for credit.
  4. Overdrafts are not allowed. If your late day account is nearly empty, you should take it as a sign that you need to change your approach to the course. If your account is empty and you submit an assignment late, you will receive no credit.  Historically, most students whose late day balance goes to zero before the end of Scheme-a-thon end up dropping the course, because they have not established a good pattern for getting the work done.
  5. Some particular assignments may be designated as "no late days may be used" assignments. This might happen because:
    1. there is an exam the next day, or
    2. the topic of the next class meeting depends heavily on this assignment, or
    3. some other reason that I will explain at the time.

How to notify me of a late day deposit or withdrawal: You do not have to do anything. I will keep track of late days and post everyone's balance on the web. I can think of no better way to notify you.  If you do not want to participate in the late day bank because you do not want your balance to be public, let me know. But then you will not be able to submit any late assignments for credit.

What if you earn a lot of late days by submitting assignments early? Accumulated late days will be worth something at the end of the term.  I will add (# remaining late days)*4  extra-credit homework points.

How to check your late day balance: There is a link near the top of the schedule page, just above the session quick links

Academic Integrity

See the CSSE Department statement on academic honesty.

Note that copying from a previous CSSE 304 student's work or from something posted on the web is "dishonesty equivalent" to copying from a current student.

You are encouraged to discuss the problems and general approaches to solving them with other students. But when it comes to writing code, it should be your own work (or the work of your pair if it is a pair-programming assignment). Especially if you are having trouble understanding how some pre-defined Scheme procedure works or pinning down a run-time or logic error in your program, by all means talk to someone about it.

If you use someone else's ideas (including code from a previous term PLC course) in your solution (or any other work that you do anywhere), you should

Beginning the process of producing your solution with an electronic copy of work done by other students is never appropriate.

On exams All work on exams is to be individual. Of course you may not copy work done by other people who are taking or who have taken that exam.

Penalties: The minimum penalty for a first homework offense is twice the value of the assignment. Thus if you cheat on any part of an assignment that is worth a total of 60 points, your maximum score for that assignment will be -60. The philosophy behind this is that if it comes down to a choice between submitting someone else's work and submitting nothing, your expected score should be higher if you submit nothing.
If you cheat on an exam, your course grade will be F.

If you get into a position where you can't complete an assignment legitimately, the correct approach is to not submit the assignment, and then to discuss with me how to improve your situation for future assignments.

If in any situation, you are not sure whether a certain kind of collaboration is appropriate, you should ask me beforehand. This is a very serious matter that I do not take lightly. Nor should you.

Back to Table of Contents

Classroom Etiquette

Most of the stuff I usually put here does not apply so much to an online classroom. So this section is empty for the online class.

Back to Table of Contents

Email and Piazza

Most announcements will be posted on Piazza, so there will be a long-term record of them. Piazza is also a place for students to ask questions and answer other students' questions. Be sure to check out the CSSE 304 Piazza course.   You probably want to set your email notifications to "real-time" and "follow all".  When an announcement is about something that will happen that will happen within 24 hours, I will often tell Piazza to override your email settings so that everyone gets the message.

When you send course-related email to me, please begin the Subject: line with 304: , so that I can quickly pick it out from among the dozens of daily email messages. Also, please make the Subject line as specific as you can.
     For example: 304: Error in the specification of problem 1 on assignment 3 ?

If your question is not personal and if it contains no "spoilers" for pending HW problems, please post it to one of the Q&A folders on Piazza. First of all, you may get an answer more quickly than if you send email to only me. Second, you may get multiple people's perspectives. Third, you will contribute to an active learning community. Piazza can be valuable, but only if you and others participate.

Another alternative is to email me and all of the CSSE 304 assistants mailto:csse304-staff@rose-hulman.edu

Back to Table of Contents

Other Sources of Help

Student assistant lab hours.   A link to the schedule will be posted on the schedule page as soon as the schedule is set.

In addition to the course assistants, other students in the course can be one of your best sources of help. And they will also learn more if they explain things to you. Don't try to be the Lone Ranger in this course, especially if you find the course material difficult. If you find that you have worked on something for 30 minutes since the last time you made any progress, it's probably time to seek help.

Assistants:

Omar Fayoumi (fayoumoa)
Nathan Greiner (greinenc)
Megan Merz (merzm)
Jonathan Moyers (moyersjm)
Andrew Orians (oriansaj)
Andy Sadler (sadlerap)
Eric Tu (tuey) Shixin Wu (wus4)

Back to Table of Contents

Fun

I do hope you'll enjoy what you will learn and do in this course. If not, feel free to talk with me about the reasons.

Back to Table of Contents

Anonymous Suggestion Boxes

I want your feedback on how the course is going and how it could be improved. While "nonymous" suggestions are even more useful than anonymous ones, I'd like to know what you are thinking even if you do not feel comfortable with letting me know who made the suggestion. Thus the CSSE304 Moodle course page contains a link to an anonymous suggestion box. All I ask is that you will use it for serious suggestions, not just to vent when you are momentarily frustrated. Take a deep breath, count to 10, and if you still have something to say, by all means say it. Sometimes suggestions that students make seem so obvious once I read them, but I would have missed the idea on my own. And of course you can also use the suggestion box to tell me about things you like in the course and don't want me to change them.

In addition to the general anonymous feedback survey, there is another anonymous survey where you can give me feedback about the course assistants.  Are they knowledgeable, friendly, helpful, good communicators, in the lab when they are supposed to be, etc?  I will appreciate your feedback, both positive and negative, and also your suggestions for ways of improving the CSSE 304 TA system.
 

Back to Table of Contents